LPC1766与Si4432的无线数据传输系统设计
扫描二维码
随时随地手机看文章
摘要:本文设计了一种基于微功率无线收发芯片Si4432的远程数据传输系统。该系统采用ARM Cortex—M3核芯片LPC1766,通过SSP控制器操作射频收发芯片,详细论述了芯片基于时序的编程方法。该方案的运用可以实现无线数据的可靠收发,具有良好通信效果。
关键词:微功率;无线数据传输;远程控制
引言
随着社会的发展,空调系统广泛应用于现代办公大楼及高层建筑中,空调在改善和提高建筑物内部环境质量的同时,也带来了巨大的能源消耗。在现代楼宇建筑中,每年的夏冬两季建筑物的大部分能耗被空调所占据,因此如何通过科学的方法降低空调能耗,是一个亟待解决的问题。
积极地开发与合理地运用节能控制技术,将分散的空调进行集中统一的管理是降低空调能耗的有效途径。随着传感器技术、网络技术、计算机技术的发展,各种信息数据的检测、传送、分析处理都具备了实现的条件和手段,促进了物联网核心技术的迅猛发展,使分体空调控制的集中化、网络化成为可能。
通过研究物联网的构成及实际应用模式,探索将其引入到分体空调集中控制系统中来,构建一套基于物联网的分体空调节能控制系统。由于各个感知节点分布较广,传统单一的有线传输方式在某些应用中存在传输不稳定、人机交互性不够好、控制实时性不强、网络不够融合、布线不方便等缺点。因此,信息传输网络应建成基于物联网技术的有线和无线相结合的混杂网络架构,将数据汇聚至集中器统一管理,实现分体空调系统运行状态、能耗以及环境状况等数据准确、稳定的传输。其系统结构如图1所示。
1 LPC1766和Si4432芯片简介
LPC1766是NXP公司推出的基于Cortex—M3内核的LPC1700系列微控制器,集成10/100M Ethemet MAC、CAN总线通道、SPI接口、I2C总线接口、ADC模块等,其拥有丰富的外围接口,适用于要求高度集成和低功耗的嵌入式场合。硬件组成主要包括以太网模块、RS485模块、传感器模块、继电器模块等。
射频收发采用的是Silicon Labs公司的Si4432芯片,该芯片集成度高、体积小、功耗低,具有-118 dBm的超高灵敏度,可提供极佳的链路质量,在扩大传输范围的同时将功耗降至最低。其工作频段范围为240~930 MHz,最高输出功率可达+20 dBm,传输距离远。Si4432内部集成了天线分集、休眠唤醒定时器、64字节收发FIFO等功能。同时,Si4432芯片还具有跳频和信道信号强度评估等功能。其外围电路仅需要一个30 MHz晶振及若干个电阻、电容、电感等,电路设计简单、成本低廉。因此非常适用于对尺寸和成本敏感的大批量生产中的应用。
2 硬件设计
LPC1700系列具有两个可以兼容SPI、SSI和Microwire总线的SSP接口,可以根据应用灵活进行配置。本套系统中LPC1766与Si4432芯片通过SSP1相连,LPC1766通过SSP接口配置Si4432内部寄存器,并实现数据的读写。芯片的PORT0和PORT3口具有中断功能,当引脚电平符合设置值时,就会触发中断,在此,将P0.5引脚连接到SDN,用来控制Si4432进入非关断(SHUTDOWN)状态。
而P0.4引脚连接nIRQ,Si4432即可通过这个引脚通知LPC1766进行中断处理。Si4432的TX引脚为射频信号发送端,RXp引脚为差分信号接收端,因为采用单天线进行数据的破收,所以射频信号的发射和接收端必须要通过RF开关芯片UPG2164与天线相连,对发射和接收状态进行切换。GPIO0高电平而GPI01为低电平时为发送状态;GPIO0低电平而GPIO1为高电平时为接收状态。其电路如图2所示。
3 软件设计
3.1 无线的基本原理
Si4432芯片状态转换图如图3所示。芯片有关断、挂起、发射和接收4种状态。芯片在收/发状态间转换时,一般先经过挂起状态,这里所指的挂起状态一般是指预备模式和调谐模式。在预备模式,晶振保持启动状态,这样芯片在挂起状态切换到收/发模式时可以消除晶振的启动时间。在调谐模式下,PLL保持使能,这种模式下芯片收/发转换时间响应最快,但是电流消耗很高。
3.2 SSP接口编程时序
在将Si4432的驱动程序移植到不同的MCU平台上时,最为关键的就是要保证MCU可以读写Si4432内部寄存器的值。Si4432和MCU之间可以通过标准的3线SPI接口通信:SCLK、SDI和nSEL。而主机MCU则通过Si4432的SDO输出引脚获取数据。LPC1766具有2个可以兼容SPI总线的SSP总线接口。但是,SSP与SPI接口在硬件原理上是存在差异性的。SSP带有硬件FIFO,而SPI不具备。以下着重介绍应用LPC1766的SSP1接口和Si44 32进行交互的方法。
3.2.1 引脚初始化配置
为了方便P0.6引脚对Si4432进行片选操作,通过宏定义的方式,指定名字记号LVL_H和LVL_L的替换文本内容,分别为控制引脚的高低电平变换:
#define LVL_H(GPIO0->FIOSET|=(0x01<<6))
//将P0.6电平拉高
#define LVL_L(GPIO0->FIOCLR|=(0x01<<6))
//将P0.6电平拉低
配置引脚功能选择寄存器,将P0.5引脚指定为GPIO默认的输出低电平,将其连接到Si4432的SDN引脚,用来控制Si4432进入非关断(SHUTDOWN)状态。初始化P0.7、P0.8、P0.9为SSP1接口引脚:
指定P0.4引脚为GPIO中断,连接Si4432的nIRQ引脚,当Si4432有相应的中断条件出现时,可通知LPC1766执行中断处理程序:
3.2.2 写模式
函数vSpiWriteRegister的功能是向Si4432内部寄存器reg写入值value。片选之后,首先读取SSP1的状态寄存器,确认发送FIFO未满。在发送寄存器地址之前,需要将reg的最高位置1,此后检测SSP1控制器是否空闲。发送value值的过程相似,其程序代码如下:
3.2.3 读模式
函数bSpiReadRegister的功能是读取Si4432内部寄存器reg的值。
这里需要注意的是,因为SSP控制器具有收/发FIFO,在进行正常的读模式通信之前,需要先将接收FIFO中的“垃圾”数据读出丢弃。同理,参照图4所示的读模式时序图可知,因为SSP是全双工的,在SDI引脚发送寄存器地址的时候,SDO引脚处于低电平状态,那么接收FIFO中将首先保存0x00,此后接收的第2个字节才是Si4432指定寄存器的值。其程序代码如下:
3.3 无线数据发送和接收
3.3.1 射频芯片初始化及参数设置
Si4432有两个只读类型的寄存器:Reg00(内部地址为00h的寄存器)表示设备类型码,Reg01表示版本代码,其值在芯片出厂时已固定,后期不可更改。在此,可以在初始化时通过读取Reg00和Reg01的值,来判断Si4432是否已正常启动。
首先初始化LPC1766,启动SSP1控制器。读取Si4432的Reg03和Reg04,将自动清除中断标志,并释放nIRQ引脚。向Reg07写入0x80,即最高位置1,将复位所有的内部寄存器为默认状态,延时10 ms等待Si4432正常工作后,统计启动次数。在Reg00和Reg01的值均满足条件之后,再往相应的寄存器中填入通信参数,随后立即进入接收状态。其流程如图5所示。
3.3.2 无线发送程序
在发送数据之前,先将芯片设置为挂起(IDLE)状态。指定待发送数据包的长度,再向发送FIFO中填入相应字节数的数据。配置中断返回类型为“数据包发送完毕中断”,即在Si4432将数据成功发送出去之后,通过中断通知LPC1766。随后使能发送,Si4432将自动在数据帧中添加同步字等参数。其流程如图6所示。
3.3.3 无线接收程序
当Si4432接收到数据时,将通过中断触发的方式,通知LPC1766来处理。首先获取中断状态,判断中断的类型。如果是“数据包发送完毕中断”,则将射频切换到接收状态;如果是“有效数据包接收中断”,则读取数据包的长度值,然后在FIFO中取出指定长度值的数据。重新配置“有效数据包接收中断”,复位接收FIFO,设置模块处于接收状态。当中断处理函数结束之后,重新返回到中断前处理的程序。其流程如图7所示。
结语
本文介绍了一种基于LPC1766和Si4432的无线通信系统。对具体的硬件电路连接和软件系统的设计进行了详细的介绍,着重论述了通过SSP控制器与Si4432交互的时序编程方法。经过大量的实验证明,该系统通信可靠、稳定性强,具有良好的工程应用效果。