TR24A -- это какая-то диверсия со стороны Китая... Ребус. Попадалово. Вместо того, чтобы заниматься делом, двигаться вперед, приходиться биться с какими-то ветрянными мельницами.
Пара советов тому, кто хочет поупражняться с этой хренью.
Прежде всего, не поленитесь, сделайте RF-sniffer. Это ваши глаза и уши. Вы будете знать -- кто у вас вещает в эфир, и что при этом передает. Я для начала сделал очень простой сниффер -- вывод результата на зуммер. У меня в задаче предполагается передавать только четыре команды, т.о. согласно номеру команды зуммер столько же раз пищит. Но, поскольку не каждый пакет "долетает до средины Депра", то я еще добавил длинный гудок зуммера перед короткими пиликаниями, обозначающими код команды. Таким образом, я уже мог "видеть" сколько валидных пакетов, сколько битых, а сколько вообще не дошло. Статистика -- вещь серьезная!
Чисто для справки. У меня почему-то "долетает" 10-20% валидных пакетов, процента 2 -- невалидных. И 80-90% вообще не понятно -- то ли вообще не передаются, то ли вообще никак не принимаются. Пробовал менять расстояние 20см и 3 м -- разницы нет. Пробовал сменить канал. Статистика, которую я привел выше, относится к каналу 2. Канал 0, дает теже результаты. А вот канал 40 (десятичное) дает раз в пять-десять еще больше пропусков, т.е. реально долетает до сниффера 1-2% пакетов. Чем это объяснить -- не знаю!
Перелопатив быдло-код китайца (и проржавшись) вникся в код BSVi. Ну что, пацаны, СЛАВЯНЕ РУЛЯТ! Отличный рабочий код. "Рабочий" -- не в том смысле, что работающий. То, что код худо-бедно работает, это понятно. А в том, что уважаемый BSVi не готовил свой код для выставки или для обучения. Вывалил как есть. Я его понимаю. Все нормально. Так вот, в отличие от кода BSVi, у меня связь между девайсами получается только при такой последовательности загрузки регистров 7 и 52:
Код
void TR24A_TurnToRX(void)
{
...
_WriteReg(0x07, 0x0080 | RFCHANNEL);
_WriteReg(0x52, 0x0080); // Clear FIFO
}
void TR24A_SendPkt(BYTE *pkt, BYTE len)
{
...
_WriteReg(0x52, 0x8000);
...
_WriteReg(0x07, 0x0100 | RFCHANNEL);
}
Не спрашивайте меня почему так происходит. Я не знаю!
Еще один момент. Гуляя по разным источникам, я насобирал с пол-дюжины разных наборов для инициализации регистров TR24A. Они почти все рабочие. Особой разницы в количестве правильно доставленных пакетов для разных наборов я не обнаружил.
Учитывая скудность информации по TR24 (EM198810) и его очень низкую надежность передачи данных, я прихожу к выводу, что построение радиоканала на его базе обходится очень дорого. Вывод пока такой -- "Не гнялся бы ты, поп, за дешевизной!" (С) АСП.
Буду благодарен тому, кто сможет убедить в обратном. Гы-ы!