如何動態 調整RX接收長度(以A5133為例)

SamYang2023-12-1651核104

此篇說明,Rx端如何動態調整接收資料的長度

  1. 之前介紹過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


image.png

    2. 由於A5133調整FIFO 長度的FEP 參數有12 Bit,所以我們需要使用到TX Payload的"前2 Byte"用來定義告知RX端需要將FEP做相應的調整

image.png

  •     將Tx Data的前2 Byte修改成需要RX調整FEP參數的數值,此範例設定0x1E=30

image.png

    3.    Rx端首先還是先將RX FIFO 長度設成Max=64Byte,後續收到Tx 封包後再做即時調整

image.png

    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資料

a5133 fifo dymic.jpg














发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。