如何動態 調整RX接收長度(以A5133為例)
此篇說明,Rx端如何動態調整接收資料的長度
之前介紹過Amiccom的RF IC ,FIFO Length的PHY 最大長度為64 Byte,一般情況下,我們需要固定好TX/RX端的FIFO Length空間大小,以利Tx 1st Byte可以對應到 Rx1st Byte,Tx 2nd Byte可以對應到 Rx 2ndByte.....,但特殊情況下,可能出現TX並不是每包的長度都是固定64 Byte,而是動態變化的話,這時RX也需要跟著變化相應的RX FIFO Length
2. 由於A5133調整FIFO 長度的FEP 參數有12 Bit,所以我們需要使用到TX Payload的"前2 Byte"用來定義告知RX端需要將FEP做相應的調整
將Tx Data的前2 Byte修改成需要RX調整FEP參數的數值,此範例設定0x1E=30
3. Rx端首先還是先將RX FIFO 長度設成Max=64Byte,後續收到Tx 封包後再做即時調整
4. 先執行CMD RX將Data給收下來
while(1) { if(RF_LVR_Check())//check if BOD reset has occurred break;//exit loop & re-RF init else RF_StrobeCmd(CMD_RX); Delay10us(1); while(~GIO2); while(GIO2);
5. Data收下來後,立馬讀取出前2 Byte的資料
RF_StrobeCmd(CMD_RFR);//RX fifo pointer reset SCS=0; ByteSend(FIFO_REG | 0x40);//address 0x05, bit7 cmd=0, bit6=1=read for(i=0; i <2; i++) { recv = ByteRead(); tmpbuf[i]=recv; } SCS=1;
6. 將收到FEP參數填入RF_FIFOLength寄存器裡面
RF_FIFOLength(tmpbuf[1]+1);
7. 調整完RX FIFO length後,再將後面的payload資料,填入tmpbuf[i]裡面,注意:i 起始需要從2開始,結束需要在tmpbuf[i]+2之前
SCS=0; ByteSend(FIFO_REG | 0x40);//address 0x05, bit7 cmd=0, bit6=1=read for(i=2; i <tmpbuf[1]+2; i++) { recv = ByteRead(); tmpbuf[i]=recv; } SCS=1;
8. RX端查看tmpbuf[i]裡的數組,內容為:前2 Byte為Tx給的FEP參數(前面已根據這2 Byte去修改Rx FIFO Length),後面Data則為動態調整後的Tx傳來的30 Byte Payload資料