cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
阅读:4308回复:18

wince下s3c2440的SD卡的问题

楼主#
更多 发布于:2007-01-08 05:05
  自己做了片s3c2440的新板,移植了个wince核,屏及触摸屏都正常,怎么就是找不到SD卡,我用人家的移植的wince核都找得到,硬件是绝对没有问题的。我的板子没有使用norflash启动,nandflash-64M,SDRAM-64M,FAT及storage manager下面的SD/MMC组件也加了,请问这大概是什么原因造成的,搞不清楚,急啊,搞了一个多星期了,盼尽快回复啊!!!
SD卡插入及拔出的时候串口都是出现以下代码:
ARMINT.C - SYSINTR_SDMMC_CARD_DETECT rEINTMASK = 0x      20, s2440IOP->rEINTMASK
ARMINT.C - SYSINTR_SDMMC_CARD_DETECT rEINTPEND = 0x     100, s2440IOP->rEINTPEND
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
Card ejected
::: SYSINTR_SDMMC_CARD_DETECT    OEMInterruptDone
NAND Flash烧录器|烧写器|编程器
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
沙发#
发布于:2007-01-08 21:49
在控制面板程序中的存储管理能看到SD DISK吗?如果可以,说明硬件已经检测到了,只是SD卡读写有问题,所以不能mount文件系统,在根目录下看不到SD卡文件夹。
你用什么版本的WINCE?4.2还是5.0。 5.0是有SD卡驱动源码的。
cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-08 23:32
谢谢楼上的回复哈,我用PB4.2,控制面板的stroage manager里边看不到这个东西,真是怪啊,本以为这个驱动是最好加的,搞了一个多星期了,没进展啊。
NAND Flash烧录器|烧写器|编程器
chrisyang
驱动牛犊
驱动牛犊
  • 注册日期2007-01-09
  • 最后登录2007-12-04
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-09 11:26
你每次插卡进去驱动响应的都是card ejected这个事件,这个应该和你的触发IO口的电平有关系,看看你的oal里面用的是什么io口作中断口,用示波器测一下,插卡进去和拔卡出来确保你的卡槽中断IO脚是否有电平变化。
如果有的话,检查一下你的oal所用的触发io与你的驱动库的io口是否一致。我见过的bsp包smdk2440有些是用EINT16/GPG8,有些是用EINT18/GPG10。
cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-09 17:04
感谢楼上的回复,你的驱动库的I/O定义,是不是指的\WINCE420\PUBLIC\COMMON\OAK\DRIVERS\BLOCK\SDMMC下面的代码,我看了,确实是用的EINT16,我修改成了eint18,还是不行。硬件是肯定没有问题的,硬件也一直用的EINT18,我用人家一直的一个内核都行,有点晕啊。估计是cfc.c文件的里边的问题了。这个是和nand flash或nor flash启动应该是没有关系的吧,开发板用到了norflash,而我的板子是用的nandflash启动!
NAND Flash烧录器|烧写器|编程器
chrisyang
驱动牛犊
驱动牛犊
  • 注册日期2007-01-09
  • 最后登录2007-12-04
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-10 09:43
如果你确认你的硬件中断IO是连线至EINT18,而你的oal里面用的是EINT16,那么你有五个地方需要修改。分别是cfw.c文件中的:
OEMInterruptEnable,OEMInterruptDisable,OEMInterruptDone,InitSDMMC还有一个地方就是armint.c中的OEMInterruptHandler函数,这五个函数与sd detect有关的外部寄存器和源寄存器等等都要修改。
garywyz
驱动牛犊
驱动牛犊
  • 注册日期2005-11-22
  • 最后登录2007-01-18
  • 粉丝0
  • 关注0
  • 积分183分
  • 威望20点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-11 17:56
楼上的对SD开发狠熟悉诶。我在做SDIO的wince开发,有空请教
cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-01-18 03:34
呵呵,怎么没有人顶啊,大侠们帮们分析一下这是什么原因吧。
NAND Flash烧录器|烧写器|编程器
cool_harber
驱动小牛
驱动小牛
  • 注册日期2003-03-01
  • 最后登录2009-04-28
  • 粉丝0
  • 关注0
  • 积分524分
  • 威望132点
  • 贡献值0点
  • 好评度126点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-01-18 22:20
