摘 要:本文简述了SPI协议,建立了基于FPGA的SPI接口电路模型,并说明其输入输出端口和数据发送和接收过程,仿真验证了在主状态机控制下10个SPI接口并行采集数据,并在FPGA开发板上进行验证。

关键词: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开发中,设计者常用它来进行逻辑设计,完成数字逻辑系统的仿真验证、时序分析和逻辑综合。

本文中的设计包括SPI接口电路建模和主状态机,程序均采用Verilog HDL编写,在Mentor公司的HDL语言仿真软件ModelSim中成功编译,运行可以得到仿真波形进行时序分析。SPI接口电路仿真时序如图3所示,10个SPI接口在主状态机控制下并行数据采集时序如图4所示。

图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 结语

本文简单介绍了SPI接口,包括SPI协议与SPI输入输出端口,建立了基于Verilog的SPI接口电路模型并仿真,并说明了其发送和接收数据的过程。而且,10个SPI接口在主状态机的控制信号下并行运行,稳定高效,解决了SPI接口资源有限时造成的通信速率下降的问题。随着技术的进步,FPGA速度越来越快,资源越来越丰富,基于FPGA的高速数据采集系统应用会更加广泛。

参考文献

[1]张小新,魏厚龙. FPGA技术及其开发方式概述[J]. 山西电子技术,2008,(05):86-87+90.

[2]杨美刚, 李小文. SPI接口及其在数据交换中的应用[J]. 通信技术, 2007, 40(11):385-387.

[3]AS5048A/AS5048B Data Sheet, AMS, 2014(6)

基于labview的温湿度数据采集_【零偏原创】基于FPGA的多路SPI接口并行数据采集系统...相关推荐

  1. 基于labview的温湿度数据采集_基于Raspberry Pi(树莓派)的MCC数据采集卡应用

    简介 树莓派是一种单板式计算机系统,可轻松连接鼠标.键盘.显示器等外设,并运行基于Linux®的操作系统,低于300人民币的成本,使树莓派尤其适用于注重性价比的数据采集应用.现在,Measuremen ...

  2. 基于hadoop的商品推荐系统_[零基础入门推荐系统(1)]基于用户和基于物品的协同过滤方法(python代码实现)...

    1. 前言: 为什么会有该系列? 最近,打算写<零基础入门推荐系统>系列,为了系统地介绍推荐系统知识,以及加强基础的实践能力. 该系列将结合一些书籍,比如项亮的<推荐系统实践> ...

  3. python基于水色图像的水质评价_零基础学习Python的学习路线及教程

    什么是Python? 在过去的2017年里,Python开发者在全球快速增长,国内小伙伴学习 Python 的热情一路高涨.同时,PYPL发布7月编程语言指数榜,Python 在今年5月首次超越 Ja ...

  4. direct wifi 芯片_介绍一款支持WiFi Direct的SPI接口WiFi模块

    从定义上来看,WiFi Direct是一个标准,WiFi Direct标准是指允许无线网络中的设备无需通过无线路由器即可相互连接.与蓝牙技术类似,这种标准允许无线设备以点对点形式互连,不过在传输速度与 ...

  5. 单片机课程设计:基于STM32的温湿度检监测报警系统的设计

    基于STM32的温湿度检监测报警系统 文章目录 基于STM32的温湿度检监测报警系统 前言 一.设计任务 二.系统硬件设计 1.元器件选用 2.系统模型设计 3.硬件连接 二.系统程序设计 1.程序流 ...

  6. [转]基于LabVIEW的锁相放大器及其应用

    [转]基于LabVIEW的锁相放大器及其应用 2010-12-15 21:57 基于LabVIEW的锁相放大器及其应用 物理学院? 07级  崔? 龙? 20071001013 韩恩道? 200710 ...

  7. 基于LABVIEW和热电偶设计一个温度测量系统

    ** **整个温度测量系统的设计为两个部分,一在LABVIEW2018上编程出温度测量系统,二在NI-DAQ上进行数据采集,把采集到的数据通过串口输入到LABVIEW的子面板程序中,输出得到波形,完成 ...

  8. 基于LabVIEW的通信系统设计与实现

    本文是一个汇总文,为了方便按顺序去复习与学习各个模块的链接,也有整个课程设计的心得体会. 1 设计要求 1.1 设计目标 进行信号编码和解码 + 尝试进行信号调制和解调 基于LabVIEW + USR ...

  9. labview虚拟心电监测系统_基于LabVIEW的虚拟心电记录系统研制

    基于 LabVIEW 的虚拟心电记录系统研制 李喆 ; 卢广文 ; 莫莉 ; 余学飞 [期刊名称] <微计算机信息> [年 ( 卷 ), 期] 2007(023)031 [摘要] 利用具有 ...

最新文章

  1. Linux 的多线程编程的高效开发经验
  2. C++ Primer 5th笔记(9)chapter9 顺序容器 构造和赋值
  3. SAP PP常用表(重要)
  4. 天梯赛 L1-023 输出GPLT (20 分)
  5. win10下安装pyspark及碰到的问题
  6. wince 开发_大牛总结: 入行嵌入式开发之前,先来看看这个规划
  7. node php go python_PHP 可能在未来十年内消失?
  8. JS中元素的属性(class、style)操作
  9. 软件可靠性的一些关注点
  10. Windows Xp下 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll 的解决办法
  11. 三地检方分别对程颖、谭元生、聂作坤案提起公诉
  12. 基于Arduino的智能小车-代码部分
  13. 高可用PgSQL集群架构设计与落地
  14. 充电头PD协议和QC协议的理解
  15. MKS Robin nano V3.0主板使用RRF 固件教程
  16. Essential Phone PH1官方刷机方法
  17. React学习手册 React学习手册中文版 React学习手册pdf React学习手册中文版pdf
  18. 字符编码、Unicode原理、数据流压缩Zlib与Miniz的实现
  19. jq获取页面中所有的a链接并执行下载功能
  20. 个人人民币定期存款-存本取息Personal CNY Time Deposit – Schedule

热门文章

  1. 久违了我的博客园《人生的体会》
  2. 向线程传递数据与线程用回调方法检索数据
  3. html贪吃蛇自动走,分享一个用html5实现的贪吃蛇特效代码
  4. java camel dsl,Apache Camel与Spring DSL
  5. python安装成功第三方库但import出问题_为什么会在pyspark在RDD中调用python第三方库失败?...
  6. 3*3卷积核 5*5卷积核到底有多大区别
  7. python 慕课课程笔记(一)
  8. python dataframe是什么_python – 逐个构建DataFrame的最快方法是什么?
  9. 【UWB】ELM 极限学习机原理及公式推导
  10. 竞争性前导码数量( numberOfRA-Preambles)