基于CC1100的無(wú)線(xiàn)手持終端的設計
1 硬件設計
系統組成框圖如圖1所示。它主要由MCU控制單元(控制各可編程芯片、處理輸入和輸出信號)、射頻收發(fā)單元(射頻信號的調制與解調、發(fā)射與接收和對數據進(jìn)行打包與解包等)、鍵盤(pán)與LCD顯示單元(信息的輸入和顯示)、存儲器單元(存放漢字庫和菜單數據庫)、UART和USB接口單元(與PC機的通信、提供充電電源)、電源管理單元(為系統提供各種類(lèi)型的電壓、充電、外接電源的切換等)等組成。
1.1 MCU單元
C8051F340(以下簡(jiǎn)稱(chēng)MCU)是一款具有全速USB功能的混合信號Flash微控制器,其內置256kB+4KB的RAM和64KB的Flash存儲器;精確校準(0.25%)的12MHz內部振蕩器(工作時(shí)外部不必接晶振),處理速度可達48MIPS;基于JTAG接口的非侵入式在系統調試接口等[1]。其功能和性能完全滿(mǎn)足設計要求。
1.2 射頻收發(fā)器單元
CC1100是Chipcon/TI公司力推的一款性?xún)r(jià)比“最高”的射頻單片收發(fā)器芯片,它體積?。?0pins,QLP 44mm)、接收靈敏度高(-110dBm/1.2kbps)、速率可編程(1.2kb/s~500kb/s)、工作電壓低(1.8V~3.6V)、功耗低(15.4mA/433MHz/1.2kb/s,1.8μA的待機電流,待機模式下的啟動(dòng)時(shí)間僅為0.3ms)、在所有頻段輸出功率高達+10dBm、高效的SPI接口、數字RSSI(接收信號強度指示)輸出、無(wú)線(xiàn)喚醒(WOR)功能等。它的工作頻率為300MHz~1000MHz[2]。
考慮到高頻干擾,該單元單獨做一塊PCB板,并用金屬罩對其進(jìn)行電磁屏蔽,通過(guò)一個(gè)7針的連接器與底板相連,如圖2所示。GDO0與MCU的P0.7相接,用于指示是否已完整地接收了一個(gè)數據包,它可作為MCU的外部中斷源信號。在缺省情況下,GDO0會(huì )輸出一個(gè)頻率為晶振頻率(192Hz)的方波,這可作為在調試時(shí)判斷CC1100是否正常工作的依據。SCLK(串行時(shí)鐘)、SO(串行輸出)、SI(串行輸入)、CSn(片選)分別與MCU的P0.0、P0.1、P0.2和P0.6相接,實(shí)現MCU與CC1100的SPI接口相連。MCU對CC1100的配置、控制和數據收發(fā)都通過(guò)該SPI接口進(jìn)行。在設計PCB時(shí)要讓晶振與芯片引腳盡量靠近,并用地線(xiàn)把時(shí)鐘區隔離開(kāi),晶振外殼接地并固定,元件都使用SMT(表帖式)元件,以減少過(guò)孔和體積。VCC為3.3V。C4、C5、C6和L3、L4組成一個(gè)非平衡變壓器,用于在差分和單端RF(射頻)信號之間進(jìn)行變換,C1、C2、C3和L1、L2組成一個(gè)LC濾波器,它與非平衡變壓器一起實(shí)現與50Ω的天線(xiàn)相適配。電阻R1用于為CC1100的偏壓設置一個(gè)精準的參考電流。DS1用于指示模塊上的電源是否正常。
1.3 鍵盤(pán)和LCD顯示單元
鍵盤(pán)包括數字鍵、發(fā)射鍵、方向鍵、多功能鍵、電源開(kāi)/關(guān)鍵等,它由一個(gè)8行3列的矩陣和一個(gè)獨立的鍵(電源開(kāi)/關(guān))組成。其中的行線(xiàn)與MCU的數據線(xiàn)(P4口)相連,列線(xiàn)分別與P2.0、P2.1和P2.2相連。軟件在判斷P2口的低3位有變化時(shí),立即讀取P4口的內容,可獲得當前按下的鍵。電源開(kāi)/關(guān)鍵直接與電源管理芯片的啟動(dòng)/關(guān)閉腳相連。
UC1610為具有128160點(diǎn)陣的4個(gè)灰度級偽彩LCD控制器和驅動(dòng)器,專(zhuān)為超低功耗的手持設備設計,與MCU的接口有并口、SPI、I2C。本系統采用2線(xiàn)I2C總線(xiàn)與MCU的SMBus相連,此時(shí),應把CD、WR0和WR1接地,D0、D3分別與MCU的SCL、SDA相連,數據線(xiàn)中的其他位接地。對其控制可參考其數據手冊[4]。
1.4 存儲器單元
MCU的片內存儲器已足夠存放程序代碼,但由于要存放漢字庫和菜庫,所以必須外接一個(gè)數據存儲器。此存儲器既要容量大又要封裝小,因此選擇了ATMEL公司的SPI Flash存儲器AT25F2048。該存儲器容量為2Mbit,8腳貼片封裝,通過(guò)4線(xiàn)SPI與MCU連接,數據傳輸率為12Mb/s??筛鶕祿謨灾械拿罡袷竭M(jìn)行相關(guān)的讀寫(xiě)以及擦除操作[5]。
1.5 UART和USB接口單元
程序可以通過(guò)JTAG接口下載,但像菜庫、漢字庫只能通過(guò)UART/USB接口下載。MCU提供2個(gè)UART口,通過(guò)外接一個(gè)UART← →RS232變換的驅動(dòng)芯片MAX3232,就可與PC的串口相連。MCU內嵌一個(gè)USB2.0(設備)控制器[1],可以直接與PC的USB接口相連。同時(shí),USB口還提供對設備進(jìn)行充電的電源。
1.6 電源管理單元
LTC3455是凌特公司針對手持應用新推出的一個(gè)完整的單片電源管理解決方案,在4mm4mm的24引腳QFN封裝內集成了USB電源管理器、鋰離子電池充電器和雙DC-DC(5V~3.3V和5V~1.8V)轉換器,它把以前需要5個(gè)或更多芯片實(shí)現的幾個(gè)功能結合在一起。對電源進(jìn)行無(wú)縫選擇(3選1),其過(guò)程完全是按優(yōu)先級自動(dòng)進(jìn)行的:5.0V AC適配器→USB電源→電池。在使用適配器或USB電源時(shí),電池充電器被使能,而且器件內部的電源完全由選擇的外部電源供電[3]。電源管理單元電路圖如圖3所示。圖中的CON1與PC的USB口相接,CON2與電源適配器相接,USBHP用于選擇USB電源的上限電流為500mA。P30用于使能SW2和熱插拔功能,P31用于指示電池的電量,P32用于指示ON腳的狀態(tài),P33用于使能本芯片,SW-VCC用于開(kāi)啟/關(guān)閉輸出電源。
2 軟件設計
軟件的開(kāi)發(fā)環(huán)境為keil μVISION3,使用keil C51語(yǔ)言。系統的無(wú)線(xiàn)通信部分采用主從結構,從站由手持設備組成,主站由設在廚房的基站組成,工作方式采用主站輪詢(xún)、從站監聽(tīng)方式。為了避免多個(gè)從站爭用信道而發(fā)生沖突,規定只有主站向某個(gè)從站點(diǎn)名時(shí),從站才向主站發(fā)送數據。系統軟件主要流程如圖4所示。
2.1 CC1100的編程要點(diǎn)
(1)寄存器訪(fǎng)問(wèn)
在不同速率下CC1100有不同的配置。為了獲得最佳性能,有些配置必須經(jīng)過(guò)復雜的計算才能獲得。Chipcon公司提供了SmartRF Studio軟件對有關(guān)的寄存器進(jìn)行最佳配置。針對某一個(gè)速率,該軟件會(huì )自動(dòng)提供一組最佳的寄存器配置參數,程序員只需在初始化時(shí)把這些配置寫(xiě)入相應的寄存器即可。配置只能在CC1100處于IDLE狀態(tài)下時(shí)才能進(jìn)行。
除了配置操作外,還有讀狀態(tài)、發(fā)命令和讀/寫(xiě)Rx/Tx FIFO操作。這些操作有相似的通信格式:head字節+data(讀和發(fā)命令操作除外)字節。Head由R/W(bit7)、Burst(bit6)和Addr(bit5~0)三部分組成。R/W標示當前操作是讀1還是寫(xiě)0;Burst標示當前操作是訪(fǎng)問(wèn)單個(gè)0還是多個(gè)1寄存器。但在讀狀態(tài)寄存器時(shí)是一個(gè)例外,雖然每次只能讀一個(gè)狀態(tài)寄存器,但該位必須為1,原因是狀態(tài)寄存器的地址與命令寄存器的地址是重疊的,因此對burst位進(jìn)行了重定義;bit0~5(Addr)為寄存器的地址。
(2)狀態(tài)機
CC1100內部有一個(gè)用于管理各個(gè)狀態(tài)之間相互切換的狀態(tài)機。當前狀態(tài)可從狀態(tài)寄存器MARCSTATE獲得。狀態(tài)轉移圖如圖5所示。命令、內部事件和配置信息決定狀態(tài)切換。寄存器MCSM1中的TXOFF_MODE、RXOFF_MODE決定在完成發(fā)送操作、接收一個(gè)有效的包后將進(jìn)入哪一個(gè)狀態(tài)。需要注意的是,具有省電功效的無(wú)線(xiàn)喚醒功能WOR能使CC1100在SLEEP狀態(tài)下周期性地自動(dòng)轉到IDLE狀態(tài),然后再自動(dòng)轉到Rx狀態(tài)。但如果在此狀態(tài)下沒(méi)有數據包可接收,將又回到SLEEP狀態(tài);否則,在接收完數據包之后,下一個(gè)狀態(tài)將由RXOFF_MODE決定,但不會(huì )進(jìn)入SLEEP狀態(tài),必須在進(jìn)入IDLE狀態(tài)時(shí)由MCU發(fā)送SWOR命令才能再次進(jìn)入。在SLEEP狀態(tài)下,晶振是否繼續工作是由寄存器MCSM0中的XOSC_FORCE_ON決定的(0:繼續工作,1:停止工作)。在MCU訪(fǎng)問(wèn)CC1100(CSn=0)時(shí),無(wú)論XOSC_FORCE_ON為何值,晶振將總是工作。
(3)數據包的處理機制
CC1100的特點(diǎn)之一是在收發(fā)數據時(shí)對包處理的全面支持,包在發(fā)送時(shí)具有如圖6所示的格式。
前導碼提供包的位同步,它是由0和1交替排列組成的序列。當進(jìn)入Tx狀態(tài)時(shí),調制器將根據MDMCFG2中的SYNC_MODE決定是否啟動(dòng)發(fā)送前導碼,若允許發(fā)送,則其長(cháng)度由MDMCFG1中的NUM_PREAMBLE決定。在發(fā)送完前導碼后,如果TX FIFO中有數據,則立即發(fā)送同步字;否則,調制器將重復發(fā)送前導碼直到TX FIFO中有數據,或者,在強制轉換到其他狀態(tài)時(shí),停止發(fā)送前導碼。同步字提供包的byte同步。寄存器SYNC0和SYNC1中存放同步字的高低字節。SYNC_MODE還決定是否重復發(fā)送一次同步字。
CC1100支持4種格式的包,其中數據(凈荷)長(cháng)度分別是:定長(cháng)(小于255B)、變長(cháng)(小于255B)、無(wú)限長(cháng)(數據長(cháng)度無(wú)效,手動(dòng)終止包的發(fā)送)和有限長(cháng)(數據長(cháng)度有效,可以是任意值)。有限長(cháng)格式是無(wú)限長(cháng)和定長(cháng)的綜合,本系統采用該格式。需要特別指出的是,上述格式中的數據長(cháng)度都是假定PKTCTRL1中的CRC_AUTOFLUSH沒(méi)有被使能,否則,所有格式中的包長(cháng)都不能超過(guò)63/64B,而且,在PKTCTRL1中的APPEND_STATUS被使能時(shí),所有格式中的數據長(cháng)度都應減2。
在接收端把包中的數據放入Rx FIFO之前,會(huì )自動(dòng)進(jìn)行前導碼、同步字、長(cháng)度、地址(可選)和CRC校驗(可選)過(guò)濾,對不滿(mǎn)足要求的包,會(huì )自動(dòng)丟棄,這大大減輕了MCU的負荷。為了提高數據傳輸的準確率,建議使能前向糾錯編碼(FEC)和數據白化功能。
2.2 MCU的編程要點(diǎn)
由于引入了交叉棒的設計,所以與其他類(lèi)型的MCU相比,該處理器的端口I/O方式配置比較復雜??砂聪铝胁襟E對端口I/O方式進(jìn)行初始化:
(1)由端口輸入方式寄存器PnMDIN配置端口引腳的輸入方式(模擬或數字)。
(2)由端口輸出方式寄存器PnMDOUT配置端口引腳的輸出方式(漏極開(kāi)路或推挽)。
(3)由端口跳過(guò)寄存器PnSKIP選擇應被交叉開(kāi)關(guān)跳過(guò)的那些引腳。
(4)由端口I/O交叉開(kāi)關(guān)寄存器XBR0、XBR1、XBR2將引腳分配給要使用的外設。
(5)使能交叉開(kāi)關(guān)(XBARE=1)。
本文介紹的無(wú)線(xiàn)手持設備,成本低、開(kāi)發(fā)技術(shù)成熟、功耗低、接口豐富、電源選擇靈活、功能適用,具有很高的性?xún)r(jià)比。實(shí)驗結果表明,在樓宇內的有效接收距離為35m左右,誤包率低于1%(115.2kb/s),完全能滿(mǎn)足中小型餐館的使用要求。如果還要再增加發(fā)射距離,可考慮在射頻收發(fā)單元增加功放。同時(shí),由于C8051F340內部集成了溫度傳感器和多達20路(48腳封裝)的10位AD輸入腳,經(jīng)過(guò)適當的改動(dòng)就可適用于其他應用場(chǎng)合,例如RFID、工業(yè)監控等。因此,該方案有較大的推廣價(jià)值和廣闊的市場(chǎng)前景。
參考文獻
[1] C8051F34X User′s Manual.Silicon Laboratories Inc,2005.
[2] CC1100 User′s Manual.Texas Instruments.http://www.ti.com.
[3] LTC3455 data sheet.www.linear.com.
[4] UC1610 data sheet.www.adultpdf.com.
[5] AT25F2048 data sheet.www.atmel.com.
[6] 童長(cháng)飛.C8051F系列單片機開(kāi)發(fā)與C語(yǔ)言編程.北京:北京航空航天大學(xué)出版社,2005.
評論