文献标识码:A
文章编号: 0258-7998(2012)06-0020-04
目前无线通信基本上都是利用单片机或者ARM片内的无线通信 IP硬核实现,如TI公司的片内集成2.4 GHz的ZigBee无线收发模块的CC2430单片机核、LINKUP System公司的带蓝牙无线收发器的L7205 ARM720T核。虽然这种无线通信 IP硬核的性能比较高,但是由于其参数往往都已经固化在片内,灵活性差,而且与其他片内外设不可分离地组合在一起,可移植性差,无线硬核的通信协议也比较复杂,使用不方便,致使整个系统的设计具有很大局限性。
RF905是一款独立于微控制器的无线收发器芯片,工作在433 MHz频段。它将频率调制解调器、功率放大器、晶体振荡器等集成在一块芯片内并且可以通过SPI接口进行编程,因此将其集成到各种嵌入式系统中非常方便。目前采用RF905芯片进行无线通信的系统都是采用查询方式和中断方式来实现[1-3]。由于这两种传输方式在数据的传输过程中会经常打断CPU的运行,尤其是当进行大块数据的传输时会占用CPU很多时间,从而大大降低了整个系统的性能。
直接存储访问(DMA)是一种不经过CPU而直接从内存存取数据的数据交换模式。由于整个数据的传输过程由DMA控制器控制,CPU可以不被打扰地处理其他的事情,提高了CPU的效率。因此本文设计的RF905无线通信IP软核采用DMA方式,它可以在传输数据时将NIOSIICPU从繁重的工作中解脱出来以处理其他事情,因而大大降低了CPU的占用时间,提高了NIOSII系统的性能。由于其具有高性能、参数可配置、可移植、可裁剪等特点,并且具有很高的灵活性、实用性,更能满足设计的要求。
1 无线通信 IP软核的整体构架
本文采用DMA传输方式设计的RF905无线通信 IP软核的整体构架如图1所示。
该软核主要由以下4个子模块组成:RF905无线发送接收控制器、带Avalon-MM Slave[4]接口的寄存器文件(简称寄存器文件)、带Avalon-MM Master[5]接口的Master Read 类型DMA控制器(简称DMA读控制器)和带Avalon-MM Master接口的Master Write 类型DMA控制器(简称DMA写控制器)。
当NIOSII处理器[6-9]需要进行无线数据发送时,首先需要通过带Avalon-MM Slave接口的寄存器文件对RF905无线发送接收控制器和Master Read 类型DMA控制器进行配置,以设定要发送到达的地址、将要发送的数据的字节数以及该数据存放在内存中的基地址;然后将要发送的数据写到指定位置内存中并启动Master Read 类型DMA控制器,从而将存储器中的数据通过RF905无线发送接收控制器逐一发送出去。当所有要发送的数据发送完毕时会向NIOSII处理器产生一个中断,告知处理器串口数据发送完毕,从而可以启动下一次数据发送。由于整个数据发送的过程是由Master Read 类型DMA控制器管理的, NIOSII处理器可以专心处理其他的事情而不被打扰,因而NIOSII CPU的利用率大大提高。
当NIOSII处理器需要进行无线数据接收时,首先需要通过带Avalon-MM Slave接口的寄存器文件对RF905无线发送接收控制器和Master Write 类型DMA控制器进行配置,以设定本机的接收地址、将要接收的数据的字节数以及该数据存放在内存中的基地址;然后启动Master Write 类型DMA控制器,从而将通过RF905无线发送接收控制器接收到的数据逐个地存储到存储器的指定位置。当所有要接收的数据接收完毕时会向NIOSII处理器产生一个中断,告知处理器串口数据接收完毕,此时NIOSII处理器可以从存储器中读取接收到的数据进行处理并启动下一次数据接收。由于整个数据接收的过程是由Master Write 类型DMA控制器管理的,NIOSII处理器可以专心处理其他的事情而不被打扰,因而NIOSII CPU的利用率大大提高。
2 模块的设计与实现
2.1 RF905无线发送接收控制器
2.1.1 RF905无线发送控制器
当有数据要发送时,首先通过SPI接口把接收机的地址和要发送的数据送传给RF905,而后置高TRX_CE和TX_EN,使RF905进入数据发送模式。在数据发送模式下,RF905首先开启射频寄存器,然后进行数据打包(加字头和CRC校验码)并将其发送出去。当数据发送完成,数据准备好引脚被置高,此时应将TRX_CE置低以进入空闲状态。至此一次完整的RF905数据发送过程完成。
本文利用有限状态机的方法采用Verilog硬件描述语言设计了一个RF905发送控制器,从而完成对RF905无线数据发送的时序控制。其状态转移图如图2所示。
从图2可以看出,状态机一开始处于idle状态。当启动Master Read 类型DMA控制器以进行一次数据发送时,状态机进入load_address状态。load_address、send_address这两个状态主要用于通过三线的SPI接口设置要发送到的4 B地址,而后进入load_data状态。Load_data状态主要用于获取由Master Read 类型DMA控制器从内存中读取的32 B数据,并将其送入发送移位寄存器,而后状态机进入send_data状态。send_data、finish这两个状态主要用于将发送移位寄存器中的数据通过三线SPI接口的控制下写入到RF905片内的FIFO缓存中,而后状态机将进入wait状态。在该状态首先置高TRX_CE和TX_EN以启动一次数据发送,然后通过DR引脚是否为高电平来判断数据发送是否完成,如果完成则将TRX_CE置低,并进入block_finish状态。在该状态状态机对已经发送的数据字节数进行判断,如果小于欲发送的字节数,则说明所有的数据还没有发送完毕,计数加1并进入load_address状态,以读取并发送下一个数据字节,直到所有的数据字节都发送完毕,状态机将进入master_done状态,在该状态状态机检测本次DMA传输是否完毕,如果完毕则产生中断信号并进入idle状态。至此一次完整的DMA传输方式的RF905无线数据发送完成。
2.1.2 RF905无线接收控制器
当有数据需要接收时,首先通过SPI接口把本机的地址传给RF905,而后置高TRX_CE并置低TX_EN,使RF905进入数据接收模式。在数据接收模式下,RF905会自动进行载波检测和地址匹配,当一个正确的数据包接收完毕,RF905自动移去字头、地址和CRC校验位,然后把DR引脚置高。此时应将TRX_CE置低以进入空闲状态并通过SPI接口读取接收到的数据。至此一次完整的RF905数据接收过程完成。
本文利用有限状态机设计了一个RF905接收控制器,从而完成了对RF905无线数据接收的时序控制。其状态转移图如图3所示。
从图3可以看出,状态机一开始处于idle状态。当启动Master Write 类型DMA控制器以进行一次数据接收时,状态机进入start状态。start状态主要用于将TRX_CE置为高电平并将TX_EN置为低电平以启动一次数据接收,而后进入ready状态。在该状态通过DR引脚是否为高电平来判断数据接收是否完成,如果完成则将TRX_CE置低,并进入recv(receive data)状态。recv与finish这两个状态主要用于从RF905片内的FIFO缓存中接收字节数据并存放到接收移位寄存器中。当32 B数据接收完毕时,将该字节数据交给Master Write 类型DMA控制器以完成字节数据到内存的写操作,而后状态机经过load和buffer_ready两个状态进入block_finish状态。在该状态,状态机对已经接收到的数据字节数进行判断,如果小于欲接收的字节数则说明所有的数据还没有接收完毕,状态机将返回ready状态,直到所有的数据字节都接收完毕,状态机将进入master_done状态。Master_done状态检测本次DMA传输是否完毕,如果完毕则产生中断信号并经过get_done状态进入idle状态。至此一次完整的DMA传输方式的RF905无线数据接收完成。
2.2 寄存器文件
本文设计的寄存器文件是具有Avalon-MM slave 接口的外设,它内部共有4个32 bit寄存器,具体结构和功能如表1所示。NIOSII处理器可以采用基地址+地址偏移量的方式来访问这4个寄存器,从而实现对DMA方式RF905无线通信 IP软核的配置以及对无线数据接收与发送的控制。
2.3 DMA读控制器
本文设计的DMA读控制器是具有Avalon-MM Master 主端口的外设。它通过Avalon-MM Master 主端口与AVALON交换结构进行基本的读传输,以完成从指定起始地址的存储器中读取指定长度的数据并传送给RF905无线发送控制器发送出去。其仿真波形图如图4所示。
从图4可以看出,主端口读传输在clk第一个上升沿开始。在第一个时钟周期内主端口置address和read_n信号有效。如果waitrequest信号无效,则有效的读数据会在第二个时钟周期出现在readdata信号线上,主端口只需在第二个时钟周期的上升沿捕获readdata即可完成一次基本读传输。
2.4 DMA写控制器
本文设计的DMA写控制器是具有Avalon-MM Master 主端口的外设。它通过Avalon-MM Master主端口与AVALON交换结构进行基本的写传输,以完成将RF905无线接收控制器接收到的指定长度的数据连续地存储到指定起始地址的存储器中去。其仿真波形图如图5所示。
从图5可以看出,主端口写传输在clk第一个上升沿开始。在第一个时钟周期内主端口置address、writedata和write_n信号有效。如果waitrequest信号无效,则有效的写数据writedata会在第二个时钟周期上升沿被AVALON交换结构捕获,从而完成一次基本写传输。
3 硬件测试
本设计采用Verilog语言建立了一个顶层文件dma_wireless_ip.v,通过对4个子模块进行实例化与互连,最终完成了基于DMA方式的RF905无线通信IP软核的设计。选用Altera 公司的FPGA芯片EP2C35F672C8 作为硬件验证的平台。经过QuartusII软件的编译、适配与综合以及对编译报告进行分析可知,整个IP核使用了763个LE(逻辑门),占LE总量的2.3%;475个寄存器、1 024 B的存储器(8 192 Memory bits),占片内总存储器的1.7%;主频最高达到172.84 MHz,在资源和速度方面都能满足较高的要求。
由于该IP软核基于AVALON总线,所以需要构建一个NIOSII系统对其进行测试。本文采用两块FPGA开发板并分别配一块RF905无线收发器扩展板进行无线通信的硬件验证。软件采用C++语言为两块FPGA板分别编写了基于NIOSII处理器的测试程序,一收一发,以测试在不同传输距离下的传输速度和误码率,测试结果如表2所示。从表2可以看出,距离在500 m以内时,传输速率最快,可达到50 kb/s,而且误码率低于0.1%,能很好地满足短距离无线通信的需求。
此外,还测试了传输不同大小的数据块时基于DMA方式的RF905无线通信 IP软核占用NIOSII CPU的时间,并且与查询方式和中断方式进行了比较,比较结果如表3所示。
从表3可以看出,DMA方式的无线通信IP软核在数据传输时所消耗的CPU时间比查询方式及中断方式的都要短,而且随着传输数据块的不断增大,DMA方式占用CPU时间短的优势就越明显,从而大大提高了NIOSII处理器的性能。
参考文献
[1] 杨剑.基于nRF905的无线射频数据采集系统的开发与实现[D].中国优秀硕士学位论文全文数据库,2007.
[2] 杨均友.基于NIOSII处理器的无线电力参数监测系统的设计与实现[D].北京:首都师范大学,2010.
[3] 李剑.基于Linux的嵌入式点菜系统终端[D].中国优秀硕士学位论文全文数据库,2006.
[4] Altera Corp.嵌入式文档8.1版[EB/OL].[2000-03-20].http://www.altera.com.cn/literature/lit-nio2.jsp.
[5] Altera Corp.嵌入式外设IP用户指南[EB/OL].[2011-02-01].http://www.altera.com.cn/literature/ug/ug_embedded_ip.pdf.
[6] Altera Corp.Nios II软件开发人员手册[EB/OL].[2002-06-11].http://www.altera.com.cn/literature/hb/nios2/n2sw_nii52002.pdf.
[7] 尹刚.短程无线通信在ITS不停车收费系统ETC中的应用[D].长春:吉林大学,2005.
[8] 周立功.SOPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2006.
[9] 侯长宏.基于NiosII嵌入式软核的SOPC技术及应用[D].北京:首都师范大学,2008.