sd卡文件系统接口疑问

2019-07-20 07:54发布

看了很多历程,在处理SD卡接口使用DMA字节对齐问题时,
如果不对齐的BUFF,都是通过一块一块读,然后复制数据。
其实F4不是已经支持WORD到BYTE的DMA方式吗?为什么不用呢?
当一次读多块,用一块一块读,再拷贝数据,会慢很多很多的。。。
[mw_shl_code=applescript,true]u8 SD_ReadDisk(u8*buf,u32 sector,u8 cnt)
{
        u8 sta=SD_OK;
        long long lsector=sector;
        u8 n;
        lsector<<=9;
        if((u32)buf%4!=0)
        {
                 for(n=0;n<cnt;n++)
                {
                         sta=SD_ReadBlock(SDIO_DATA_BUFFER,lsector+512*n,512);//单个sector的读操作
                        memcpy(buf,SDIO_DATA_BUFFER,512);
                        buf+=512;
                }
        }else
        {
                if(cnt==1)sta=SD_ReadBlock(buf,lsector,512);            //单个sector的读操作
                else sta=SD_ReadMultiBlocks(buf,lsector,512,cnt);//多个sector  
        }
        return sta;
}[/mw_shl_code]

DMA配置为WORD->BYTE,会有什么问题吗?
[mw_shl_code=applescript,true]  SDDMA_InitStructure.DMA_Channel = SD_SDIO_DMA_CHANNEL;
  SDDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS;
  SDDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)BufferDST;
  SDDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  SDDMA_InitStructure.DMA_BufferSize = BufferSize;
  SDDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  SDDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  SDDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  SDDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;[/mw_shl_code]



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
正点原子
1楼-- · 2019-07-20 10:21
你试试,这种对齐是SDIO外设需要的
屋脊雀
2楼-- · 2019-07-20 15:13
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 16:31
屋脊雀 发表于 2018-6-3 15:53
肯定试过了才提出疑问的。就是不知道会有设么隐患。

能用就先用吧。用多了,不出问题就基本可以确定是oK的了

一周热门 更多>