关键词:SPI,FPGA,数据采集,Verilog HDL
1 引言
随着数字技术发展与应用,越来越多的芯片被用于数据采集与数字交换。在这些芯片中,SPI (Serial Peripheral Interface)作为电路接口应用非常普遍,因而也成为了很多单片机的标准配置。然而很多单片机的SPI接口硬件资源非常有限,在需要同时使用较大数目SPI接口的数据采集系统中,只能对SPI接口扩展并分时复用,这样势必造成数据采集速度下降。FPGA具有高度并行的特点[1],笔者根据实际应用,设计了基于FPGA的多路SPI接口并行系统,应用于需多个SPI接口同步运行的数据采集系统中。
2 SPI总线接口
SPI(串行外围设备接口)是Motorola公司推出的一种同步串行接口,具有传送速率高、连接线少等特点,常用于MCU与外设数据交换[2]。SPI只需要4条线就能完成主、从与外围器件全双工同步通信,这4条线分别为:串行时钟线(SCK)、主机输出从机输入线(MOSI)、主机输入从机输出线(MISO)、从机选择线(CS)。
SPI系统分为主机和从机两类,其中主机提供SPI时钟信 和片选信 ,作为从机的输入;从机是接收SPI信 的任何集成电路,包括简单的TTL移位寄存器或其他MCU等。时钟极性(CPOL)和时钟相位(CPHA)的配合完成一次数据传输。其中,CPOL表示时钟在空闲状态的电平,CPHA决定数据在时钟的上升沿传送还是下降沿传送。CPOL与CPHA的不同,可以使SPI总线工作在4种模式下。
(1) CPOL=0,CPHA=0:SCK的空闲电平为低电平,数据在SCK的第一个跳变沿被采集;
(2) CPOL=0,CPHA=1:SCK的空闲电平为低电平,数据在SCK的第二个跳变沿被采集;
(3) CPOL=1,CPHA=0:SCK的空闲电平为高电平,数据在SCK的第一个跳变沿被采集;
(4) CPOL=1,CPHA=1:SCK的空闲电平为高电平,数据在SCK的第二个跳变沿被采集。
当SPI工作时,发送和接收操作都受控于SPI主机的时钟信 (SCK)和片选信 (CS),从而保证通信同步。通常情况下,使用一个主机控制多个从机,典型的系统连接如图1。
图1 SPI总线系统连接方式
3 主机端SPI接口模块设计
在笔者设计的数据采集系统中,使用了芯片级传感器——磁性旋转编码器AS5048A[3],用来测量关节点位置,该芯片具备标准SPI输出。在本数据采集系统中需要同时用到10个SPI接口,设计采用FPGA为主机模式,AS5048A为从机模式。
本数据采集系统,在控制命令作用下通过10个SPI接口完成对10组AS5048A测量值读取并保存。因此,为实现数据采集目标需要使用硬件描述语言建立SPI总线接口模块,并设计主状态机控制系统运行状态。整个系统在FPGA上实现。
通过对SPI接口建立电路模型,最终生成一个如图2所示的模块。模块的各引脚定义如下:clk为外部输入时钟信 ,由FPGA提供;rst_n为复位信 ,当其为低电平时,系统恢复初始状态;spi_cmd为SPI接口数据发送控制信 ;tx_data为待发送数据;spi_clk、spi_cs、spi_mosi和spi_miso分别为串行时钟信 、片选信 、主机输出从机输入和主机输入从机输出信 ;rx_data为spi_miso信 经串并转换得到接收到的数据;tx_done与rx_done分别为数据发送完成与数据接收完成指示信 。
图2 SPI接口封装图
FPGA主状态机控制整个数据采集的运行状态。当主状态机发出读取控制信 ,同时将AS5048A读取指令存入寄存器tx_data。FPGA作为主机为从机提供时钟信 和片选信 。当从机AS5048A被选中,并有时钟信 到来时,开始接收读取指令。在下一次接收读取指令的同时,AS5048A在串行时钟信 的下降沿把测量数据按位依次存入SPI接口模块缓冲器,直到时钟停止,等待下一次读取命令到来。接收完成以后将串并转换后的测量值存入寄存器rx_data。
4 SPI接口与并行数据采集的Verilog实现与验证
Verilog HDL是一种用于数字电子系统设计的硬件描述语言,以文本的形式描述数字系统硬件结构和行为。在FPGA开发中,设计者常用它来进行逻辑设计,完成数字逻辑系统的仿真验证、时序分析和逻辑综合。
图3 FPGA主机模式下SPI接口电路时序
从图3可以看出SPI时钟信 spi_clk空闲电平为低电平,接收数据在其下降沿,上升沿发送数据,与设计一致。读取AS5048A测量值的控制信 spi_cmd上升沿到来后SPI接口开始发送读取指令,片选信 使能。在SPI时钟第一个周期上升沿,主机通过spi_mosi发送最高位至从机,移位寄存器tx_data左移一位;在第一个周期下降沿,主机通过spi_miso接收从机发送的数据最高位,移位寄存器rx_data左移一位。依次类推,值至96位二进制数发送/接收完成,片选信 恢复至高电平,SPI接口电路回到空闲状态。综合以上分析,SPI接口电路时序功能正确。
图4 主状态机控制10个SPI接口并行数据采集
从图4可以看出10个SPI接口在主状态机的控制信 下并行运行,完成AS5048A的测量值读取,时序功能正确。
通过Altera公司的FPGA开发软件Quartus II将程序综合成电路 表,下载到FPGA芯片为Cyclone EP1C12Q240C8的开发板上进行验证,10路SPI接口可并行完成数据采集,通信功能与预期目标一致。
4 结语
参考文献
[1]张小新,魏厚龙. FPGA技术及其开发方式概述[J]. 山西电子技术,2008,(05):86-87+90.
[2]杨美刚, 李小文. SPI接口及其在数据交换中的应用[J]. 通信技术, 2007, 40(11):385-387.
[3]AS5048A/AS5048B Data Sheet, AMS, 2014(6)
?
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!