1.1 MCU单元
C8051F340(以下简称MCU)是一款具有全速USB功能的混合信号Flash微控制器,其内置256kB+4KB的RAM和64KB的Flash存储器;精确校准(0.25%)的12MHz内部振荡器(工作时外部不必接晶振),处理速度可达48MIPS;基于JTAG接口的非侵入式在系统调试接口等[1]。其功能和性能完全满足设计要求。
1.2 射频收发器单元
CC1100是Chipcon/TI公司力推的一款性价比“最高”的射频单片收发器芯片,它体积小(20pins,QLP 4×4mm)、接收灵敏度高(-110dBm/1.2kbps)、速率可编程(1.2kb/s~500kb/s)、工作电压低(1.8V~3.6V)、功耗低(15.4mA/433MHz/1.2kb/s,1.8μA的待机电流,待机模式下的启动时间仅为0.3ms)、在所有频段输出功率高达+10dBm、高效的SPI接口、数字RSSI(接收信号强度指示)输出、无线唤醒(WOR)功能等。它的工作频率为300MHz~1000MHz[2]。
考虑到高频干扰,该单元单独做一块PCB板,并用金属罩对其进行电磁屏蔽,通过一个7针的连接器与底板相连,如图2所示。GDO0与MCU的P0.7相接,用于指示是否已完整地接收了一个数据包,它可作为MCU的外部中断源信号。在缺省情况下,GDO0会输出一个频率为晶振频率(192Hz)的方波,这可作为在调试时判断CC1100是否正常工作的依据。SCLK(串行时钟)、SO(串行输出)、SI(串行输入)、CSn(片选)分别与MCU的P0.0、P0.1、P0.2和P0.6相接,实现MCU与CC1100的SPI接口相连。MCU对CC1100的配置、控制和数据收发都通过该SPI接口进行。在设计PCB时要让晶振与芯片引脚尽量靠近,并用地线把时钟区隔离开,晶振外壳接地并固定,元件都使用SMT(表帖式)元件,以减少过孔和体积。VCC为3.3V。C4、C5、C6和L3、L4组成一个非平衡变压器,用于在差分和单端RF(射频)信号之间进行变换,C1、C2、C3和L1、L2组成一个LC滤波器,它与非平衡变压器一起实现与50Ω的天线相适配。电阻R1用于为CC1100的偏压设置一个精准的参考电流。DS1用于指示模块上的电源是否正常。
1.3 键盘和LCD显示单元
键盘包括数字键、发射键、方向键、多功能键、电源开/关键等,它由一个8行×3列的矩阵和一个独立的键(电源开/关)组成。其中的行线与MCU的数据线(P4口)相连,列线分别与P2.0、P2.1和P2.2相连。软件在判断P2口的低3位有变化时,立即读取P4口的内容,可获得当前按下的键。电源开/关键直接与电源管理芯片的启动/关闭脚相连。
UC1610为具有128×160点阵的4个灰度级伪彩LCD控制器和驱动器,专为超低功耗的手持设备设计,与MCU的接口有并口、SPI、I2C。本系统采用2线I2C总线与MCU的SMBus相连,此时,应把CD、WR0和WR1接地,D0、D3分别与MCU的SCL、SDA相连,数据线中的其他位接地。对其控制可参考其数据手册[4]。
1.4 存储器单元
MCU的片内存储器已足够存放程序代码,但由于要存放汉字库和菜库,所以必须外接一个数据存储器。此存储器既要容量大又要封装小,因此选择了ATMEL公司的SPI Flash存储器AT25F2048。该存储器容量为2Mbit,8脚贴片封装,通过4线SPI与MCU连接,数据传输率为12Mb/s。可根据数据手册中的命令格式进行相关的读写以及擦除操作[5]。
1.5 UART和USB接口单元
程序可以通过JTAG接口下载,但像菜库、汉字库只能通过UART/USB接口下载。MCU提供2个UART口,通过外接一个UART← →RS232变换的驱动芯片MAX3232,就可与PC的串口相连。MCU内嵌一个USB2.0(设备)控制器[1],可以直接与PC的USB接口相连。同时,USB口还提供对设备进行充电的电源。
1.6 电源管理单元
LTC3455是凌特公司针对手持应用新推出的一个完整的单片电源管理解决方案,在4mm×4mm的24引脚QFN封装内集成了USB电源管理器、锂离子电池充电器和双DC-DC(5V~3.3V和5V~1.8V)转换器,它把以前需要5个或更多芯片实现的几个功能结合在一起。对电源进行无缝选择(3选1),其过程完全是按优先级自动进行的:5.0V AC适配器→USB电源→电池。在使用适配器或USB电源时,电池充电器被使能,而且器件内部的电源完全由选择的外部电源供电[3]。电源管理单元电路图如图3所示。图中的CON1与PC的USB口相接,CON2与电源适配器相接,USBHP用于选择USB电源的上限电流为500mA。P30用于使能SW2和热插拔功能,P31用于指示电池的电量,P32用于指示ON脚的状态,P33用于使能本芯片,SW-VCC用于开启/关闭输出电源。
2 软件设计
软件的开发环境为keil μVISION3,使用keil C51语言。系统的无线通信部分采用主从结构,从站由手持设备组成,主站由设在厨房的基站组成,工作方式采用主站轮询、从站监听方式。为了避免多个从站争用信道而发生冲突,规定只有主站向某个从站点名时,从站才向主站发送数据。系统软件主要流程如图4所示。
2.1 CC1100的编程要点
(1)寄存器访问
在不同速率下CC1100有不同的配置。为了获得最佳性能,有些配置必须经过复杂的计算才能获得。Chipcon公司提供了SmartRF Studio软件对有关的寄存器进行最佳配置。针对某一个速率,该软件会自动提供一组最佳的寄存器配置参数,程序员只需在初始化时把这些配置写入相应的寄存器即可。配置只能在CC1100处于IDLE状态下时才能进行。
除了配置操作外,还有读状态、发命令和读/写Rx/Tx FIFO操作。这些操作有相似的通信格式:head字节+data(读和发命令操作除外)字节。Head由R/W(bit7)、Burst(bit6)和Addr(bit5~0)三部分组成。R/W标示当前操作是读1还是写0;Burst标示当前操作是访问单个0还是多个1寄存器。但在读状态寄存器时是一个例外,虽然每次只能读一个状态寄存器,但该位必须为1,原因是状态寄存器的地址与命令寄存器的地址是重叠的,因此对burst位进行了重定义;bit0~5(Addr)为寄存器的地址。
(2)状态机
CC1100内部有一个用于管理各个状态之间相互切换的状态机。当前状态可从状态寄存器MARCSTATE获得。状态转移图如图5所示。命令、内部事件和配置信息决定状态切换。寄存器MCSM1中的TXOFF_MODE、RXOFF_MODE决定在完成发送操作、接收一个有效的包后将进入哪一个状态。需要注意的是,具有省电功效的无线唤醒功能WOR能使CC1100在SLEEP状态下周期性地自动转到IDLE状态,然后再自动转到Rx状态。但如果在此状态下没有数据包可接收,将又回到SLEEP状态;否则,在接收完数据包之后,下一个状态将由RXOFF_MODE决定,但不会进入SLEEP状态,必须在进入IDLE状态时由MCU发送SWOR命令才能再次进入。在SLEEP状态下,晶振是否继续工作是由寄存器MCSM0中的XOSC_FORCE_ON决定的(0:继续工作,1:停止工作)。在MCU访问CC1100(CSn=0)时,无论XOSC_FORCE_ON为何值,晶振将总是工作。
(3)数据包的处理机制
CC1100的特点之一是在收发数据时对包处理的全面支持,包在发送时具有如图6所示的格式。
前导码提供包的位同步,它是由0和1交替排列组成的序列。当进入Tx状态时,调制器将根据MDMCFG2中的SYNC_MODE决定是否启动发送前导码,若允许发送,则其长度由MDMCFG1中的NUM_PREAMBLE决定。在发送完前导码后,如果TX FIFO中有数据,则立即发送同步字;否则,调制器将重复发送前导码直到TX FIFO中有数据,或者,在强制转换到其他状态时,停止发送前导码。同步字提供包的byte同步。寄存器SYNC0和SYNC1中存放同步字的高低字节。SYNC_MODE还决定是否重复发送一次同步字。
CC1100支持4种格式的包,其中数据(净荷)长度分别是:定长(小于255B)、变长(小于255B)、无限长(数据长度无效,手动终止包的发送)和有限长(数据长度有效,可以是任意值)。有限长格式是无限长和定长的综合,本系统采用该格式。需要特别指出的是,上述格式中的数据长度都是假定PKTCTRL1中的CRC_AUTOFLUSH没有被使能,否则,所有格式中的包长都不能超过63/64B,而且,在PKTCTRL1中的APPEND_STATUS被使能时,所有格式中的数据长度都应减2。
在接收端把包中的数据放入Rx FIFO之前,会自动进行前导码、同步字、长度、地址(可选)和CRC校验(可选)过滤,对不满足要求的包,会自动丢弃,这大大减轻了MCU的负荷。为了提高数据传输的准确率,建议使能前向纠错编码(FEC)和数据白化功能。
2.2 MCU的编程要点
由于引入了交叉棒的设计,所以与其他类型的MCU相比,该处理器的端口I/O方式配置比较复杂。可按下列步骤对端口I/O方式进行初始化:
(1)由端口输入方式寄存器PnMDIN配置端口引脚的输入方式(模拟或数字)。
(2)由端口输出方式寄存器PnMDOUT配置端口引脚的输出方式(漏极开路或推挽)。
(3)由端口跳过寄存器PnSKIP选择应被交叉开关跳过的那些引脚。
(4)由端口I/O交叉开关寄存器XBR0、XBR1、XBR2将引脚分配给要使用的外设。
(5)使能交叉开关(XBARE=1)。
本文介绍的无线手持设备,成本低、开发技术成熟、功耗低、接口丰富、电源选择灵活、功能适用,具有很高的性价比。实验结果表明,在楼宇内的有效接收距离为35m左右,误包率低于1%(115.2kb/s),完全能满足中小型餐馆的使用要求。如果还要再增加发射距离,可考虑在射频收发单元增加功放。同时,由于C8051F340内部集成了温度传感器和多达20路(48脚封装)的10位AD输入脚,经过适当的改动就可适用于其他应用场合,例如RFID、工业监控等。因此,该方案有较大的推广价值和广阔的市场前景。
参考文献
[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] 童长飞.C8051F系列单片机开发与C语言编程.北京:北京航空航天大学出版社,2005.