确认你的文件系统运行没有,FAT特征是否锚定(有没有小倒三角)?
另外硬件上再查查,看看SD卡的上拉电阻之类的有没有问题。
博客:www.cnblogs.com/harber
chrisyang
驱动牛犊
驱动牛犊
  • 注册日期2007-01-09
  • 最后登录2007-12-04
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-01-19 17:42
楼主自己尝试过确认库里面与自己的电路板布线、oal里面所用的中断口是一致的吗?
自己不尝试,别人的指点也是别人的经验,不一定能指出你的问题,你所描述的情况来看
动态库里面所用的io与oal里面用了不一样的io可能性非常大。
你说硬件一直用EINT18,最好的办法是在OEMInterruptHandler里面当GPG10为高电平的时候,你设
GPG8也为高电平,GPG10为低电平的时候也设GPG8为低电平就可测试到了是否有错用不同的io。
chrisyang
驱动牛犊
驱动牛犊
  • 注册日期2007-01-09
  • 最后登录2007-12-04
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-01-19 17:50
忘了说了,你所用的sd驱动库并不一定是所找到sdmmc,你找找看有没有其他的sd驱动库,有些2440所用的驱动库是 BSQUARE公司的,有三个动态库SDCSDCard.dll,SDBusDriver.dll,SDMemory.dll.
看看你的注册表里面是不是注册了上面几个库。听说要源码的话要钱的。所以,祝楼主你好运,早日找到问题症结
cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-01-20 04:38
呵呵,多谢各位的回复哈。我现在改改看看。真是怪的很,各位有没有哪位有使用EINT18的那三个DLL,万分感谢哈。我的邮箱:cygarm@163.com,QQ:250290456
NAND Flash烧录器|烧写器|编程器
orangechl
驱动牛犊
驱动牛犊
  • 注册日期2007-03-12
  • 最后登录2007-05-02
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-03-18 17:18
引用第1楼zhengshijie2007-01-08 21:49发表的“”:
5.0是有SD卡驱动源码的。


我怎么没看到源码?是\wce500\Windows Mobile 5.0 Pocket PC SDK\Include\Armv4i\的sdcard.h和sdcardddk.h吗?
rilyyu
驱动小牛
驱动小牛
  • 注册日期2006-11-17
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分512分
  • 威望130点
  • 贡献值0点
  • 好评度127点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-03-18 21:38
应该是\WINCE500\PUBLIC\COMMON\OAK\CSP\ARM\SAMSUNG\S3C2410X\SDHC吧
你插入和拔出SD卡时串口有输出,应该OAL层的中断是正确的,卡检测中断确实发生了,否则卡检测线程不会执行.
后面出现了这么多::: SYSINTR_SDMMC_CARD_DETECT   OEMInterruptDone
因为没看到代码 我只能猜猜 理论上卡检测到只会执行一次OEMInterruptDone
执行了那么次的OEMInterruptDone有可能是中断状态寄存器没有清除.我没有用三星2410只用过pxa270中断发生后中断发生后中断状态寄存器需要清除,并且要禁止该中断否则OAL可能会认为中断再次发生.这样串口会不停的输出信息,导致系统当机.如果不是这个现象,那我就猜错了.
etermis
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-03-27 11:33
楼主的问题,我也碰到了,我觉得应该是SD卡驱动的问题。
如果是楼上说的中断状态寄存器没有清除的话,应该还会触发OEMInterruptHandler,输出的就是楼主给出的信息里面前两行的内容,但是看起来只有OEMInterruptDone被重复调用,问题应该出在驱动里。
alien75
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2011-07-26
  • 粉丝1
  • 关注0
  • 积分68分
  • 威望163点
  • 贡献值1点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-03-29 15:47
这个问题我也遇到了,我也觉得是驱动程序的问题。刚开始我以为是中断类型的问题,但是在将类型由电平中断改为沿中断,并且在几个地方将寄存器都做了清除,问题依旧。
cygarm
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2013-12-29
  • 粉丝0
  • 关注0
  • 积分649分
  • 威望324点
  • 贡献值0点
  • 好评度62点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-03-29 22:25
这个问题确实困扰了我很久,后面在另外一片开发板上面用EINT16测试了,确实是驱动的问题,但是这个问题我一直没有很明白,难道BSQUARE的三个DLL有不同的版本?,还是这些DLL会去根据我的2440.h定义的一个参数去做什么判断,因为后面去搞其他事情了,所以这个也就暂时没去深入了。反正这种用DLL的东西,有问题有时可能就会一筹莫展,后面有问题大家讨论哈,操作系统的整个开发环境就不得不让我们花太多时间,不象我们的单片机,PC端一按鼠标就立刻download就可以立刻验证我们的成果了。呵,呵,说了些废话哈!
NAND Flash烧录器|烧写器|编程器
etermis
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-03-30 15:30
上午试验了一下,大致摸清楚了这个SD卡驱动的方式。首先它默认的是低电平触发中断,检测到SD卡插入后,就循环检测引脚上的电平,当为高时认为SD卡拔除,中止循环检测,本来也没什么,只是它却把InterruptDone的调用也包含在了循环里,所以才会不断的触发OEMInterruptDone。
alien75
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2011-07-26
  • 粉丝1
  • 关注0
  • 积分68分
  • 威望163点
  • 贡献值1点
  • 好评度3点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-03-31 10:17
呵呵,楼上的是正解。我有点怀疑这种方式的合理性吧,为什么不采用类似pxa的沿中断+阻塞等待+事件触发方式来做呢,这样就不需要不停查询引脚了。以后有时间想把pxa的驱动移植过来试一试 。
游客

返回顶部