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

[复制链接]
 楼主| alphal 发表于 2008-6-15 18:16 | 显示全部楼层 |阅读模式
我现在做LPC2378的GPDMA驱动程序,连续地址(即Channel&nbsp;Linked&nbsp;List&nbsp;Item&nbsp;Registers&nbsp;(DMACCxLLI)等于0)时,测试了内存到内存的DMA传输,没有问题.[只发生一次中断就传输完成]<br />现有一个经测试没有问题的SD卡驱动程序,我把这个程序改成用GPDMA实现.<br />初步尝试用GPDMA方式读SD卡,发现程序最多只能读出64byte字节(SD/MMC&nbsp;FIFO的大小),而我希望能读任意字节.感觉对DMA的原理似乎也不太清楚,有些地方比较迷糊,特来请教:<br />1.SD/MMC的FIFO是64byte的连续空间,我配置GPDMA通道的时候,是不是需要用分散地址,即需要配置LLI表?因为读外设的时候,源地址不是连续的,一直都是读一个32byte的数组(half&nbsp;Fifo).<br />2.这个表如何建?好像除第一个Linked&nbsp;List,后面源地址,目标地址,配置都是一样的,那LLI都指向第二个就可以了?<br />3.如果不是用分散地址,GPDMA的中断是每32byte产生(假如brust&nbsp;size配置为32)?中断服务函数中需要进行哪些操作,才能使它能持续的将数据读完?我现在就是只能进中断一次,读出32/64byte,后面的数据没法读完了.<br />4.GPDMA里的brust(并发?)传输和single传输是什么意思?有什么区别?<br />5.burst&nbsp;size什么意思?我用的时候好像配置成8,16,32对传输结果没什么影响,只是TransferSize决定要传多少数据.而且最好配置为外设FIFO的一半,为什么?<br />.........<br /><br />不好意思,比较乱,不懂的地方太多了,总之就是我的GPDMA程序用在SD卡读写的时候出问题了,尤其不知道DMA完成32*N字节的传输是一次搞定还是中断多次,中断中如何配置等等....<br /><br />先行谢过,若那位好心人,能提供一点DMA的资料或DMA&nbsp;SD卡驱动程序参考一下最好了,我手头只有一个LPC2378的user&nbsp;manual,比较麻烦,没有的帮忙顶一下也成...<br />
l0p0c 发表于 2008-6-15 21:04 | 显示全部楼层

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

首先查询SD卡寄存器里面的内容,看看卡的属性。<br /><br />其次是写,写的时候卡默认的按块写入,块的大小为0x200,即512Bytes。因此,写入必须严格按照地址对其和大小。<br /><br />再就是读,读的时候限制没有写那么严格,大小可以随意点。具体查看数据手册。但还是要注意地址对其的问题。<br /><br />还是建议查看使用手册,英文的,很详细。
 楼主| alphal 发表于 2008-6-15 22:04 | 显示全部楼层

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

谢谢楼上的指点!<br /><br />我的疑惑是:<br />我对SD进行读写,比如操作512字节,在SD卡程序中是在fifo中断中读FIFO寄存器数据,直到dataEnd中断产生.<br />而我用GPDMA方式的时候,只能在GPDMA中断时读出32或64byte数据,不会再产生下次中断了,我想是我的配置有问题,但我还不知道要怎样配置,才能让它能持续中断,直到全部数据读完,或者需要在中断服务函数中进行什么样的操作.或者像我上面说的,需要用LLI分散地址方式....<br /><br />我现在只有一个user&nbsp;manual,对于GPDMA的介绍感觉不够详细,比较麻烦...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

473

帖子

1

粉丝

112

主题

473

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部