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个字节被错误地覆盖。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 14:51:12 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它