ZYNQ ZCU102 SPI实战指南:EMIO连接与SDK调试全解析
在嵌入式系统开发中,SPI接口因其简单高效的特性成为外设通信的首选方案之一。Xilinx ZYNQ Ultrascale+ MPSoC平台上的SPI控制器功能强大但配置复杂,尤其是当开发者需要将SPI信号通过EMIO引出到PL端时,往往会遇到各种意料之外的问题。本文将基于ZCU102开发板,从硬件设计到软件调试,完整呈现一个SPI自测项目的实施过程,特别聚焦那些容易出错的环节和解决方案。
1. ZYNQ SPI架构解析与方案选型
ZYNQ Ultrascale+ MPSoC提供了两种SPI控制器实现方式:PS端内置控制器和PL端AXI Quad SPI IP。对于大多数应用场景,PS端SPI控制器因其性能稳定、资源占用少而成为首选。PS端SPI又可通过MIO或EMIO两种方式连接:
- MIO连接:直接使用PS端的多功能IO引脚,配置简单但受限于引脚数量
- EMIO连接:通过PL端引脚扩展,灵活性高但配置复杂
在ZCU102开发板上,当我们需要连接多个SPI设备或需要灵活分配引脚时,EMIO方案往往更合适。但这里有一个关键认知偏差需要纠正:ZYNQ的SPI控制器信号线并非传统认知的4-6根(CLK、MOSI、MISO、SS),而是包含14根信号线的完整集合:
| 信号类型 | 信号名称 | 方向 | 说明 |
|---|---|---|---|
| 主控输出 | spi0_mosi_o | 输出 | 主设备数据输出 |
| 主控输入 | spi0_miso_i | 输入 | 主设备数据输入 |
| 时钟信号 | spi0_sclk_o | 输出 | SPI时钟 |
| 片选信号 | spi0_ss_o[2:0] | 输出 | 片选信号(最多3个) |
| 从机模式 | spi0_s_* | 输入/输出 | 从机模式相关信号 |
实际项目中,我们通常只使用主模式下的6根核心信号线(mosi、miso、sclk和最多3个ss),但硬件上必须为所有信号分配引脚,否则在生成比特流时会报错。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计:从Block Design到管脚约束
2.1 Block Design配置
在Vivado中创建新
