打印

求助LPC2378 GPDMA实现SD卡读写的问题....

[复制链接]
3193|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alphal|  楼主 | 2008-6-15 18:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在做LPC2378的GPDMA驱动程序,连续地址(即Channel Linked List Item Registers (DMACCxLLI)等于0)时,测试了内存到内存的DMA传输,没有问题.[只发生一次中断就传输完成]
现有一个经测试没有问题的SD卡驱动程序,我把这个程序改成用GPDMA实现.
初步尝试用GPDMA方式读SD卡,发现程序最多只能读出64byte字节(SD/MMC FIFO的大小),而我希望能读任意字节.感觉对DMA的原理似乎也不太清楚,有些地方比较迷糊,特来请教:
1.SD/MMC的FIFO是64byte的连续空间,我配置GPDMA通道的时候,是不是需要用分散地址,即需要配置LLI表?因为读外设的时候,源地址不是连续的,一直都是读一个32byte的数组(half Fifo).
2.这个表如何建?好像除第一个Linked List,后面源地址,目标地址,配置都是一样的,那LLI都指向第二个就可以了?
3.如果不是用分散地址,GPDMA的中断是每32byte产生(假如brust size配置为32)?中断服务函数中需要进行哪些操作,才能使它能持续的将数据读完?我现在就是只能进中断一次,读出32/64byte,后面的数据没法读完了.
4.GPDMA里的brust(并发?)传输和single传输是什么意思?有什么区别?
5.burst size什么意思?我用的时候好像配置成8,16,32对传输结果没什么影响,只是TransferSize决定要传多少数据.而且最好配置为外设FIFO的一半,为什么?
.........

不好意思,比较乱,不懂的地方太多了,总之就是我的GPDMA程序用在SD卡读写的时候出问题了,尤其不知道DMA完成32*N字节的传输是一次搞定还是中断多次,中断中如何配置等等....

先行谢过,若那位好心人,能提供一点DMA的资料或DMA SD卡驱动程序参考一下最好了,我手头只有一个LPC2378的user manual,比较麻烦,没有的帮忙顶一下也成...

相关帖子

沙发
l0p0c| | 2008-6-15 21:04 | 只看该作者

据我做的SD卡的资料,读写应该注意这几点。

首先查询SD卡寄存器里面的内容,看看卡的属性。

其次是写,写的时候卡默认的按块写入,块的大小为0x200,即512Bytes。因此,写入必须严格按照地址对其和大小。

再就是读,读的时候限制没有写那么严格,大小可以随意点。具体查看数据手册。但还是要注意地址对其的问题。

还是建议查看使用手册,英文的,很详细。

使用特权

评论回复
板凳
alphal|  楼主 | 2008-6-15 22:04 | 只看该作者

现在的问题不在SD卡程序,而在GPDMA的使用,我自己还不太清晰..

谢谢楼上的指点!

我的疑惑是:
我对SD进行读写,比如操作512字节,在SD卡程序中是在fifo中断中读FIFO寄存器数据,直到dataEnd中断产生.
而我用GPDMA方式的时候,只能在GPDMA中断时读出32或64byte数据,不会再产生下次中断了,我想是我的配置有问题,但我还不知道要怎样配置,才能让它能持续中断,直到全部数据读完,或者需要在中断服务函数中进行什么样的操作.或者像我上面说的,需要用LLI分散地址方式....

我现在只有一个user manual,对于GPDMA的介绍感觉不够详细,比较麻烦...

使用特权

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

本版积分规则

112

主题

473

帖子

1

粉丝