TI中文支持网
TI专业的中文技术问题搜集分享网站

通过DMA读写SD卡数据的一个问题

在138的MMCSD卡控制器的那一章有说到,在用DMA读写SD卡数据时,DMA _SIZE必须要大于或等于控制器的FIFO的大小,现在设置的FIFO大小为64byte,但是只有当我每次DMA传输数据长度等于64byte的时候才能读取成功,大于的时候就不行,SD卡每个扇区大小为512byte,也就是说每读一个扇区要分成8次DMA的传输才能完成,请问是我哪里配置不对吗?还是SD卡控制器通过DMA确实每次只能获取FIFO大小的数据?

user4755476:

下面是我的DMA的参数配置和启动的代码:
stEdma3CcPaRamEntry stPaRamEntry;memset(&stPaRamEntry, 0, sizeof(stEdma3CcPaRamEntry));stPaRamEntry.option = (1<<20)|(EDMA0_MMCSD0RX_CHANNEL<<12)|(1<<2);stPaRamEntry.srcAdrr = MMCSD0_DRR;stPaRamEntry.aCnt = 4;stPaRamEntry.bCnt = 16;stPaRamEntry.destAddr = (uint32_t)data;stPaRamEntry.srcBIdx = 0;stPaRamEntry.destBIdx = 4;stPaRamEntry.linkAddr = 0xFFFF;stPaRamEntry.bCntReload = 0;stPaRamEntry.srcCIdx = 0;stPaRamEntry.destCIdx = 64;stPaRamEntry.cCnt = len/64;
Edma30SetCcPaRam(EDMA0_MMCSD0RX_CHANNEL, &stPaRamEntry);
M_EDMA30CC_GC_ESR = 1 << EDMA0_MMCSD0RX_CHANNEL;
while(!(M_EDMA30CC_GC_IPR&(1<<EDMA0_MMCSD0RX_CHANNEL))){}M_EDMA30CC_GC_ICR |= (1<<EDMA0_MMCSD0RX_CHANNEL);

其中data是数据指针,len要读取的长度,调试时为512

Shine:

FIFOLEV满了会产生EDMA事件,此时DMA读到的就是FIFO大小的数据。
The FIFO includes logic to generate EDMA events and interrupts based on the amount of data in the FIFO

user4755476:

回复 Shine:

也就是说DMA size不能大于FIFO的大小是吗?

user4755476:

回复 Shine:

请问如何让其读完一次FIFO大小的数据后等第二次FIFO满了继续读呢,而不需要手动触发?

赞(0)
未经允许不得转载:TI中文支持网 » 通过DMA读写SD卡数据的一个问题
分享到: 更多 (0)