我最近在玩USB读卡器的实验,往SD卡写数据我测试的速度是170KB/S,太慢了。坛子上有人说用DMA能提高速度。于是我修改了一下USB读卡器的实验:DMA+SPI。
这是初始化DMA函数:
MYDMA_Config(DMA1_Channel5,(u32)&SPI2->DR,(u32)OUT_BUFF,512);//DMA1通道5,外设为SPI2,存储器为OUT_BUFF,长度512.
这是SPI写数据函数:
u8 SD_SendBlock(u8*buf,u8 cmd)
{
u16 t;
if(SD_WaitReady())return 1;//等待准备失效
for(t=0;t<512;t++)
OUT_BUFF[t]=buf[t];
SD_SPI_ReadWriteByte(cmd);
if(cmd!=0XFD)//不是结束指令
{
// for(t=0;t<512;t++)SPI2_ReadWriteByte(buf[t]);//提高速度,减少函数传参时间
MYDMA_Enable(DMA1_Channel5);//开始一次DMA传输!
SD_SPI_ReadWriteByte(0xFF);//忽略crc
SD_SPI_ReadWriteByte(0xFF);
t=SD_SPI_ReadWriteByte(0xFF);//接收响应
if((t&0x1F)!=0x05)return 2;//响应错误
}
return 0;//写入成功
}
得到的现象就是往SD卡里拷数据的时候屏幕会显示错误,而且拷的数据也不正确。请问是什么原因呢?
|