2012年10月3日 星期三

Zigbee CC2530 點對點收發控制-無線

Zigbee 點對點的通訊,感覺就複雜了許多,搜尋了很多前輩的經驗,大家都告訴說,學zigbee要”不求甚解”,因為整個系統真的分的很細,你只要取用你要的部份就好了,其它的部份,不要太過份去解讀它,不然…真的會看不完啦!!!

開發環境與使用工具:

作業系統:Windows 7 32bit

開發程式:IAR Assembler for 8051 8.10.1 (8.10.1.40194)

硬體架構:TI SmartRF05 EB 1.8.1 + CC2530F256 EM 1.3.1

整理一下實作執行步驟和遇到的問題與排除過程:

TI網站下載cc2530_sw_example檔案:swrc135b

使用iar開啟cc2530_sw_samples(在ide這個資料夾裡面!)

clip_image002

選擇light_switch這個code

clip_image004

執行後,可能會出現下方出現錯誤訊息。

clip_image006

這個錯誤是linker發現錯誤,要選擇正確的IC linker路徑。

如下所示,在project上方按右鍵àOptions

clip_image008

選擇LinkeràConfigàLinker configuration file

打勾先取消再勾選,就會找到定義的路徑。

clip_image010

再從中選擇正確的ic型號。

clip_image012

設定完成後,回到iar的主程式,再按一下綠色三角型的圖示(執行)。

這時會看到你的開發板上出來如下圖示:

clip_image014

按下”S1”這顆按鈕之後,會出現Swith選項。

clip_image016

推動搖桿的左右方向,可選擇此開發板是”傳送”還是”接收”模式。

clip_image018

首先,我們把A板設定為”switch”發送端。

clip_image020

再來,將B板設定為”light”接收端。

此時,會看到LED 1的黃色燈號是亮的狀態。

clip_image022

將A板(傳送端)的搖桿中鍵按下,則會發送控制訊號給B板(接收板)

此時,B板的燈號會暗掉。

clip_image024

但此程式有個問題,就是燈號只能做一次控制,第二次再按的話,LED 1的燈號完全不受控了。

這時可以查看tx訊號是否有在送出。啟用Packet Sniffer程式(此程式可搭配CC2531 Dongle使用,簡單的說,就是dongle會偵測空氣中某頻段是否有訊號在傳送,且訊號的格式也會詳列出來,方便debug使用。)

clip_image026

選擇GenericàStartàRadio Configuration選擇0x19 (25頻道)。因為這個tx程式的頻道是鎖在25,所以頻道必需要一致,才會接收到訊號。

clip_image028

下方的清單選擇你要偵測的裝置,可用cc2531監控,或是選cc2530的話,必需要切換到”light”(接收端)。設定完成後,按下執行鍵。

clip_image030

監控端設定完成後,發送端按下方向桿的中鍵(發送)。之後會看到空氣中傳送的資料格式。

clip_image032

clip_image034

這代表說,你的tx端沒有問題,你每按一次發送鍵,它就會送出一次訊號,但是為什麼B板上的LED燈確只會亮一次呢?接著我們單步執行,查看程式是如何跑的,發現程式停留在這一個地方:

while(!basicRfPacketIsReady());

再追查下去,發現rxi.isReady的回傳值有問題。(等不到回傳)

這個部份,就要追查到”中斷”的部份了,經過一連串的追查後,發現問題出在這一個中斷副程式:

static void basicRfRxFrmDoneIsr(void)

{ ….

….

// Indicate the successful ACK reception if CRC and sequence number OK

if ((pStatusWord[1] & BASIC_RF_CRC_OK_BM)) && (pHdr->seqNumber == txState.txSeqNumber))

{

txState.ackReceived = TRUE;

}

….

….

}

把紅色的部份全部反斜線掉,這個問題就可解決掉了。

什麼?不行,傻瓜!注意一下你的刮號是否都有對應到呀!如果沒有對應到的話,你叫程式怎麼跑的起來呀!!!

試試看囉^^

0 意見:

張貼留言