基于FPGA实现SPI接口(配置或通信)

基于FPGA实现SPI接口(配置或通信总线)
1)总线简介
串行外设接口(SPI)是微控制器(FPGA)和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用最广泛的接口之一。主要用于与其他设备进行数据传输,例如,子设备上报自检信息到主设备,主设备发送控制命令到子设备 ,子设备执行相应的操作等;此外,SPI主要的另一个用途主要是配置外围IC芯片,例如,通过SPI总线配置adc芯片正常工作。SPI是一种同步、全双工、主从式接口。来自主机或从机的数据在时钟上升沿或下降沿同步。主机和从机可以同时传输数据。SPI接口可以是3线式或4线式。笔者重点介绍常用的4线SPI接口。
2)硬件接口
SPI硬件连接示意图如图1所示。
在这里插入图片描述
图1 SPI硬件连接示意图
4线SPI器件有四个信号:
a)时钟(SPI CLK)
b)片选(CS)
c)主机输出、从机输入(MOSI)
d)主机输入、从机输出(MISO)产生时钟信号的器件称为主机。主机和从机之间传输的数据与主机产生的时钟同步。同I2C接口相比,SPI器件支持更高的时钟频率。SPI接口只能有一个主机,但可以有一个或多个从机。MOSI和MISO是数据线。MOSI将数据从主机发送到从机,MISO将数据从从机发送到主机。这里我们以FPGA作为主机,ADC芯片作为从机。
3)逻辑设计
基于FPGA实现SPI总线可以分为两个大功能,分别为写操作和读操作。读写操作主要是基于地址和数据。写操作根据spi时序图,使用硬件描述语言(笔者使用Verilog或者sv)先写8bit写地址,再写8bit写数据即可;读操作根据spi时序图,使用硬件描述语言(笔者使用Verilog或者sv)先写8bit读地址,不用写数据(写数据赋值为0,或者高阻态),然后从读总线上获取读数据即可。SPI时序图如图2所示。
在这里插入图片描述
图2 SPI时序图
4)硬件验证
FPGA为k7410t,软件为vivado2019.1。
a)写验证:通过写地址01,写数据为08。
b)读验证:通过读地址01,读数据为08。
c)通过仿真工具vivado自带仿真器进行验证,仿真波形符合SPI时序图。
d)通过调试工具vivado自带调试器进行验证,调试波形符合SPI时序图。
5)结束语
基于FPGA实现SPI总线接口已经在实际项目中得到应用。笔者这里分享一点开发经验:标准的SPI协议为8bit地址和8bit数据,但是,在实际中会碰到非标准SPI协议情况。例如,地址是8bit,数据为8bit、16bit、24bit、32bit不等;还有地址是3bit、5bit,数据是8bit—32bit不等。也就是说,地址和数据是变长的。写逻辑时相对复杂一点,仅此而已。如果需要SPI源代码、仿真代码或者需要进一步讨论SPI细节,请发邮件沟通:[email protected]

猜你喜欢

转载自blog.csdn.net/m0_46498597/article/details/105609849