Zynq-7000 SoC,SDIO - DMA突发事务对齐和长度要求
描述
DMA突发的长度必须是4个字节的对齐倍数,以避免覆盖DMA缓冲区中的数据。
解
影响: | 次要 |
解决方法: | 确保所有缓冲区都是4个字节的倍数,除了最后一个可以是任何大小的缓冲区。 |
受影响的配置: | 使用SDIO控制器和ADMA2模式的系统。 |
受影响的器件版本: | 全部,没有计划修复。请参阅(Xilinx答复47916) - Zynq-7000 SoC芯片版本差异 |
SD主机控制器规范版本2.00定义了ADMA2缓冲区描述符和它们指向4字节对齐的缓冲区;但是,每个DMA条目的长度可以是1到64KB的任意数量的字节。
如果长度不是4字节的倍数,则控制器无法正确处理ADMA2从主机内存写入卡。以下示例演示了此问题。
描述表:
ADDR | 长度 | 数据 |
为0x1000 | 4字节 | 0x0123_4567 |
为0x2000 | 3个字节 | 0xABCD_DEAD |
0x3000处 | 4字节 | 0x8912_2345 |
当ADMA2操作启动时,控制器从地址0x1000获取4个字节的数据,并将数据压入其内部FIFO的位置0(每个位置为32位宽)。接下来是从地址0x2000获取下一个描述符数据,并且在位置1中复制数据。由于位置1未完全填充(只有3个字节有效),因此指针不递增。最后一个描述符数据从地址0x3000获取,数据在位置1复制。位置1中存在的3个字节被错误地覆盖。
添加评论