Silicon LabsEZRadioPro 系列的Si4463無線模塊,TX FIFO 和 RX FIFO只有64字節(jié)。那么如何實現(xiàn)超過64字節(jié)的數(shù)據(jù)包收發(fā)呢?需要繁瑣的去把長包拆分成小于等于64字節(jié)的小包,每個小包單獨發(fā)送,然后接收端把這些小包數(shù)據(jù)拼接回原始的長包數(shù)據(jù)嗎?回答是:不!因為長包的收發(fā)在Si446X 收發(fā)芯片實現(xiàn)是非常簡單的。
打開WDS軟件或者查看API寄存器描述文檔,有兩個中斷非常有用,就是TX_FIFO_ALMOST_EMPTY_PEND和RX_FIFO_ALMOST_FULL_PEND,這個兩個中斷代表的意思就是TX FIFO 的數(shù)據(jù)即將發(fā)送完,或者RX FIFO即將被填充滿。那么我們只需要根據(jù)這兩個中斷,就可以實現(xiàn)超長數(shù)據(jù)包收發(fā)了。
例如,在TX_FIFO_ALMOST_EMPTY_PEND中斷產(chǎn)生時,立刻填充數(shù)據(jù)到TX FIFO中,新填充的數(shù)據(jù)會緊跟著之前的數(shù)據(jù)發(fā)送出去,直到數(shù)據(jù)包完全發(fā)送完成,最終產(chǎn)生一個發(fā)送完成中斷,表示這包數(shù)據(jù)發(fā)完。接收時也是類似,當(dāng)收到的數(shù)據(jù)不斷往RX FIFO中填充,快要填滿的時候,就會產(chǎn)生RX_FIFO_ALMOST_FULL_PEND中斷,這時立刻把RX FIFO讀取出來,那么空出來的FIFO又可以繼續(xù)接收新的數(shù)據(jù),直到接收到的總數(shù)據(jù)等于整個完整的數(shù)據(jù)包長度,產(chǎn)生一個接收完成中斷。整個過程都是連續(xù)的,根據(jù)包長度和設(shè)定的閥值,會產(chǎn)生多個TX_FIFO_ALMOST_EMPTY_PEND和RX_FIFO_ALMOST_FULL_PEND中斷,但是每包數(shù)據(jù)發(fā)送完成和接收完成中斷只會有一個,和短包的收發(fā)是一樣的。
WDS的設(shè)置界面如下:
設(shè)置配置TX_FIFO_ALMOST_EMPTY和RX_FIFO_ALMOST_FULL 閥值
開啟對應(yīng)的中斷
用戶需要再代碼中添加檢測到TX_FIFO_ALMOST_EMPTY和RX_FIFO_ALMOST_FULL兩種中斷時系統(tǒng)對應(yīng)的反應(yīng)。
以上是對Si4463發(fā)送超長數(shù)據(jù)包的一些總結(jié),希望能對你有所幫助。