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