Zynq7000系列SD/SDIO控制器详细介绍(一)

SD/SDIO控制器通过多达四条数据线与SDIO设备、SD存储卡和MMC卡通信。在SD接口上,可以使用一条(DAT0)或四条(DAT0-DAT3)线进行数据传输。SDIO接口可以通过MIO多路复用器路由到MIO引脚,也可以通过PL中的EMIO路由到SelectIO引脚。该控制器可以支持各种便携式低功耗应用中的SD和SDIO应用,如802.11设备、GPS、WiMAX、UWB等。SD/SDIO控制器框图如图13-1所示。

SD/SDIO控制器与标准SD主机控制器规范版本2.0第A2部分兼容,支持SDMA(单操作DMA)、ADMA1(4KB边界限制DMA)和ADMA2(ADMA2允许在32位系统内存中传输任何位置和任何大小的数据-分散收集DMA)。该内核在SD1、SD4中最多支持七个功能,但不支持SPI模式。Zynq 7000 SoC有望与eMMC设备配合使用,因为其协议与SD相同,但尚未得到广泛验证。用户必须小心满足所有时间要求,因为他们可能会也可能不会遵守eMMC。它确实支持SD高速(SDHS)和SD高容量(SDHC)卡标准。用户应熟悉SD2.0/SDIO 2.0规范。

这些在附录B“附加资源和法律声明”中列出。SD/SDIO控制器还支持MMC3.31标准。eMMC闪存不是Zynq 7000系列的主要引导设备,但可以用作辅助引导设备。

Arm处理器通过AHB总线访问SD/SDIO控制器。控制器还包括一个带有内部FIFO的DMA单元,以满足吞吐量要求。

主要特点

两个SDIO控制器通过相同的功能集独立控制和操作:

  • 主机模式控制器
  1. 四个输入/输出信号(MIO或EMIO)
  2. 命令、时钟、CD、WP、电源控制(MIO或EMIO)
  3. LED控制,总线电压(EMIO)
  4. 中断或轮询驱动
  • AHB主从接口以CPU_1x时钟速率运行

DMA传输的主模式(带1KB FIFO)

寄存器访问的从属模式

  • SDIO规范2.0
  1. 低速,1 KHz至400 KHz
  2. 全速,1 MHz至50 MHz(25 MB/秒)
  3. 高速大容量存储卡

系统观点

图13-2显示了SD/SDIO控制器系统视角。

功能说明

AHB接口和中断控制器

当使用编程I/O进行数据传输时,软件会读取和写入数据。Buffer_Data_Port寄存器。

当使用本地DMA单元进行数据传输时,DMA单元会启动读取或写入内存事务。SDIO控制器不能与PS DMAC一起使用。

控制器可以分别为SDIO 0和SDIO 1生成IRQ中断#56和79。中断的状态和屏蔽由寄存器控制。
中断的状态和屏蔽由寄存器控制。

SD/SDIO主机控制器

SD/SDIO主机控制器包括:

  • 主机AHB控制器
  • 所有控制寄存器
  • 总线监视器
  • 时钟发生器
  • CRC生成器和检查器(CRC7和CRC16)

主机AHB控制器充当AHB总线和主机控制器之间的桥梁。SD/SDIO控制器寄存器由处理器通过AHB接口编程。中断是根据中断状态和中断启用寄存器中设置的值生成的。

总线监视器检查SD总线上是否发生违规和超时情况。时钟生成块根据时钟控制寄存器中编程的值生成SD时钟。

CRC7和CRC16生成器计算向SD/SDIO卡传输命令和数据的CRC。CRC7和CRC16检查器检查从SD/SDIO卡接收到的响应和数据中的任何CRC错误。为了检测卡上的数据缺陷,主机可以在有效载荷数据中包含纠错码。ECC码用于在卡上存储数据。此ECC码由应用程序用于解码用户数据。

数据FIFO

控制器使用两个512字节的双端口FIFO来执行写和读事务。在写入事务期间(数据从处理器传输到连接的卡),数据由处理器交替写入第一和第二FIFO。当数据传输到连接的卡时,可以使用第二和第一FIFO,提供最大的数据吞吐量。

在读取交易期间(数据从连接的卡传输到处理器),卡中的数据交替写入两个FIFO。当来自一个FIFO的数据被传输到处理器时,第二个FIFO被来自卡的数据填充,反之亦然,从而优化了数据吞吐量。

如果控制器无法接受来自连接卡的任何数据,它会发出读取等待,通过停止时钟来停止卡的数据传输。

命令和控制逻辑

控制逻辑块在写事务期间在数据线上传输数据,在读事务期间接收数据。命令控制逻辑块通过命令线传输命令,并从SD2.0或SDIO2.0接收响应。

总线监视器

总线监视器检查SD总线中发生的违规行为和超时情况。

Stream写入和读取

此功能适用于DMA和非DMA模式。

WRITE_DATAUNTIL_STOP(CMD20)从主机写入数据流,从给定地址开始,直到STOP_TRANSMISSION。

READ_DATAUNTIL_STOP(CMD11)从卡中读取数据流,从给定地址开始,直到STOP_TRANSMISSION。


在向第一FIFO写入数据块/从第一FIFO读取数据块之后,主机控制器切换到第二FIFO,但流事务块大小不是由驱动器编程的。因此,对于流写入和流读取事务,建议主机驱动程序将最大FIFO大小值写入块大小寄存器。由于SDIO FIFO切片设置为512字节,因此主机驱动程序必须将512字节写入块大小寄存器。因此,FIFO切换发生在写入/读取512字节的数据之后。

时钟

SDIO时钟基于驱动器编程的时钟控制寄存器值从SDIO参考时钟中导出,当驱动器设置SD时钟启用时可用。最大频率为50 MHz。

AHB系统时钟用于AHB接口。

主机控制器支持全速和高速卡。对于高速卡,主机控制器应在SDIO时钟的上升沿输出数据。对于全速卡,主机控制器应在SDIO时钟的下降沿输出数据。

注意:在卡初始化过程中,SDIO参考时钟必须设置为100 MHz以上。这是为了确保SD卡接口频率不超过初始化所需的400 kHz。除数值设置为0x80(256),从100 MHz参考产生390 kHz时钟。

软件重置

主机控制器支持SD2.0/SDIO2.0主机控制器规范中提到的所有软重置。

FIFO OverrunUnderrun条件

此功能适用于DMA和非DMA模式。

在写事务期间,主机控制器仅在数据块准备好传输并且卡不忙时才将数据传输到卡。因此,SD侧不会出现运行不足的情况。

  • 在DMA模式下,只有当有空间接受数据块时,主机控制器才会从Arm处理器启动DMA READ。
  • 在非DMA模式下,只有当空间可用于接受数据块时,主机控制器才会断言缓冲区写就绪中断

在读取事务期间,当FIFO已满时(FIFO没有足够的空间从卡中接受数据块),主机控制器停止向卡发送clk_sd。因此,SD侧不会出现过载情况。

  • 在DMA模式下,主机控制器仅在从卡接收到数据块时才向Arm处理器发起DMA写入。
  • 在非DMA模式下,主机控制器仅在从卡接收到数据块时才断言缓冲区读就绪中断。
限制

互连交换机(Arm NIC-301)将AXI事务转换为AHB事务,然后传输到SD/SDIO控制器。但它不处理来自PL的WSTRB信号传播。如果PL主机发出AWSIZE=2(4字节)的2字节宽事务,则上两个字节未定义。因此,建议对2字节的传输使用AxSIZE=1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值