主题 : Mini2440 SDcard驱动为什么不支持DMA模式 复制链接 | 浏览器收藏 | 打印
Just do it
级别: 侠客
UID: 2754
精华: 4
发帖: 66
金钱: 2435 两
威望: 873 点
综合积分: 212 分
注册时间: 2008-12-07
最后登录: 2016-04-13
楼主  发表于: 2009-07-26 19:51

 Mini2440 SDcard驱动为什么不支持DMA模式

如果将host->dodma设置为1,启动DMA模式传输数据
在/sdcard    下找不到任何东西 /proc/devices中也查找不到相应的设备
从打印的信息看,命令发送基本是正常的

7>mmc0: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0 timing 0
<6>s3c2440-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz).
<7>mmc0: clock 197753Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0 timing 0
<6>s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).
<7>mmc0: clock 197753Hz busmode 1 powermode 2 cs 1 Vdd 21 width 0 timing 0
<6>s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).
<7>mmc0: starting CMD0 arg 00000000 flags 000000c0
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #1 op:0 arg:0x00000000 flags:0x08c0 retries:0 R0:0x00000000
<7>mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000
<7>mmc0: clock 197753Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0 timing 0
<6>s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).
<7>mmc0: starting CMD8 arg 000001aa flags 000002f5
<7>s3c2440-sdi s3c2440-sdi: CMDSTAT: error CMDTIMEOUT
<3>s3c2440-sdi s3c2440-sdi: CMD[ERR -110] #2 op:8 arg:0x000001aa flags:0x082f5 retries:0 Status:nothing to complete
<7>mmc0: req done (CMD8): -110: 00000000 00000000 00000000 00000000
<7>mmc0: starting CMD5 arg 00000000 flags 000002e1
<7>s3c2440-sdi s3c2440-sdi: CMDSTAT: error CMDTIMEOUT
<3>s3c2440-sdi s3c2440-sdi: CMD[ERR -110] #3 op:5 arg:0x00000000 flags:0x082e1 retries:3 Status:nothing to complete
<7>mmc0: req failed (CMD5): -110, retrying...
<7>s3c2440-sdi s3c2440-sdi: CMDSTAT: error CMDTIMEOUT
<3>s3c2440-sdi s3c2440-sdi: CMD[ERR -110] #4 op:5 arg:0x00000000 flags:0x082e1 retries:2 Status:nothing to complete
<7>mmc0: req failed (CMD5): -110, retrying...
<7>s3c2440-sdi s3c2440-sdi: CMDSTAT: error CMDTIMEOUT
<3>s3c2440-sdi s3c2440-sdi: CMD[ERR -110] #5 op:5 arg:0x00000000 flags:0x082e1 retries:1 Status:nothing to complete
<7>mmc0: req failed (CMD5): -110, retrying...
<7>s3c2440-sdi s3c2440-sdi: CMDSTAT: error CMDTIMEOUT
<3>s3c2440-sdi s3c2440-sdi: CMD[ERR -110] #6 op:5 arg:0x00000000 flags:0x082e1 retries:0 Status:nothing to complete
<7>mmc0: req done (CMD5): -110: 00000000 00000000 00000000 00000000
<7>mmc0: starting CMD55 arg 00000000 flags 000000f5
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #7 op:55 arg:0x00000000 flags:0x08f5 retries:0 R0:0x00400120
<7>mmc0: req done (CMD55): 0: 00400120 4f000000 00000000 00000000
<7>mmc0: starting CMD41 arg 00000000 flags 000000e1
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #8 op:41 arg:0x00000000 flags:0x08e1 retries:0 R0:0x00ff8000
<7>mmc0: req done (CMD41): 0: 00ff8000 ff000000 00000000 00000000
<7>mmc0: clock 197753Hz busmode 1 powermode 2 cs 0 Vdd 20 width 0 timing 0
<6>s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).
<7>mmc0: clock 197753Hz busmode 1 powermode 2 cs 1 Vdd 20 width 0 timing 0
<6>s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).
<7>mmc0: starting CMD0 arg 00000000 flags 000000c0
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #9 op:0 arg:0x00000000 flags:0x08c0 retries:0 R0:0x00ff8000
<7>mmc0: req done (CMD0): 0: 00ff8000 ff000000 00000000 00000000
<7>mmc0: clock 197753Hz busmode 1 powermode 2 cs 0 Vdd 20 width 0 timing 0
<6>s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).
<7>mmc0: starting CMD8 arg 000001aa flags 000002f5
<7>s3c2440-sdi s3c2440-sdi: CMDSTAT: error CMDTIMEOUT
<3>s3c2440-sdi s3c2440-sdi: CMD[ERR -110] #10 op:8 arg:0x000001aa flags:0x082f5 retries:0 Status:nothing to complete
<7>mmc0: req done (CMD8): -110: 00ff8000 ff000000 00000000 00000000
<7>mmc0: starting CMD55 arg 00000000 flags 000000f5
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #11 op:55 arg:0x00000000 flags:0x08f5 retries:0 R0:0x00400120
<7>mmc0: req done (CMD55): 0: 00400120 4f000000 00000000 00000000
<7>mmc0: starting CMD41 arg 00300000 flags 000000e1
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #12 op:41 arg:0x00300000 flags:0x08e1 retries:0 R0:0x00ff8000
<7>mmc0: req done (CMD41): 0: 00ff8000 ff000000 00000000 00000000
<7>mmc0: starting CMD55 arg 00000000 flags 000000f5
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #13 op:55 arg:0x00000000 flags:0x08f5 retries:0 R0:0x00000120
<7>mmc0: req done (CMD55): 0: 00000120 83000000 00000000 00000000
<7>mmc0: starting CMD41 arg 00300000 flags 000000e1
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #14 op:41 arg:0x00300000 flags:0x08e1 retries:0 R0:0x80ff8000
<7>mmc0: req done (CMD41): 0: 80ff8000 ff000000 00000000 00000000
<7>mmc0: starting CMD2 arg 00000000 flags 00000067
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #15 op:2 arg:0x00000000 flags:0x0867 retries:3 R0:0x0020204e
<7>mmc0: req done (CMD2): 0: 0020204e 2f412020 1067dd59 2d0084bd
<7>mmc0: starting CMD3 arg 00000000 flags 00000075
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #16 op:3 arg:0x00000000 flags:0x0875 retries:3 R0:0x00020520
<7>mmc0: req done (CMD3): 0: 00020520 23412020 1067dd59 2d0084bd
<7>mmc0: clock 197753Hz busmode 2 powermode 2 cs 0 Vdd 20 width 0 timing 0
<6>s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).
<7>mmc0: starting CMD9 arg 00020000 flags 00000007
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #17 op:9 arg:0x00020000 flags:0x087 retries:3 R0:0x006f0032
<7>mmc0: req done (CMD9): 0: 006f0032 5f5980f1 f6dbdfff 8a40402f
<7>mmc0: starting CMD7 arg 00020000 flags 00000015
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #18 op:7 arg:0x00020000 flags:0x0815 retries:3 R0:0x00000700
<7>mmc0: req done (CMD7): 0: 00000700 755980f1 f6dbdfff 8a40402f
<7>mmc0: starting CMD55 arg 00020000 flags 00000095
<7>s3c2440-sdi s3c2440-sdi: CMD[OK] #19 op:55 arg:0x00020000 flags:0x0895 retries:0 R0:0x00000920
<7>mmc0: req done (CMD55): 0: 00000920 335980f1 f6dbdfff 8a40402f
<7>mmc0: starting CMD51 arg 00000000 flags 000000b5
<7>mmc0:     blksz 8 blocks 1 flags 00000200 tsac 100 ms nsac 0
这个打印信息和设置host->dodma=0差不多,不知道为什么不能支持DMA模式?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-07-27 10:09
MMC/SD Host的DMA模式只是用于数据传输命令(read/write single block, read/write multiple block ...), 对于卡初始化阶段的这些不涉及数据传输的命令来说其流程几乎是一样的。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
Just do it
级别: 侠客
UID: 2754
精华: 4
发帖: 66
金钱: 2435 两
威望: 873 点
综合积分: 212 分
注册时间: 2008-12-07
最后登录: 2016-04-13
2楼  发表于: 2009-07-27 10:15
恩,命令的发送不是通过DMA,我只是为了说明通过命令的设置sdcard处于数据传输模式了,我想知道的是为什么用DMA来传输数据不成功,而FIFO可以
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2009-07-27 10:20
引用第2楼jeefjiang于2009-07-27 10:15发表的  :
恩,命令的发送不是通过DMA,我只是为了说明通过命令的设置sdcard处于数据传输模式了,我想知道的是为什么用DMA来传输数据不成功,而FIFO可以

没有人猜的出来,只有自己实际去试了才知道DMA传输在什么地方异常了
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."