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