Si4432無線芯片調試經驗分享
前段時間主要是搜集了一些si4432的資料,包括芯片手冊,原理圖,官方代碼等。調試買到的模塊,看能否接收到數(shù)據(jù)。對具體的配置以及工作模式的了解還不是很清楚。現(xiàn)總結如下:
Silicon Labs EZRadioPRO系列ISM頻段無線芯片SI4432, 可工作在240-960MHZ頻段范圍內。最大輸出功率可以達到+20DBm。外圍可加入功率放大電路,以提高發(fā)送功率。
Si4432主要有關閉模式,掛機模式,發(fā)射模式和接收模式組成。關閉狀態(tài)下可以降低功耗,各模式切換必須先進入掛起狀態(tài)再切換。其中的掛機模式,給SPI寄存器地址07h賦予不同的值,又分為五種不同的子模式。待機模式,睡眠模式,傳感器模式,預備模式,調諧模式。上電復位后,或者芯片由掉電狀態(tài)退出后將默認進入預備模式。
Si4432數(shù)據(jù)傳輸方式主要有三種,F(xiàn)IFO模式,直接模式,和PN9模式。在 FIFO Mode 下,使用片內的先入先出堆棧區(qū)來發(fā)送和接收數(shù)據(jù)。對 FIFO 的操作是通過SPI 對 07H 寄存器的連續(xù)讀或者寫進行的。在FIFO Mode下,Si4432自動退出發(fā)送或者接收狀態(tài),當相關的中斷信號產生,并且自動處理字頭和CRC校驗碼。在接收數(shù)據(jù)時, 自動把字頭和CRC校驗碼移去。在發(fā)送數(shù)據(jù)時,自動加上字頭和CRC校驗碼。在直接收發(fā)模式下,Si4432如傳統(tǒng)的射頻收發(fā)器一樣工作。PN9模式,在這種模式下的Tx數(shù)據(jù)是內部產生使用偽隨機( PN9序列)位發(fā)生器。這種模式的目的是用作測試模式不斷觀察調制頻譜,而不必負載/提供數(shù)據(jù)。
配置Si4432 模塊是通過SPI 方式進行的,可配置為FIFO 方式和直接方式, 推薦Si4432 工作于 FIFO 收發(fā)模式,這種工作模式下,系統(tǒng)的程序編制會更加簡單,并且穩(wěn)定性也會更高.不過網上評論說,這種模式沒有直接模式傳輸?shù)木嚯x遠。其中配置Si4432 主要包括載波頻率、調制方式、數(shù)據(jù)發(fā)送速率、CRC 校驗、前導碼、 同步字、數(shù)據(jù)頭、地址等,具體可參考 Si4432(IA4432) RegisterSettings_RevV-v16 寄存器配置工具進行。
至于si4432是否帶遠程無線喚醒,看了半天手冊也沒找到。不過,網上的一位網友說:“以前產品用的是CC1100,確實出現(xiàn)近距離通信不正常的問題,空曠地帶150M(FSK,9.6k/s,433M,WOR休眠偵聽通信方式),距離不夠;然后改用CC1101+PA,但是瞬間發(fā)射電流>300mA,由于我們是電池供電,功耗太大了。 后來通過商家介紹用SI4432,前幾天簡單測試了下通信距離>330M(433M,40K/S,GFSK),可能更遠的距離還行,就沒測試了,下個星期再做詳細測試。 對于現(xiàn)在的使用情況,個人覺得他們各有優(yōu)點。CC1101的特點具有自動無線偵聽,可以實現(xiàn)電磁波喚醒功能,但是通信距離不夠;而SI4432通信距離不錯,且內部自帶PA,可以達到+18dB,發(fā)射電流在60mA左右。但不具備無線喚醒這樣的功能,只能依*自身的定時器,配合單片機來實現(xiàn)電磁波喚醒功能,這樣一來對MCU的穩(wěn)定性要求就相當高。”
Si4432的寄存器操作:
Si4432共有128個寄存器(O一127),它們控制芯片的工作和記錄芯片的狀態(tài)??赏ㄟ^SPI對它們進行訪問。SPI的it順序是可配置的,其缺省配置(MSB在前)與MCU的順序相同。命令格式為2字節(jié)結構:讀/寫標志(1 bit,0—讀,l一寫),寄存器地址(7 bit)+待寫數(shù)據(jù)(對于讀操作,該值也必須有,只是可為任意值)。每次可以讀寫1/多(burst)個字節(jié),它們是由時鐘信號決定的,在讀寫一個字節(jié)后,如果時鐘繼續(xù)有效,那么,地址將會自動加1,接下來的操作將是對下一個寄存器的讀寫。通過Silicon Labs提供的WDS(Wirelessevelopment Suit)可訪問這些寄存器并可生成相應的初始化代碼。只能在空閑狀態(tài)下對寄存器進行初始化,否則,可能會出現(xiàn)意外的結果。為了提高傳輸信號的質量,增大發(fā)射距離,保證數(shù)據(jù)的可*傳輸,系統(tǒng)使能數(shù)據(jù)白化、曼徹斯特Manchester)編碼、CRC校驗和采用GFSK調制。
狀態(tài)機:
關閉(shutdown)和空閑(idle)狀態(tài)稱為低功耗狀態(tài),而idle又可細分為5個不同的子狀態(tài),它們在低功耗下完成各種與無線數(shù)據(jù)收發(fā)無關的操作。發(fā)送(Tx)和接收(RX)狀態(tài)稱為激活狀態(tài),它們完成無線數(shù)據(jù)的收發(fā)。除了關閉狀態(tài)外(只能通過MCU的I/O腳來設置),其余狀態(tài)都可以通過SPI接El進行設置和讀取??赏ㄟ^寄存器07h實現(xiàn)狀態(tài)的切換,這種切換表現(xiàn)在兩個方面:1)當設置其中的某一位時,狀態(tài)立即發(fā)生切換;2)在完成收發(fā)任務后,決定返回到idle狀態(tài)的哪一個子狀態(tài)(在本系統(tǒng)中為休眠狀態(tài),即設置enwt=1)??赏ㄟ^02h寄存器獲取當前的狀態(tài)。芯片的常態(tài)為idle,為了保證不漏收數(shù)據(jù),可利用喚醒定時器來定時喚醒芯片進入融狀態(tài)(此時要設置08h寄存器中的enldm位為l,并設置定時常數(shù)寄存器14h和19h中的值),在確認沒有數(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
網上搜到的程序代碼以及官方提供的代碼大都是基于Silicon Labs的c8051f單片機的,雖然都是51核的,但編程環(huán)境以及運行速度都是不一樣的,不能直接拿來在普通51上運行,得稍作修改。目前完成了基于普通51單片機的三份代碼修改。一份是官方的,一份是買模塊時送的,一份是網上找來的。網上還有一份基于pic單片機的源碼,但看了后感覺跟官方的差不多,沒去修改。修改后在51開發(fā)板上可以運行了。但是其中一個模塊不能工作,沒法看到效果。具體能否接收還不確定。因此,也就停留在了這個地方??梢酝ㄟ^串口觀察到一些信息,比如初始化完成后產生低電平的NIRQ中斷,以及發(fā)送完成后也產生低電平的NIRQ中斷,程序片段
RF4432_Init()
{
……
while ( RF4432_IRQ== 1); //等待軟復位完成,當軟復位完成后有中斷發(fā)生
…….
}
UART_Send_Str("RF芯片si4432初始化完畢....n");//串口發(fā)送調試信息
正常初始化完畢后通過串口會看到語句“RF芯片si4432初始化完畢....”,否則停留在while ( RF4432_IRQ== 1); 看不到串口輸出的信息。但只有一個模塊發(fā)送,一個模塊接收,觀察到接收模塊收到了數(shù)據(jù)才能證明調試是沒問題的。
評論