Amiccom RF WOR(低功耗接收)介紹(以A7169 為例)
(一). 本篇介紹Amiccom A7169 RF IC的WOR(Wake On Rx)功能,又稱低功耗接收模式
WOR的喚醒方式可分成3種類,最常使用的是第2種by ID SYNC(也就是當掃描到相同ID Code時,RF IC將會被喚醒,執行RX CMD)
by_preamble
by_sync
by_carrier
使用者可以自行調整WOR_SL & WOR_AC的參數來設定休眠時間與接收時間
啟動WOR時需要將 RCOSC_E=1 & WORE=1 & WMODE=0 & TWSOE=0
底下說明這些Bit的寄存器位址
RCOSC_E=1
注意:WWSE=WORE=1
WMODE=0
TWSOE=0
代碼:
A7169-A40 RX_WOR_By ID Sync.zip
底下介紹WOR_enable_by_sync 功能:
先將RF 設為Standby mode,執行RC Oscillator校準
設定GIO1=FSYNC(By ID Code)
Uint16 worsl,worac; StrobeCMD(CMD_STBY); RCOSC_Cal(); //RC Oscillator Calibration A7169_WritePageA(GIO_PAGEA, (A7169Config_PageA[GIO_PAGEA] & 0xF000) | 0x0045); //GIO1=FSYNC
3.設定sleep time & active time
注意:若是加長sleep time & 縮短active time,雖然可以達到更省電的效果,但有可能造成Tx發包時active時間太短,導致RX端ID 不好Sync,漏接的狀況出現,建議使用demo code推薦的參數為主 。
sleep time=204.06ms
active time=3.96552ms
//setup WOR Sleep time and Rx time worsl = 25;//WTR Low Period = 1 + (25 + 1) x 7.81 = 204.06ms worac = 125;//WTR High Period = (120 x 1) + (125 + 1) x 30.52 = 3.96552ms A7169_WritePageA(WOR1_PAGEA, (((worac & 0x003F) << 10) | (worsl & 0x03FF)));//WOR_AC[5:0] & WOR_SL[9:0] A7169_WritePageB(SYN_PAGEB, (((worac & 0x01C0) >> 6) << 11));//WOR_AC[8:6] A7169_WritePageB(WOR3_PAGEB, ((worsl & 0xFC00) >> 10) | (((worac & 0xFE00) >> 9) << 6));//WOR_AC[15:9] & WOR_SL[15:10]
4.Enable RC Oscillator (RCOSC_E=1) & Enable WOR(WORE=1),RF IC將自動進入WOR模式,等待active時接收到正確ID後才會喚醒起來
A7169_WritePageA(WOR2_PAGEA, A7169Config_PageA[WOR2_PAGEA] | 0x0010); //enable RC OSC & WOR by sync A7169_WriteReg(MODE_REG, A7169Config[MODE_REG] | 0x0200); //WORE=1 to enable WOR function while(GIO1==0); //Stay in WOR mode until receiving ID code(ID detect ok)
5.當ID正確後,Disable WOR功能,將GIO1設回WTR mode,並執行RX CMD,觀察GIO1(WTR)是否成功完成RX CMD
A7169_WriteReg(MODE_REG, A7169Config[MODE_REG] & ~0x0200); //WORE=0 to disable WOR function A7169_WritePageA(GIO_PAGEA, (A7169Config_PageA[GIO_PAGEA] & 0xF000) | 0x0001); //GIO1=WTR StrobeCMD(CMD_STBY); StrobeCMD(CMD_RX); while(GIO1==0); //wait RX ready while(GIO1==1); //wait receive completed
6.執行RxPacket();儲存Rx Data到tmpbuf中
RxPacket();
(二).計算WOR平均電流,由於WOR屬於Sleep一段時間後active一段時間的交互方式運行,所以無法使用萬用表量測(因為萬用表只能量測出瞬間電流),若拿來量測WOR電流,萬用表數值會跳動難以觀察,但如果使用者有紀錄型的電源供應器,就能輕鬆觀察WOR下的平均電流,若沒有則可採用計算的方式得出大概的WOR平均電流
1.找到Amiccom提供的手冊上,sleep mode帶WOR On時的電流為1.3uA,RX mode時為3mA
在套用代碼上設定的Sleep time=204.06ms,Rx Active time=3.96552ms,計算出平均電流約為58.5uA
平均電流公式: