打印

STM32 SDIO实现SD卡 DMA配置问题

[复制链接]
10892|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
styeven|  楼主 | 2012-6-8 18:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
static void DMA_RxConfiguration(u32 *BufferDST, u32 BufferSize)
{
  DMA_InitTypeDef DMA_InitStructure;
  DMA_ClearFlag(DMA2_FLAG_TC4 | DMA2_FLAG_TE4 | DMA2_FLAG_HT4 | DMA2_FLAG_GL4);
  DMA_ClearITPendingBit(DMA2_IT_TC4);
  /* DMA2 Channel4 disable */
  DMA_Cmd(DMA2_Channel4, DISABLE);
  /* DMA2 Channel4 Config */
  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)SDIO_FIFO_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)BufferDST;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = BufferSize/4  ;   //这个值 为什么不能修改。?
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA2_Channel4, &DMA_InitStructure);
  /* DMA2 Channel4 enable */
  DMA_Cmd(DMA2_Channel4, ENABLE);
}


BufferSize是我定义的一个扇区大小为512
我里面的数据都是u32 也就是4个字节。但是理论上讲DMA_BufferSize不一定要规定死的,是应该可以灵活控制的,你想设置多少次就可以的。但是现在却不行。求高手指点
DMA_InitStructure.DMA_BufferSize 这个值为什么只能是BufferSize/4
}
沙发
anboe2012| | 2012-6-18 14:21 | 只看该作者
单片机读写SD卡 模块 支持FAT32 UART接口 .TXT文件

随着电子技术的发展,SD卡作为大容量数据存储器越来越受到广大电子爱好者和客户的衷爱。但是由于
SD卡FAT操作的编程复杂,很多电子爱好者望而却步,现在好了,我们推出了这块小巧玲珑的SD卡读卡模
块,将复杂的FAT操作集成其内,单片机只需简单的串口操作就能将数据存到SD卡中去,而且支持FAT32

功能简介:
1. 电源输入范围宽:5~9V,支持3.3V和5V的UART接口。
2. 和单片机的接口简单 UART(串口)接口 可以直接和单片机的UART接口连接
3. 集成FAT32格式系统
4. 文件的读写支持两种模式,一种顺序读写,用以连续的大量数据的读写.一种为给定起始地址的读写,
用来随即读写的少量数据的情况,这个功能是的文件的读写非常灵活
5. 波特率可以用拨码开关选择,支持从1200~115200bps
6. 一次性发送数据贞可以长达256字节,有效字节数250
7. 支持<=8G容量的SD卡
8. 读写SD卡模块的速度快
9. 命令结构简单,方便发送
10.能动态监测SD状态有错就会提示
11.模块尺寸小,便于安装与使用。





那个带SD卡的是个模块,带处理器,整合了FAT32,接口是串口(UART)
51单片机串口115200bps读写,写入后文件样子如下:



说明书下载地址:http://www.prog430.com/files/SDV6.pdf

测试软件下载地址:http://www.prog430.com/files/SDV6_test.rar

说明书下载地址:http://www.prog430.com/files/SDV7.pdf

测试软件下载地址:http://www.prog430.com/files/SDV7_test.rar

使用特权

评论回复
板凳
eakliu| | 2012-6-18 14:29 | 只看该作者
建议版主封杀楼上发广告id,太讨厌了

BufferSize是我定义的一个扇区大小为512
我里面的数据都是u32 也就是4个字节。但是理论上讲DMA_BufferSize不一定要规定死的,是应该可以灵活控制的,你想设置多少次就可以的。但是现在却不行。求高手指点
DMA_InitStructure.DMA_BufferSize 这个值为什么只能是BufferSize/4

buffersize 512 是字节数
dma_buffersize 是以32bit读取, 是4bytes, 所以 BufferSize/4
同时,你也要注意转换的大小端的顺序,

使用特权

评论回复
地板
styeven|  楼主 | 2012-7-23 21:02 | 只看该作者
但是 如果设置成比128小为什么也不行。比如 64 也还是会死在while (DMA_GetFlagStatus(DMA2_FLAG_TC4) == RESET)这里。  因为我本来就是想u8的存放而不是以u32位单位存放 3# eakliu

使用特权

评论回复
5
styeven|  楼主 | 2012-7-23 21:11 | 只看该作者
还有就是512是字节,那个是位。4位才1个字节。所以理论上DMA传512次也是可以的。不需要512/4 3# eakliu

使用特权

评论回复
6
john1225cn| | 2013-12-24 21:02 | 只看该作者
单片机不行,还是看我的SDIO模式操作,速度极快

使用特权

评论回复
7
huzi2099| | 2013-12-24 23:56 | 只看该作者
dma的buffersize只能是512字节,这个实际上是sd卡的协议决定的,sd卡收发每512个字节要插入一个crc校验,这是必需停止dma.
楼上单片机可以的

使用特权

评论回复
8
mengyy| | 2015-10-31 09:53 | 只看该作者
SD传输的时候一直卡在了DMA等待这里
用野火的不行,换了安富莱的驱动就可以了

使用特权

评论回复
9
yiyigirl2014| | 2015-10-31 14:02 | 只看该作者
模块尺寸小,便于安装与使用

使用特权

评论回复
10
稳稳の幸福| | 2015-10-31 14:35 | 只看该作者
单片机读写SD卡 模块 支持FAT32 UART接口 .TXT文件

使用特权

评论回复
11
天灵灵地灵灵| | 2015-10-31 14:56 | 只看该作者
DMA_Cmd(DMA2_Channel4, ENABLE);这个是使能?

使用特权

评论回复
12
天灵灵地灵灵| | 2015-10-31 15:10 | 只看该作者
文件的读写支持两种模式,一种顺序读写,用以连续的大量数据的读写.一种为给定起始地址的读写,

使用特权

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

本版积分规则

0

主题

20

帖子

1

粉丝