新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Si4432無線芯片調(diào)試經(jīng)驗分享

Si4432無線芯片調(diào)試經(jīng)驗分享

作者: 時間:2012-08-16 來源:網(wǎng)絡(luò) 收藏

前段時間主要是搜集了一些si4432的資料,包括芯片手冊,原理圖,官方代碼等。調(diào)試買到的模塊,看能否接收到數(shù)據(jù)。對具體的配置以及工作模式的了解還不是很清楚?,F(xiàn)總結(jié)如下:

Silicon Labs EZRadioPRO系列ISM頻段SI4432, 可工作在240-960MHZ頻段范圍內(nèi)。最大輸出功率可以達到+20DBm。外圍可加入功率放大電路,以提高發(fā)送功率。

主要有關(guān)閉模式,掛機模式,發(fā)射模式和接收模式組成。關(guān)閉狀態(tài)下可以降低功耗,各模式切換必須先進入掛起狀態(tài)再切換。其中的掛機模式,給SPI寄存器地址07h賦予不同的值,又分為五種不同的子模式。待機模式,睡眠模式,傳感器模式,預(yù)備模式,調(diào)諧模式。上電復(fù)位后,或者芯片由掉電狀態(tài)退出后將默認(rèn)進入預(yù)備模式。

數(shù)據(jù)傳輸方式主要有三種,F(xiàn)IFO模式,直接模式,和PN9模式。在 FIFO Mode 下,使用片內(nèi)的先入先出堆棧區(qū)來發(fā)送和接收數(shù)據(jù)。對 FIFO 的操作是通過SPI 對 07H 寄存器的連續(xù)讀或者寫進行的。在FIFO Mode下,自動退出發(fā)送或者接收狀態(tài),當(dāng)相關(guān)的中斷信號產(chǎn)生,并且自動處理字頭和CRC校驗碼。在接收數(shù)據(jù)時, 自動把字頭和CRC校驗碼移去。在發(fā)送數(shù)據(jù)時,自動加上字頭和CRC校驗碼。在直接收發(fā)模式下,Si4432如傳統(tǒng)的射頻收發(fā)器一樣工作。PN9模式,在這種模式下的Tx數(shù)據(jù)是內(nèi)部產(chǎn)生使用偽隨機( PN9序列)位發(fā)生器。這種模式的目的是用作測試模式不斷觀察調(diào)制頻譜,而不必負(fù)載/提供數(shù)據(jù)。

配置Si4432 模塊是通過SPI 方式進行的,可配置為FIFO 方式和直接方式, 推薦Si4432 工作于 FIFO 收發(fā)模式,這種工作模式下,系統(tǒng)的程序編制會更加簡單,并且穩(wěn)定性也會更高.不過網(wǎng)上評論說,這種模式?jīng)]有直接模式傳輸?shù)木嚯x遠(yuǎn)。其中配置Si4432 主要包括載波頻率、調(diào)制方式、數(shù)據(jù)發(fā)送速率、CRC 校驗、前導(dǎo)碼、 同步字、數(shù)據(jù)頭、地址等,具體可參考 Si4432(IA4432) RegisterSettings_RevV-v16 寄存器配置工具進行。

至于si4432是否帶遠(yuǎn)程無線喚醒,看了半天手冊也沒找到。不過,網(wǎng)上的一位網(wǎng)友說:“以前產(chǎn)品用的是CC1100,確實出現(xiàn)近距離通信不正常的問題,空曠地帶150M(FSK,9.6k/s,433M,WOR休眠偵聽通信方式),距離不夠;然后改用CC1101+PA,但是瞬間發(fā)射電流>300mA,由于我們是電池供電,功耗太大了。 后來通過商家介紹用SI4432,前幾天簡單測試了下通信距離>330M(433M,40K/S,GFSK),可能更遠(yuǎn)的距離還行,就沒測試了,下個星期再做詳細(xì)測試。 對于現(xiàn)在的使用情況,個人覺得他們各有優(yōu)點。CC1101的特點具有自動無線偵聽,可以實現(xiàn)電磁波喚醒功能,但是通信距離不夠;而SI4432通信距離不錯,且內(nèi)部自帶PA,可以達到+18dB,發(fā)射電流在60mA左右。但不具備無線喚醒這樣的功能,只能依*自身的定時器,配合單片機來實現(xiàn)電磁波喚醒功能,這樣一來對MCU的穩(wěn)定性要求就相當(dāng)高。”

Si4432的寄存器操作:

Si4432共有128個寄存器(O一127),它們控制芯片的工作和記錄芯片的狀態(tài)??赏ㄟ^SPI對它們進行訪問。SPI的it順序是可配置的,其缺省配置(MSB在前)與MCU的順序相同。命令格式為2字節(jié)結(jié)構(gòu):讀/寫標(biāo)志(1 bit,0—讀,l一寫),寄存器地址(7 bit)+待寫數(shù)據(jù)(對于讀操作,該值也必須有,只是可為任意值)。每次可以讀寫1/多(burst)個字節(jié),它們是由時鐘信號決定的,在讀寫一個字節(jié)后,如果時鐘繼續(xù)有效,那么,地址將會自動加1,接下來的操作將是對下一個寄存器的讀寫。通過Silicon Labs提供的WDS(Wirelessevelopment Suit)可訪問這些寄存器并可生成相應(yīng)的初始化代碼。只能在空閑狀態(tài)下對寄存器進行初始化,否則,可能會出現(xiàn)意外的結(jié)果。為了提高傳輸信號的質(zhì)量,增大發(fā)射距離,保證數(shù)據(jù)的可*傳輸,系統(tǒng)使能數(shù)據(jù)白化、曼徹斯特Manchester)編碼、CRC校驗和采用GFSK調(diào)制。

