打印

STM32 SDIO DMA访问字对齐问题

[复制链接]
3605|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Miltonliu2010|  楼主 | 2013-6-3 14:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
继解决SDIO 4位总线的读写问题后,当前涉及到DMA的写操作问题。
1.当我把写数据缓冲区定义在函数内部时(位于栈),假设缓冲区首地址为pucBuf。当我向DMA写函数传递pucBuf,pucBuf + 1,pucBuf + 2,pucBuf + 3这四个值作为写缓冲区地址时,总是能将写地址之前的数据写入。比如,pucBuf[512] = {0xaa,0xbb,0xcc,0xdd,0xee,0},当我把0xcc的地址pucBuf + 2作为写缓冲首地址传送给DMA时,0xaa和0xbb这两项也会被写进SD卡。
2.当我把写数据缓冲区定义在函数外部时(位于全局区),发现第一个数据之前会被补0写进SD卡。比如,pucBuf[512] = {0xaa,0xbb,0xcc,0xdd,0xee,0},当我把pucBuf传递给DMA作为写缓冲的首地址时,实际写入SD卡的数据为{0x00,0xaa,0xbb,0xcc,0xdd,0xee,0}。

请大家探讨指教。
沙发
aozima| | 2015-8-31 12:43 | 只看该作者
STM32F2/F4的DMA支持拆分重组了,也就是buffer可以是非对齐的方式(需要在配置时使能)。
如果是F1,常用的方法是自己准备一块4字节对齐的buffer,当应用程序传进来的buffer不对齐时,使用自己的buffer,并与应用程序的buffer做memcpy。
当然,应用程序要尽量避免使用不对齐的buffer.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

87

帖子

3

粉丝