为了在智能远传抄表系统中实现基于无线通讯芯片CC1101的无线跳传网络通信,根据CC1101的SPI接口特性,采用流接口技术,利用ARM920T处理器S3C2410在WinCE 5.0下编写SPI驱动程序控制CC1101,实现了无线跳传网络通信,并在智能远传抄表系统中测试了基于CC1101的无线跳传网络通信。结果表明,该驱动能很好地运行在WinCE 5.0平台上,利用CC1101有效的实现了无线跳传网络通信。
0 引言
随着经济技术的不断发展,以及自动化程度的提高,越来越多的场合需要用到远程控制。在承接的国家大学生创新性实验计划项目——基于无线跳传网络的智能抄表系统中,中继(SINK)模块,即采用S3C2410在WinCE下驱动射频芯片CC1101作手持终端控制器。其中,在WinCE下驱动CC1101成为该项目的一个难点。CC1101使用SPI通信,而SPI驱动属于WinCE串口驱动的一种,是流驱动。本文将介绍WinCE 5.0下,C11 01的SPI驱动程序设计。
1 CC1101的SPI接口特性
CC1101基于TI公司的0.18 μm CMOS晶体SmartRF04技术,是一种低成本、真正单片的UHF收发器,为低功耗无线应用而设计。电路主要设定在315 MHz,433 MHz,868 MHz和915 MHz的ISM(工业,科学和医学)和SRD(短距离设备)频率波段,CC1101的主要操作参数和64位发送/接收FIFO可通过SPI接口控制,具有14个命令寄存器,47个普通配置寄存器和12个状态寄存器,通过4线SPI兼容接口(SI,SO,SCLK和CSn)配置。其中,SPI接口是一种同步串行通信接口,CSn是芯片选择管脚,当该管脚为低电平时,SPI接口可以通信;SI和SO为数字传输管脚,SI用于数据输入,SO用于数据输出;SCLK为同步时钟,在时钟的上升沿数据被写入或读出。CC1101中SPI接口的读/写操作方式如图1所示。
CC1101的配置、命令发布和发射接收缓存的数据读取都通过SPI完成,SPI的操作都由主机控制,对CC1101来说,主机的控制操作即是发送的headerbyte。下面介绍两种主要状态下的主机操作。
(1)读寄存器、读状态
①写入头字节(R,0/1,address);
②dummy write为从设备提供一个CLK,从SPI接收数据即读出address的数据。如果是突发访问n个寄存器,则重复n次。
(2)写寄存器、写命令
①写入头字节(W,0/1,address);
②写入数据字节(data)。如果是突发访问n个寄存器,则重复n次。
由于ARM的SPI硬件操作屏蔽了对CLK的直接控制,读的时候必须要dummy write为从设备提供一个CLK,可以写0xFF。在每次写前要确保SPI空闲,并且没有发生溢出,写后要确保发送完毕,再进行其他SPI操作。
2 WinCE下SPI驱动程序开发
Win CE下的SPI驱动属于流驱动。流驱动是能够导出流接口函数的驱动程序。在设计此类驱动时,把设备驱动程序当成一种特殊的文件,接口函数与一般的文件APl函数一样,比如CreatFile(),WriteFile(),ReadFile()和CloseHandle()等,因此在应用程序设计时可以通过使用文件系统API来调用驱动程序,以达到访问设备的目的。SPI驱动是一个动态链接库(DLL),可以被加载到内核空间,成为内核模式驱动。
SPI驱动程序是操作系统与硬件之间的接口,是对硬件设备的抽象。操作系统可以通过驱动程序来对设备进行操作和管理。当应用程序需要读取底层的物理器件输出时,就必须通过操作系统内核来加载特定的设备驱动程序,通过驱动程序来与底层的硬件进行通信,然后将读取信息传入应用程序中。当为WinCE 5.0添加外围设备时,必须以流接口驱动方式提供给操作系统内核,再由操作系统对其进行加载,加载正确后,才可以在应用程序中通过标准的I/O函数调用底层的驱动。 |