This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1101的硬件BUG?

Other Parts Discussed in Thread: SIMPLICITI

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的地方也调用了。