吕梓豪 刘钟 崔旭晶
摘 要:针对智能家居的主控系统和分控系统,实现其有线和无线通信。有线通信应用I2C、SPI总线技术,使用Verilog HDL语言编程,功能时序仿真,最终下载到FPGA芯片上,完成硬件实物可行性测试;无线通信选用CC2530通信芯片,基于ZigBee协议,C语言编程,并下载到硬件实物进行验证,实现数据的发送和接收功能。实验结果表明,该系统运行快速稳定,经济高效,能够较好地应对普通户型智能家居的通信需求。
关键词:智能家居;通信;FPGA;I2C;SPI;CC2530
中图分类号:TN913,TN92文献标识码:A文章编号:2095-1302(2019)03-00-02
0 引 言
智能家居是以家庭住宅为平台,利用自动化技术、视觉识别技术、综合布局技术、音视频技术等最新物联网技术综合应用于家居生活。目前,随着互联网技术和智能产业的发展,家居产业正向着智能化和方便化方向发展,智能家居作为新兴行业与传统行业的结合,具有广阔的市场前景和创新空间[1]。家居智能化的大趋势是使用手机APP远程监控家居,而监控的重点是实现家居之间的互联通信。
基于目前智能家居通信功率、通信距离及普通住宅房型的要求,短距离通信可使用有线通信技术;对于空间距离较远,考虑到不易布线及信号衰减等问题,可使用通信无线技术,这样能够应对大多数普通户型家庭的需求,从而实现智能家居之间不同距离、不同通信要求的各终端设备之间的数据通信[2-3]。
本文智能家居的主控系统为FPGA可编程芯片,分控系统由各FPGA芯片及单片机构成,因此需要实现主控系统FPGA芯片与分控系统各FPGA芯片及单片机之间的通信,包括有线和无线通信。有线通信使用Verilog HDL语言、I2C和SPI总线技术实现[4-5],无线通信使用C语言和CC2530芯片及ZigBee通信协议实现[6]。
1 通信功能实现原理
1.1 I2C总线
I2C协议使用双线输入输出,其中一根为时钟传输线,另一根为数据传输线。晶振输入初始50 MHz时钟信号,并在状态机模块中加入对于分频寄存器的判断,以确定分频后时钟信号所在位置。实现发送和读取功能的主要模块为状态跳转模块和执行模块,状态跳转模块即在现在状态下,达到满足跳转到下一状态的条件后,自动跳转到下一状态,执行模块是在当前状态下,通过工作时钟的触发执行相应功能,通过对状态机模块编程可完成从最初单字节发送、接收等更多功能。
1.2 SPI总线
SPI使用标准信号输入输出口。由标准晶振产生50 MHz时钟,经过分频模块分频后得到相应的通信时钟;具有四种工作模式,而实现这四种工作模式主要依靠不同状态下的时钟系统,根据SPI協议的相关规定,本设计采用多路时钟的工作方式,从最初50 MHz晶振时钟输入到FPGA中,经过分频变为20 kHz工作时钟,经由一个初始时钟触发,记录当前时钟下分频时钟电平与上一个时钟下分频时钟电平,再将其进行相应逻辑运算,即可获得分频后时钟上升沿和下降沿信号,并输出到上升沿下降沿脉冲模块,再根据外部CPOL与CPHA决定,通过二选一模块,最终成为发送模块与接受模块的触发条件。
1.3 CC2530芯片
CC2530以众多而全面封装函数和简化易懂规范,使无线通信开发者从繁杂开发背景中解放出来。本设计使用片上自带的串口UART,从上位机接受字符串,并载入无线发送缓存中,同时分配好数据发送的去向,分配相应的PANID,以方便数据接收端与发送端之间数据校验。串口接收到数据后,经过无线通信将其带着的地址信息发出,而无线通信主要通过ZigBee协议实现。ZigBee 使用的路由协议是基于AODV(Ad-Hoc 按需距离矢量)路由协议的Ad-Hoc网络。
2 TI 2530 8051核心主函数
下面的函数是串口接收发送函数,首先要求接收的字符串长度要小于CC2530所能接收的长度,此后才开始进行接收,接收码率固定为115 200 b/s(其规定于初始化中),剩下的功能为异常判断,若出现异常则返回数据长度为0,接收失败,返回未接收状态,等待下一次接收[6]。
void rxCB(uint8 port,uint8 event)
{
if ((event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT)) &&
#if SERIAL_APP_LOOPBACK
(SerialApp_TxLen < SERIAL_APP_TX_MAX))
#else
!SerialApp_TxLen)
#endif
{
SerialApp_TxLen = HalUARTRead(0, RxBuf, SERIAL_APP_TX_MAX);
if (SerialApp_TxLen)
{
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_PERIODIC_CLUSTERID,
SerialApp_TxLen,
RxBuf,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS {}
else
{// Error occurred in request to send. }
SerialApp_TxLen=0;
}
}}
3 仿真及实物下载验证
对于有线通信部分,首先对I2C和SPI做功能时序仿真,以验证设计的正确性和可行性,然后将实物下板验证,实现其具体功能。仿真部分使用Verilog HDL语言编程和模块设计,ModelSim软件做功能时序仿真。I2C主要仿真结果如图3和图4所示。在I2C发送寄存器地址之后进行数据发送,从状态跳变到0100中可以看出,sda_r在每个iic_scl时钟的上升沿,随着slv_reg2依bcnt的位数而确定的数据位改变,即除了第3位为高电平,其余均为低电平,外部读取结果为00110011,符合slv_reg2中的数据,发送数据验证通过[7-8]。
从图4可以看出,每个时钟升沿之后,当数据保持稳定的高电平中心时,iic_rddb在由bcnt确定的相关位被写入iic_sda_in的数据位,所有位的时序均符合要求,接收数据验证通过。
SPI主要仿真结果如图5所示。其仿真过程实现了两个完整时序收发功能,其中包含了整体收发功能,包括起始、发送、读取采样、终止及两个工作时序中的外部信号触发的采样时序改变和采样触发时钟的改变[9]。
实物下载验证部分,以Quartus Prime软件作为开发平台,在完成模块程序调试和仿真之后,将生成的目标文件下载到Altera公司的FPGA芯片中,实现I2C和SPI协议的数据发送与接收功能,最终完成硬件实物的运行与验证,如图6所示,左侧为I2C,右侧为SPI[10]。
对于无线通信部分,选用TI公司CC2530芯片,基于IEEE 802.15.4标准的ZigBee协议,使用IAR Work Bench软件进行开发与调试,最终下载到硬件实物板中进行验证,实现无线通信功能如图7所示。
4 结 语
本设计中,有线和无线通信均通过软件编程、仿真、测试和实物下载验证,实现了设计的基本功能,完成了数据的接收和发送,实现了智能家居主控系统与分控系统之间的通信联系。设计中高效利用FPGA设计方法的多变性和可编程等优势,实现的I2C和SPI协议,具有高效、小型和专用的优点。设计中CC2530通信模块,可单独作为模块直接使用,亦可移植到大型通信系统中。
参 考 文 献
[1]杨晓菊.智能家居应用现状及其发展分析[J].智能建筑与智慧城市,2018(8):71-72.
[2]李红海,张纪芬.浅析有线通信技术的现状及发展趋势[J].东方企业文化,2015(21):371.
[3]郑达峰.短距离无线通信技术的优势及运用[J].通信电源技术,2014(6):70-71.
[4]张军才,茹伟,赵腊才,等.I2C总线测试系统的设计与实现[J].仪表技术与传感器,2016(12):57-58.
[5]朱道山.一种可复用的SPI接口设计与实现[J].通信技术,2017(2):389-392.
[6]马靜.基于ZigBee无线网络智能家居系统的设计与实现[J].科技创新与应,2017(4):34-35.
[7]蔡亚芹.语音识别技术在智能家居系统中的应用[J].河南科技,2014(14):68.
[8]刘星.基于蓝牙和单片机的智能家居控制系统设计[J].电子技术,2013(11):46-48.
[9]吕莉,罗杰,智能家居及其发展趋势[J].计算机与现代化,2007(11):18-20.
[10]李元建.蓝牙与智能家居[J].电子技术,2007(2):5-7.