Код: Выделить всё
uint8_t Transceiver_HandleStatus(void)
{
uint8_t ClearRX = 0;
uint8_t PHStatus[1] = {0};
uint8_t FIFOStatus[2] = {0};
Transceiver_ReadRegs(Transceiver_GET_PH_STATUS, NULL, 0, PHStatus, 1, 1);
if (PHStatus[Transceiver_PH_STATUS_PH_PEND] & Transceiver_PH_STATUS_PACKET_RX_PEND) {
Transceiver_ReadRegs(Transceiver_FIFO_INFO, NULL, 0, FIFOStatus, 2, 1);
if (FIFOStatus[0] > 0 && FIFOStatus[0] < 64) {
Transceiver_ReadRXBuf(Transceiver_Data, FIFOStatus[0]);
#ifdef SAE_ENABLE_DEBUG
dxprintf("RX %d:\n", FIFOStatus[0]);
for (int i = 0; i < FIFOStatus[0]; i++) {
dxprintf("%x ", Transceiver_Data[i]);
}
dxprintf("\n");
#endif
} else {
ClearRX = 1;
}
}
if (PHStatus[Transceiver_PH_STATUS_PH_PEND] & Transceiver_PH_STATUS_PACKET_SENT_PEND) {
ClearRX = 1;
}
if (ClearRX) {
// Clear the RX buf
uint8_t Params[1] = {0x03};
Transceiver_ReadRegs(Transceiver_FIFO_INFO, Params, 1, FIFOStatus, 2, 1);
}
Transceiver_RxMode();
return FIFOStatus[0];
}
Это принятые пакеты. Где:RX 23:
10 f0 cf 3 a9 db 1 11 20 8 18 1 80 8 3 c0 0 0 18 4f f 7a 7a
SetSyncWord: ec a2
RX 23:
10 f0 cf 3 a9 db 1 11 20 8 18 1 80 8 3 c0 0 0 19 f8 12 bb 7e
RX 23: это кол-во принятых байт;
Последние 4 байта - CRC32, пятый с конца это счетчик передатчика.
И так может продолжаться вечность.
Но только стоит мне отправить пакет, загрузить пакет в буфер TX и вызвать команду на отправку, как тут же происходит странный глюк - пакеты принимаются, но в буфере добавляется какой-то мусор ровно на длину отправленного пакета:
TX 12: Отправили 12 байт.TX 12:
b 0 ec a2 1 a9 db 1 dd cc bb aa
И тут же при приеме читаем из буфера:
Причем первые 23 байта это реально наш правильный пакет, счетчик увеличивается, CRC считается, дальше до 35 байт уже идет мусор рандомный.RX 35:
17 10 f0 cf 3 a9 db 1 11 20 8 1 80 8 3 c0 0 0 1a 21 34 f8 73 3 8f 55 99 75 5b 67 1c f9 89 fa 96
SetSyncWord: ec a2
RX 35:
17 10 f0 cf 3 a9 db 1 11 20 8 1 80 8 3 c0 0 0 1b 96 29 39 77 17 65 6b 5d 94 51 db b7 62 3a d7 c5
Если передернуть питание приемника (чтоб чип перезагрузить), то все опять встает на свои места.
Т.е. явно проблема не в передатчике.
Буферы TX/RX раздельные.
Как с этим бороться я уже не знаю.


