现在的位置: 首页 > 综合 > 正文

在cnemd发过的贴,留个标志好查找

2013年10月10日 ⁄ 综合 ⁄ 共 1057字 ⁄ 字号 评论关闭

http://www.cnemb.com/forum/read.php?tid=22811 

 

就发了一个贴,居然就变成优秀会员了,惭愧惭愧。

 

详细内容如下:

2440/win4.2下的sdmmc驱动程序

源代码来自www.arm9bbs.com论坛,是for 2410的,应该是参考了public下的驱动做的。我把它改了一下。主要改动如下:
2410和2440寄存器的不同
1、SD/MMC控制器的rSDIINTMSK和rSDIDAT位置在s2440.h中定义还是照搬2410的,这样造成读rSDIDAT的数据全为0(仅指我的BSP是这样的,如果用那3个DLL是发现不了这个问题的)
2、几个不同的寄存器:FIFO reset由rSDICON换到了rSDIFSTA;rSDIPRE计算公式不一样;
3、INICLK、NORCLK、FCLK、HCLK、PCLK根据实际情况改 
4、根据实际选择GPG10/EINT18或GPG8/EINT16;电平检测引脚;中断方式设置寄存器rEXTINT2  
5、读时候设置rSDIDATCON的BIT22(WORD传送方式)、BIT14(开始传送,和2410定义不同)
写时候设置rSDIDATCON的BIT22(WORD传送方式)、BIT16(4位数据线)和BIT14(开始传送)
SD操作的修改
1、读OCR寄存器的延时变量迭代500次。在我的开发板上太短,改为Sleep(200)比较合适。  
2、读卡信息(CSD)由直接读0扇区。改成读CSD寄存器(CMD9),因为之前已经运行CMD7进入了Transfer状态,CMD9不能在这个状态下运行,需要再次CMD7进入STANDBY状态才能执行。 
3、固定了最大只能访问512MB的卡。改成根据CSD的值计算得出。在计算b3CSizeMult的时候移位计算有问题。

 

 问题:

1、只是小范围测试正常。   
2、当插入一张2GB的卡,根据CSD算出块大小是1024,如果按这个设置(CMD16)在device.exe会出错。想了个歪招:设置块大小还是512,块总数翻倍,读写测试正常,不知道会不会有问题。 2G以下的卡试了几张都是512,不知道是不是都是这样?   
3、读数据是poll方式,不知道改成DMA或者SDIO方式会效果如何?

 

 

这个是以前做手机游戏研究移动梦网时和别人讨论的贴,不过愽主已经把评论给关掉了,可惜我那些回贴了。

http://blog.csdn.net/Mailbomb/archive/2006/04/24/674736.aspx

抱歉!评论已关闭.