浅谈Zynq实现SPI接口设计

时间:2025-11-02  作者:Diven  阅读:0

当我们在设计中使用Zynq SoC或Zynq UltraScale + MPSoC时,可以有两种方法来实现SPI接口:

浅谈Zynq实现SPI接口设计

使用PS端的SPI控制器(PS端有两个SPI控制器)

在PL端使用配置成标准SPI通信的AXI Quad SPI (QSPI) IP模块

我们可以根据应用的要求来选择使用哪种方法实现SPI控制器。两种SPI的实现方式都支持四种SPI模式,并且都可以作为SPI主设备或SPI从设备。下表列出了之间的一些差异:

我们演示一下如何使用PS端的SPI控制器进行SPI传输。在Zynq MIO configuration选项卡中选中SPI控制器,这就将SPI包含在了设计中。在这个例子中,我将把SPI信号连接到Digilent ARTY Z7开发板的SPI接口,这需要通过PL I/O使用EMIO。
 

图:启用SPI并将端口映射到EMIO


在选择好相应的选项后,唯一要做的就是连接SPI端口的I/O。具体要如何进行连接取决于我们是需要配置一个SPI主设备还是从设备。在SPI控制器上,每个SPI端口都有对应的可用输入(xxx_i)输出端口(xxx_o)。端口的正确连接十分关键,如果连接错误,当运行应用程序时,将得到完全错误的运行结果,这可能需要花费我们几个小时的时间来寻找问题的源头。另外,当配置成SPI从设备时,有一个名称为Slave Select的输入;而当用作SPI主设备时,将有三个选择引脚。

当正确配置好I/O并创建了工程,我们就可以使用应用软件中的SPI配置选项将SPI控制器配置成为主设备或从设备。使用PS SPI控制器配置和传输数据,需要使用由XSPIps.H定义的BSP(板卡支持包)所提供的API接口。在第一个例子中,我们将SPI控制器配置为SPI主设备。

默认情况下,SPI使用8位传输。但是,我们也可以将传输配置成更大的16或32位。对于8位传输,我们在C程序中可以使用u8数据类型。对于16位或32位传输,分别使用16位或32位对数据进行读写缓存。

一开始,这可能会导致一些问题或生成编译器警告,因为执行如下所示的两个数据传输API函数都需要发送和接收缓冲区的数据类型为u8:

s32 XSpiPs_Transfer(XSpiPs *InstancePtr, u8 *SendBufPtr, u8 *RecvBufPtr, u32 ByteCount);

s32 XSpiPs_PolledTransfer(XSpiPs *InstancePtr, u8 *SendBufPtr, u8 *RecvBufPtr, u32 ByteCount);

为了解决使用u16和u32数据类型的问题,我们需要将缓冲区转换为u8指针,如下所示:

XSpiPs_PolledTransfer(&SpiInstance, (u8*)&TxBuffer, (u8*)&RxBuffer, 8);

这样设置将就使得我们能够传输大小为8,16或32位的数据了。为了演示这一设置,我将SPI主设备IO连接到Digilent Digital Discovery口袋仪器来测试传输的数据。在应用软件中使用上述方法将数据宽度从8位变为16位。

图:Arty Z7开发板与Digital Discovery口袋仪器

图:Zynq SoC PS SPI主设备发送四个8位字

图:PS SPI主设备发送四个16位字

另一个实现SPI接口的方法是使用AXI QSPI IP核,使用这种方法需要在Vivado中进行的设置比较多,需要花费比较长的时间。在AXI QSPI配置对话框中,我们可以配置传输的宽度、频率和从设备的数量。最重要的一个选项就是选择AXI QSPI IP核是作为SPI主设备还是从设备。如果要配置成SPI主设备,就必须选中enable master mode选项。如果要配置成为从设备,则必须取消该选项以确保SPISel输入引脚的存在。当SPI IP核作为从设备时,该引脚需要连接到主设备的slave select.端口。

 

图:配置AXI Quad SPI

与PS SPI控制器一样,BSP也为SPI IP提供一个API接口。我们可以用来开发应用软件,这个API是在文件XSPI.h中定义的。作为例子的第二部分,我将使用这个API来配置AXI QSPI作为SPI从设备。


为了演示创建软件后AXI QSPI核可以正确的以SPI从设备方式进行工作。我再次使用Digilent Digital Discovery口袋仪器作为SPI主设备,使数据在两者之间传输。
 

图:SPI从设备收发数据(蓝色的数据由Zynq SPI Slave输出)

图:最终的block diagram

当然,如果使用Xilinx FPGA代替Zynq SoC或Zynq UltraScale MPSoC,则可以使用具有相同AXI QSPI配置的MICroBlaze软核来实现SPI接口。只要正确地将其定义为主设备或从设备即可。

        希望这篇文章能够帮助你了解如何使用这两种不同的方法创建主/从SPI接口。

猜您喜欢

电压比较器是一种电子电路,用于比较两个输入电压的大小,并在某个条件满足时产生输出信号。它在很多应用中被用来判断信号的相对大小或触发特定的操作。下面是电压比较器的...
2023-09-04 15:25:00

电源管理芯片,作为电子设备的心脏,负责着电压转换、电流分配等重要任务。而8引脚电源管理芯片凭借其小巧的体积和高效的性能,应用于各种电子产品中。今天,我们将深入解...
2024-11-28 00:00:00

杜邦线,又称端子排线,应用于电子产品的连接与信号传输。其规格尺寸通常取决于具体的应用需求,但常见的杜邦线规格有1.0mm、2.54mm和3.96mm等。这些规格...
2014-09-07 00:00:00

金属卤化物钙钛矿(MHP)具有低温溶液可加工性、机械柔性和优异的光电性能,是下一代柔性光电探测器(FPD)的理想材料。然而,多晶金属卤化物钙钛矿中的缺陷和离子迁...
2023-08-21 10:19:00

电容器在电路中很重要,特别是在滤波方面。能有效地平滑电流。本文将介绍电容的滤波原理。什么是滤波?滤波是去除信号中不需要成分的过程。通常需要去掉高频噪声。电容器在...
2025-03-28 06:01:07

文件夹作为常见的办公工具,具有多重优势,帮助我们更高效地管理和整理资料。文件夹能够有效分类文件,避免资料混乱,使查找和使用更加方便快捷。文件夹提供了良好的保护功...
2014-06-11 00:00:00

内六角圆柱头螺钉是常见的紧固件,应用于机械设备、电子产品及家具制造等领域。其规格尺寸通常包括螺钉的直径、长度以及螺纹类型等。常见的直径有M3、M4、M5、M6等...
2008-12-28 00:00:00

现代电子设备和机械系统中,连接器的选择非常重要。TERMINAL_31.68X10MM作为一种高性能连接器,凭借其独特的设计和优异的性能,广泛应用于各类电子产品...
2025-03-06 20:39:30

塑封膜是应用于包装和保护的重要材料,主要由聚乙烯、聚丙烯等塑料制成。具有优良的防潮、防尘和防污功能,能够有效延长物品的使用寿命。塑封膜的透明性良好,可以清晰展示...
2024-07-03 00:00:00

可调谐滤波器是能够根据需求调整频率响应的电子元件,应用于通信、音频处理和信号处理等领域。其核心功能是选择性地允许特定频率的信号通过,同时抑制其频率,从而实现信号...
2014-09-29 00:00:00