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);