CC1101的硬件BUG?
时间:12-23
整理:3721RD
点击:
simpliciti上面的源码
/* * Read the RXBYTES register from the radio. * Bit description of RXBYTES register: * bit 7 - RXFIFO_OVERFLOW, set if receive overflow occurred * bits 6:0 - NUM_BYTES, number of bytes in receive FIFO * * Due a chip bug, the RXBYTES register must read the same value twice * in a row to guarantee an accurate value. */ { uint8_t rxBytesVerify; rxBytesVerify = mrfiSpiReadReg( RXBYTES ); do { rxBytes = rxBytesVerify; rxBytesVerify = mrfiSpiReadReg( RXBYTES ); } while (rxBytes != rxBytesVerify); }
事实上我以前读RxByte读取一次,还是稳定的!不知道为什么这段代码要读两次?
还有个问题,按照常理,接收触发一次都应该清洗一次RXFIFO,(SFRX)。但协议栈接收中断居然没有?
这个在SiliconErrata里有描述, 有work round就可以避免。
http://www.ti.com/lit/er/swrz020e/swrz020e.pdf
simpliciTI进入中断的条件是0x06,如下,即要么这包收完了,要么包因条件不满足丢了,要么就是进入到了OVERFLOW
Asserts when sync word has been sent / received, and de-asserts at the end of the packet. In RX, the pin will also deassert
when a packet is discarded due to address or maximum length filtering or when the radio enters
RXFIFO_OVERFLOW state. In TX the pin will de-assert if the TX FIFO underflows.
而出现了这些条件,在simpliciTI中都有处理。这个程序很稳固,没有问题。该调用SFRX的地方也调用了。