Amiccom RF IC Direct mode介紹(以A7130為例)
本篇介紹Amiccom A7130 RF IC Direct mode TX/RX使用方法與原理
Direct mode的用意只是方便使用者可以直接從GIO Pin Follow CKO Clock(DataRate Clock),送/收 customized packet in ("bit" sequence資料)簡稱raw data bit,
換句話說,也就是raw data需跟隨CKO Clock的正緣( rising edge ) 才能做TX Data輸入至GIO1(TRXD) Pin的行為,如下圖:
注意下圖GIO2 Pin,需設為TMEO(Tx Modulation Enable Output),Raw data"必需"要在Tx Modulation Enable後(A7130 GIO2 Pin Go High)才可以開始將Data送至A7130 GIO1 pin(TRXD),且TX端需自行建立Preamble Code(0x55,0x55,0x55,0x55) & ID Code(ex:0x34,0x75,0xC5,0x2A)的Raw data bit
反之Rx部分是在CKO負緣( falling edge )時做接收Raw Data行為,如下圖:
RX端也是需要掃描到ID Code,A7130 GIO2=Fsync Go High後,A7130才會起震CKO ,Data就由A7130 GIO1(TRXD)輸出接收到的raw data
底下以Amiccom A9139M0核MCU當主控,控制A7130做TX/RX Direct mode介紹
代碼:<TX/RX測試版:A7130-F09(A9139M0F7) - 0628_2450_001Mhz_Direct modeTRX_500Kbps_Rx_sensitivity94dbm.zip>
TX端:
I/O介紹:
A9139M0 MCU端 | A7130 Module |
P0.4(Input mode) | GIO1(Output mode)=TMEO |
P0.5(OutPut mode)=Raw Data | GIO2(InPut mode)=Data pin |
P0.3(Input mode) | CKO(OutPut mode)=DataRate Clock |
1. 使用者可以直接使用A7130的FIFO Config調整FMS bit=0,即可切換至Direct mode
A7130_WriteReg(MODECTRL_REG,0x60);
2. 將GIO1設為TMEO
A7130_WriteReg(GPIO1_REG, 0x09);//GIO1=TMEO,
3. 需要將GIO2 其中一隻Pin 設為TXD(Direct TX端)/RXD(Direct Rx端),這邊建議因為應用上可能會有TX/RX交替雙向傳輸的需求,因此建議可以直接設成[0111]=TRXD模式
A7130_WriteReg(GPIO2_REG, 0x9D);//GIO2=TRXD
3. 將CKO設為,DCK(Direct TX)/RCK(Direct RX)
A7130_WriteReg(CKO_REG, 0x02);//CKO Enable,CKO=DCK/RCK
4. 下TX CMD
StrobeCmd(CMD_TX); //entry tx & transmit
5. 等待GIO1(TMEO) Go High,這裡是將A7130的GIO1 pin(Output)接到MCU的P0.4(Input),因此MCU P0.4會去判斷A7130 GIO1是否輸出為HIGH,為high表示A7130 tx modulation enable
while(GPIO0->DATA_PIN.P04==0);
6. MCU開始Read CKO Clock,發送Preamble Code至A7130 TX端的GIO2 Pin(TRXD)
SandOneByteData(0x55); SandOneByteData(0x55); SandOneByteData(0x55); SandOneByteData(0x55);
SandOneByteData function:
void SandOneByteData(Uint8 Data) { Uint8 i; for(i=0; i<8; i++) { while(CKO==1);//MCU Input Read A7130 CKO Pin state if(Data & 0x80) GIO2 = 1;//MCU Output=1 else GIO2 = 0;//MCU Output=0 Data<<=1; while(CKO==0);//MCU Input Read A7130 CKO Pin state } }
7. 發送4Byte ID Code
//ID SandOneByteData(0x34); SandOneByteData(0x75); SandOneByteData(0xC5); SandOneByteData(0x2A);
8. Send Payload Data
SandData(PN9_Tab,64);
SandData function:Data GIO2 Pin follow CKO Pin Low->high(rising edge)時,輸入資料
void SandData(Uint8 *p, Uint8 cnt) { Uint8 i,j; Uint8 Data; for(j=0; j<cnt; j++) { Data=*p; for(i=0; i<8; i++) { while(CKO==1);//MCU Input Read A7130 CKO Pin state if(Data & 0x80) GIO2 = 1;//MCU Output=1 else GIO2 = 0;//MCU Output=0 Data<<=1; while(CKO==0);//MCU Input Read A7130 CKO Pin state } p++; } i=0; }
9. 發送完data,手動下Standby CMD結束TX行為
StrobeCmd(CMD_STBY);
RX端:
I/O介紹
A9139M0 MCU端 | A7130 Module |
P0.4(Input mode) | GIO1(Output mode)=Fsync |
P0.5(Input mode)=Data Pin | GIO2(OutPut mode)=Raw Data |
P0.3(Input mode) | CKO(OutPut mode) |
1. 使用者可以直接使用A7130的FIFO Config調整FMS bit=0,即可切換至Direct mode
A7130_WriteReg(MODECTRL_REG,0x60);
2. 設定A7130 GIO1=Fsync mode
A7130_WriteReg(GPIO1_REG, 0x05);//GIO1=FSYNC,
3. 設定A7130 GIO2=TRXD mode
A7130_WriteReg(GPIO2_REG, 0x9D);//GIO2=TRXD
4. 設定A7130 CKO=DCK/RCK mode
A7130_WriteReg(CKO_REG, 0x02);//CKO=DCK
5. 下RX CMD進入RX Mode
StrobeCmd(CMD_RX);
6. Waiting ID Code sync GIO1 Go High
while(GIO1==0);
7. Fsync成功後,開始讀資料,follow CKO Pin high->low(falling edge)
ReadData(tmpbuf,64);
ReadData function:
MCU P0.5(GIO2IN)=Input mode Read A7130 GIO2 Pin Output Data follow CKO Clock
void ReadData(Uint8 *p, Uint8 cnt) { Uint8 Data=0; Uint8 i,j,src; src=0; for(j=0;j<cnt;j++) { for(i=0;i<8;i++) { while(CKO==0); if(GIO2IN==1) { src=(src<<1)|0x01; } else { src=src<<1; } while(CKO==1); } *p=src; p++; } src=0; }
8. 接收完data,手動下Standby CMD結束RX行為
StrobeCmd(CMD_STBY);