阅读:2988回复:19
2440的SD MMC卡驱动
我将2440的SD MMC卡驱动写成了Block的形式驱动能够加载,能够保存文件,能够格式化,但是现在存在一个问题,就是我使用CE操作系统读写格式化都正常,但是拿到PC下面就不能够识别,经过相关工具的分析发现SD卡的BLOCK0里面的MBR与PC下面的不一样,有没有人遇到过这样的问题如果有,能够提供相应的解决办法?
要使实在不行就只能写成SDIO形式的了呵呵! thanks! |
|
沙发#
发布于:2007-05-28 11:48
加一下个人的理解,
本身CE对于存储管理驱动分为 设备驱动 我们所写的块驱动 分区驱动 默认为mspart.dll 文件驱动 fatfsd.dll 本来我这儿的2440的SD驱动是好用的呵呵,可是我觉得如果要是用SDIO读写的方式有些慢 所以就突发奇想自己写了一个BLOCK方式的Driver挂到2440的系统上面,可能是对于BLOCK方式的驱动理解得还不够透彻把,虽然文件什么的也都能保存也都能格式话但是与左面PC的不兼容,我觉得就是分区驱动出现了问题 我的 IOCTL_DISK_GETINFO:与DISK_IOCTL_GETINFO:返回的结构类型为 pDiskInfo->di_cylinders=0; pDiskInfo->di_heads=0; pDiskInfo->di_sectors=32; pDiskInfo->di_total_sectors=m_Size; pDiskInfo->di_flags=DISK_INFO_FLAG_MBR; 也没有错误啊,可是就是跟PC的MBR有些不太一样!感觉这个问题很怪,想了两天也想不通。 |
|
板凳#
发布于:2007-05-28 11:56
顺便说一些,如果这个可以了,那么就可以将我的驱动变成一个lib给BootLoader使用
呵呵,到时候本身我使用SDMMC卡更新内核就会容易得多,只要将nk.nb0放到SD卡里面就可以了,而使用SDIO方式这么做有太多太多的弊端了,呵呵。 所以这么做还是很有意义的,有兴趣的人跟我讨论一下吧, |
|
地板#
发布于:2007-05-28 16:19
我觉得MBR不一样应该没啥关系啊,不同的操作系统格式化出来的MBR都不太一样啊。只要DPT部分还有DBR没有错误就好了。
|
|
地下室#
发布于:2007-05-28 16:32
bootloader从SD卡上更新NK内核早就做过了,而且bootloader不在PB环境下编译,做成ADS1.2项目,具备EBOOT的功能,除了ethernet功能外。不但内核,连bootloader自己,nboot都从SD卡上更新,而且还可以直接启动放在SD卡上的NK.NB0.其实这个想法早就有人付诸实施了。bootloader需要具备FATFS加载,SD卡访问。不过我用的是SDIO方式,不明白用BLOCK有什么好处?具体是个什么意思?
|
|
5楼#
发布于:2007-05-28 17:48
引用第0楼no.killer于2007-05-28 11:29发表的 2440的SD MMC卡驱动 : 兄弟。你的2440下SD卡驱动的读写是怎么实现的? 我现在修改,2410的,读写老出问题。 中断起不起来, 谢谢。。 |
|
|
6楼#
发布于:2007-05-28 19:11
1。微软那三个DLL支持1G以上的卡吗?
2。开机的读写速度能做得很快吗? 3。如果为MMC卡直接读BLOCK的速度是很快的阿,读写30M只需要3秒左右,SDIO做不到吧。 to rilyyu and zhengshijie 能说得更加具体一些吗? 例如如果我需要设置正确的驱动也就是能让PC识别我格式化以后的卡我都需要做哪些工作,应该注意的是注册表,还是需要更改我驱动里面的某些参数。 非常感谢你的回答,谢谢 这个问题困扰了我很长时间 |
|
7楼#
发布于:2007-05-28 23:41
这个我就不知道了,以前做过eboot下sd卡更新内核,sdio方式,应该不能叫sdio吧,关于这个我没有仔细看过协议,只是看了个物理层协议,写了个读扇区的函数.还要请教下sdio方式和你说的block方式在底层下有没有什么区别.fat部分也是自己写的,很简单只有读的功能.当时我用xp,2000以及ce等系统格式化卡然后用winhex查看,MBR基本没有相同的,甚至不同版本xp格式化的卡MBR都不相同.当然我说的都是fat16.也许你应该找个fat16的说明,看看你的卡是否被正确格式化为fat16了.
不过我的那种方式确实没法做到读30M只要3″,也就1MB/s的速度.这点一直让我很迷惑.还请教. |
|
8楼#
发布于:2007-05-29 16:24
.....................
找到原因了 原因那就是我写入了倒32位的数据 例如应该是0000000000001 我写的是100000000000 我读些都反了所以数据就只能我写的驱动能够识别了呵呵,比较郁闷 谢谢rilyy啊,要不是你提醒我也不会发现MBR最后那个55 AA原来我写成了AA 55 呵呵哎郁闷阿 |
|
9楼#
发布于:2007-05-29 17:32
恭喜楼主,楼主的驱动可以用来做sd卡加密,呵呵
|
|
10楼#
发布于:2007-05-30 11:22
我这里用2440IO模式读写SD卡也碰到了问题。。。
在网上下的2410的block模式sd卡驱动,参照2440的datasheet改的,另外还参考了5.0的BSP。 现在卡能认出来,CSD寄存器也能正确读出啦,就是数据读写不行,老是出现fifo error。。。 请各位大虾指点一下数据传输时的寄存器设置,看看是不是有问题,我现在的设置是 rSDIFSTA |= (1 << 16); // fifo reset rSDIFSTA &= 0xc000; // clear error status rSDIBSIZE = 0x200; // set block size rSDIDATCON=(1<<22)|(1<<19)|(1<<17)|(Wide<<16)|(1<<14)|(2<<12)|(1<<0); // read sector rSDICMDSTA = 0x1E00; // clear any pending status flags rSDICMDARG = addr; //CMD17/18(addr) rSDICMDCON=(0x1<<11)|(0x1<<9)|(0x1<<8)|0x51; //sht_resp,wait_resp,data,start,CMD17 |
|
11楼#
发布于:2007-05-30 12:31
把Debug信息貼上來,
別人才能分析。 |
|
|
12楼#
发布于:2007-05-30 17:22
我跟本就不在PB下编译,自己作的ADS1.2项目,微软的驱动当然能支持1G以上的SD卡了,最高到2G,阁下何以得到读30M只要3秒钟的结果。怎么算出来的。
|
|
13楼#
发布于:2007-05-30 17:29
跟阁下探讨一下,MMC卡的驱动最高支持20MHz,算你按4BIT访问,一个字节需要两个时钟周期,20MHz,就要除以2,10MHz,而你30M只要3秒钟,已经达到了理论极限值,你觉得可能吗?
|
|
14楼#
发布于:2007-05-30 18:03
引用第12楼zhengshijie于2007-05-30 17:22发表的 : 是不是2G以上的卡,微软提供的框架就支持不了了? 我用的是4G的, 能建文件夹,但是相当慢. 建完后在PC 下不能识别. 什么原因知道不?兄弟. 谢谢. |
|
|
15楼#
发布于:2007-06-20 18:45
我现在也在为这问题烦呢,我的sd卡其他都还好,就是有的卡检测速度特别慢,得7、8秒才能显示出检测到的sd卡的文件目录,可有的卡又还是比较快的,实在想不明白问题出在哪???
关注。。。。。。 |
|
16楼#
发布于:2007-06-21 08:39
是不是你收发命令和相应命令中间的延迟太大?
修改小点试试。。 |
|
|
17楼#
发布于:2007-07-24 22:38
to no.killer
|
|
|
18楼#
发布于:2007-07-24 22:38
to no.killer
能不能拿出来共享一下?也想研究下。 |
|
|
19楼#
发布于:2007-10-11 00:16
no.killer
这样不够上道,大伙再等你贴出来分享…顶~~ |
|