基于CC1100的无线手持终端的设计
程序可以通过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]。图中的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_STA
