在ZedBoard下SPI接口和ARM处理器端实现以太网远端传输的设计

摘要:该文介绍了zedboard平台下可编程逻辑端spi接口和arm处理器端以太网远端传输的设计。结合实例阐述了可编程逻辑端spi接口设计和linux下ip驱动生成,以及采用udp/ip协议实现以太网传输的技术。实验结果证明了该系统能够精确地完成实时数据传输。
随着嵌入式技术和市场需求的不断发展,嵌入式设备之间进行信息交互以及数据远端传输成为嵌 入式系统的一个重要的环节。在嵌入式应用中以太网是解决远端传输高效可行的技术,如进行远端监 控、控制和远端异常检测,可节省大量的人力和财力[1] 。如今,硬件设备间的通信通常采用wishbone 总线协议、i2c总线协议、uart协议等。spi是串行外围接口协议,相比其他协议具有传输速度快、应用 简单和占用引脚资源少等优点[2] 。本文利用全可编程片上系统特性实现了一种基于zedboard的spi接口及以太网远端传输的设计方案,完成linux下硬件设备间应用spi协议通信和数据的远端传输功能,采用pl端制定接口控制模块spi ip核并且编写linux下ip核驱动的方法实现接口控制,linux系统下udp/ip协议进行以太网远端传输。同时充分利用了zedboard平台主芯片zynq-7000双核cortex a9 arm核和可编程逻辑于一体的特性,为软硬件设计提供了很强的灵活性。
1 系统总体设计 本设计的主控板为zedboard开发板,主芯片zynq-7000结合高性能双核arm cortex a9mp core处理系统和可编程逻辑于一体。系统主要功能是:可编程逻辑端通过spi协议实现硬件设备间的通信,通过pmod口实现硬件设备的物理连接,接收的数据再采用linux系统下udp/ip协议实现以太网远端传输。系统框图如图1所示。
图1 系统框图
1.1 硬件设计
1.1.1 spi硬件接口
通过zedboard上的pmod接口实现硬件的物理连接,zedboard上的4个pmod接口(ja、jb、jc、jd)支持lvcmos3.3v和lvttl3.3v信号,其中的2个(jc、jd)能够支持525mb/s的lvds信号。为了避免短路电流和静电,pmod接口电路设计中为每个信号口增加了1个静电保护二极管和串接了1个 200ω的电阻[3] 。pmod接口电路设计如图2所示。其中spi协议传输只用到pmod的4个引脚,spi的4个信号线ss、mosi、miso、sck分别连接到pmod的ja1、ja2、ja3、ja4。
图2 pmod接口电路
1.1.2 硬件配置
xilinx可编程嵌入式系统工程在xilinx公司的嵌入式开发套件(embedded development kit,edk) 环境实现,xilinx edk具有完成嵌入式系统设计的一套工具和硬件配置需要的ip核 [4] 。edk环境下硬 件结构设计的主要工具是xilinx开发平台(xilinx platform studio,xps),硬件设计步骤如下:
(1)设置新工程路径;
(2)用ipcatalog中的ip或自定义ip配置外设;
(3)建立ucf文件;
(4)bits流生成;
(5)下载bit流到fpga中。
本设计中添加一个axi4-lite总线设备spi模块来控制pmod接口实现硬件设备之间通信,其中 axi4-lite全局时钟aclk设置为100mhz。spi模块分配的物理地址为0x42020000,以及64k小的空间,spi配置信息,如图3所示
图3 spi模块物理地址及大小
1.2 软件设计
软件设计包含linux下spi核驱动和linux下udp/ip以太网传输应用程序两部分。spi核驱动在软件设计包含linux下spi核驱动和linux下udp/ip以太网传输应用程序两部分。spi核驱动在虚拟机中ubuntu下交叉编译完成,传输应用程序在edk开发套件中的软件开发环境下完成。
1.2.1 spi核驱动
由于远端传输由在linux系统下udp/ip协议实现的,因此,编写linux下的ip驱动,应用程序就可以通过linux的标准接口访问spi设备。本设计编写的是misc型设备驱动程序,包含设备加载、设备卸载以及文件操作函数。
spi模块加载时系统调用module_ init(spi_init)宏实现模块的初始化操作,在本系统中spi_init()函数主要完成以下工作:
(1)内核注册misc型设备驱动;
(2)将spi模块物理地址映射到虚拟地址上。 调用module_ exit(spi_exit)宏来实现spi模块的卸载,在spi_exit()函数完成模块的清除工作,具体为实现虚拟地址释放和删除设备文件。
系统驱动程序定义了spi读写和开关文件操作接口函数,文件操作结构为:
其中,spi_open和spi_release为打开和关闭操作封装函数。在spi_open中完成spi从机选择寄存器和控制寄存器的配置:spi使能、
spimaster 设置、spi传输模式(cpha=cpol=0)、以及禁止传输位设置。spi_read方法为将读取的数返回到应用空间,具体实现采用的是
copy_to_user内核函数。spi_write是传输数据的封装函数,通过内核函数copy_from_user实现。
1.2.2 以太网传输应用程序设计
系统采用的是实时性比较强的面向无连接的udp/ip协议进行socket网络编程来实现以太网传输。在本系统网络传输中应用程序通过axi4—lite
总线将直接读取pl端采集数据送入协议栈中,然 后逐步封装成以太网数据帧通过网络发送出去[5] 。网络传输具体实现流程为:(1)调用socket()创建一个数据流套接字;(2)调用sendto()向服务器发送read()函数读取的数字信号;(3)调用close()关闭套接字。实现流程如图4所示。
图4中,read()函数为驱动程序定义的接口函数,sendto()函数为socket编程发送消息接口函数,参数sockfd为建立通信创建的套接字。
图4 系统传输实现流程
2 实验测试 系统测试硬件平台为可移植linux系统zedboard开发板一块,装有 socket调试助手pc机一台。 zedboard中编写udp客户端程序,linux系统ip地址为192.168.1.10,所以测试时pc机中socket调试助手创建一个udp服务器设置ip地址为192.168.1.11,端口号为3490。通过spi协议发送一串测试字符到pmod口,再通过网口传输到pc机上显示,服务器信息设置和以太网接收数据如图5所示。实验 证明该系统能够实现设备间spi通信和以太网远端传输。
图5 socket调试助手接收以太网传输的数据
3 结束语 本文基于zedboard的spi接口和以太网传输系统实现了pl端硬件设备间spi协议通信,ps端进行以太网远端传输技术。在pl端添加spi核完成硬件设备间通信,这充分利用了fpga硬件设计的灵活性,ps端以太网传输充分利用了嵌入式开源linux操作系统特性和udp/ip协议的实时性,为视频和软件无线电等嵌入式领域提供了一个很好的传输解决方案。

终端电阻信号的反射原理
全球动力电池制造正在驶入新阶段
中芯国际被美国出口管制对中国芯片行业有哪些影响
RFID的分类、应用及使用案例
高通芯片体积大幅减小 智能手机有望进一步瘦身
在ZedBoard下SPI接口和ARM处理器端实现以太网远端传输的设计
microSD/micro-SIM组合式连接器外形更薄,尺寸更小
Pure Storage开创行业先河:以全闪存解决方案满足各种存储需求
安徽来安三湾30MW风电项目获批
Veritone Developer应用程序已全面上市
浇筑式变压器UL认证怎么做
基于cAMOEBA极化力场的燃烧气相分子的输运参数
中国电网建设的未来目标和挑战
蜂巢能源计划2025年在量产车上应用示范能量密度达350-500Wh/kg的固态电池
细菌总量快速检测仪的特性是怎样的
电视信号放大芯片怎么用
苹果AirPods成00后新宠,销量火爆占三成!
ThinkPad二十年发展史:主打PC行业中高端
编程和机器人就是人工智能的全部吗
数字隔离的介绍