狀態(tài)機:

關(guān)閉(shutdown)和空閑(idle)狀態(tài)稱為低功耗狀態(tài),而idle又可細(xì)分為5個不同的子狀態(tài),它們在低功耗下完成各種與無線數(shù)據(jù)收發(fā)無關(guān)的操作。發(fā)送(Tx)和接收(RX)狀態(tài)稱為激活狀態(tài),它們完成無線數(shù)據(jù)的收發(fā)。除了關(guān)閉狀態(tài)外(只能通過MCU的I/O腳來設(shè)置),其余狀態(tài)都可以通過SPI接El進行設(shè)置和讀取。可通過寄存器07h實現(xiàn)狀態(tài)的切換,這種切換表現(xiàn)在兩個方面:1)當(dāng)設(shè)置其中的某一位時,狀態(tài)立即發(fā)生切換;2)在完成收發(fā)任務(wù)后,決定返回到idle狀態(tài)的哪一個子狀態(tài)(在本系統(tǒng)中為休眠狀態(tài),即設(shè)置enwt=1)??赏ㄟ^02h寄存器獲取當(dāng)前的狀態(tài)。芯片的常態(tài)為idle,為了保證不漏收數(shù)據(jù),可利用喚醒定時器來定時喚醒芯片進入融狀態(tài)(此時要設(shè)置08h寄存器中的enldm位為l,并設(shè)置定時常數(shù)寄存器14h和19h中的值),在確認(rèn)沒有數(shù)據(jù)/收完數(shù)據(jù)后再返回到原來的idle子狀態(tài)。

用普通51單片機 IO 口模擬SPI:

SPI讀操作函數(shù):

unsigned char SPI_Read(void){unsigned char i,rxdata;rxdata = 0x00;for (i = 0;i  8;i++){rxdata = rxdata1;RF4432_SCLK=0;if (RF4432_SDO==1)  //讀取最高位,保存至最末尾,通過左移位完成整個字節(jié){rxdata |= 0x01;}delay_10us(2);  RF4432_SCLK=1;delay_10us(2);  }return rxdata;}SPI寫操作函數(shù):void SPI_Write(unsigned char txdata){unsigned char i;for (i = 0;i  8;i++){RF4432_SCLK=0;if ((txdata0x80)==0x80)    //總是發(fā)送最高位{RF4432_SDI=1;}else{RF4432_SDI=0;}txdata = txdata1;delay_10us(2);  RF4432_SCLK=1;delay_10us(2);  }}RF4432 寄存器讀操作函數(shù):unsigned char  RF4432_ReadReg(unsigned char  addr){unsigned char value;RF4432_SEL=0;                 SPI_Write(addr|RR);     value = SPI_Read();         RF4432_SEL=1;        return value;}RF4432 寄存器寫操作函數(shù):void  RF4432_WriteReg(unsigned char  addr, unsigned char value){RF4432_SEL=0;                 SPI_Write(addr|WR);     SPI_Write(value);         RF4432_SEL=1;                }SI4432寄存器定義:#define DEVICE_TYPE                                     0x00#define DEVICE_VERSION                             0x01   //版本號……參考附件。


RF4432
射頻芯片初始化函數(shù),RF4432 設(shè)置接收模式函數(shù), RF4432 數(shù)據(jù)包接收函數(shù), RF4432 數(shù)據(jù)包發(fā)送函數(shù)等。參考文檔:si4432模塊使用手冊.pdf。這些附件我整理了一個壓縮包http://www.51hei.com/f/452de.rar大家可以去下載.

網(wǎng)上搜到的程序代碼以及官方提供的代碼大都是基于Silicon Labs的c8051f單片機的,雖然都是51核的,但編程環(huán)境以及運行速度都是不一樣的,不能直接拿來在普通51上運行,得稍作修改。目前完成了基于普通51單片機的三份代碼修改。一份是官方的,一份是買模塊時送的,一份是網(wǎng)上找來的。網(wǎng)上還有一份基于pic單片機的源碼,但看了后感覺跟官方的差不多,沒去修改。修改后在51開發(fā)板上可以運行了。但是其中一個模塊不能工作,沒法看到效果。具體能否接收還不確定。因此,也就停留在了這個地方??梢酝ㄟ^串口觀察到一些信息,比如初始化完成后產(chǎn)生低電平的NIRQ中斷,以及發(fā)送完成后也產(chǎn)生低電平的NIRQ中斷,程序片段

RF4432_Init()

{

……

while ( RF4432_IRQ== 1); //等待軟復(fù)位完成,當(dāng)軟復(fù)位完成后有中斷發(fā)生

…….

}

UART_Send_Str("RF芯片si4432初始化完畢....n");//串口發(fā)送調(diào)試信息

正常初始化完畢后通過串口會看到語句“RF芯片si4432初始化完畢....”,否則停留在while ( RF4432_IRQ== 1); 看不到串口輸出的信息。但只有一個模塊發(fā)送,一個模塊接收,觀察到接收模塊收到了數(shù)據(jù)才能證明調(diào)試是沒問題的。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