3330|9

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince sd卡 驱动的问题,原来是好的,我改动之后不行了,前辈们看下。 [复制链接]

我之前做wince的128M sdram的支持的时候 由于对OEMAddressTable做了修改,后面的地址集体后移了,所以在初始化硬件的时候,将没有启用cache时候的高端地址也做了偏移,现在sdram好了 别的外设都正常,唯独sd不能识别。

我看到sd的地址定义就是个
#define MMC_BACE        0xB5A00000 // 0x5A000000  0xB1A00000
//原来映射到 0xB1A00000 (无cache)对应的是 0x91A00000(有cache),现在有cache是0x95A00000,所以映射到0xB5A00000
#define MMC_BASE        0xB5A00000 // 0x5A000000

typedef struct {
                unsigned int           rSDICON;
                unsigned int           rSDIPRE;
                unsigned int           rSDICMDARG;
                unsigned int           rSDICMDCON;
                unsigned int           rSDICMDSTA;
                unsigned int           rSDIRSP0;
                unsigned int           rSDIRSP1;
                unsigned int           rSDIRSP2;
                unsigned int           rSDIRSP3;
                unsigned int         rSDIDTIMER;
                unsigned int        rSDIBSIZE;
                unsigned int         rSDIDATCON;
                unsigned int        rSDIDATCNT;
                unsigned int        rSDIDATSTA;
                unsigned int        rSDIFSTA;
                unsigned int        rSDIDAT;
                unsigned int        rSDIINTMSK;
} MMCreg;

我现在插入sd只有
charlie::Prescale for Real clock rate = 668, pRate:100000
Card inserted
SDCSDSlotOptionHandler:0x1
BUS Width 1Bit
charlie::Prescale for Real clock rate = 668, pRate:100000
CMD:5,0x0

我觉得中断什么的地址都映射正确了,因为别的外设都是好的,唯独sd不可以。

最新回复

---------------高手,学习ing!  详情 回复 发表于 2008-9-4 14:24
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
正常的启动是这样的 是我用 原先厂家的核心板


charlie::Prescale for Real clock rate = 156, pRate:100000
Card inserted
SDCSDSlotOptionHandler:0x1
BUS Width 1Bit
charlie::Prescale for Real clock rate = 156, pRate:100000
CMD:5,0x0
SD_API_STATUS_CMD_RESPONSE_TIMEOUT
BusRequestHandler Error - command:0x05
CMD:5,0x0
SD_API_STATUS_CMD_RESPONSE_TIMEOUT
BusRequestHandler Error - command:0x05
CMD:5,0x0
SD_API_STATUS_CMD_RESPONSE_TIMEOUT
BusRequestHandler Error - command:0x05
CMD:5,0x0
SD_API_STATUS_CMD_RESPONSE_TIMEOUT
BusRequestHandler Error - command:0x05
CMD:0,0x0
CMD:1,0x300000
SD_API_STATUS_CMD_RESPONSE_TIMEOUT
BusRequestHandler Error - command:0x01
CMD:1,0x300000
SD_API_STATUS_CMD_RESPONSE_TIMEOUT
BusRequestHandler Error - command:0x01
CMD:1,0x300000
SD_API_STATUS_CMD_RESPONSE_TIMEOUT
BusRequestHandler Error - command:0x01
CMD:1,0x300000
SD_API_STATUS_CMD_RESPONSE_TIMEOUT
BusRequestHandler Error - command:0x01
CMD:55,0x0
Card status error:0x400120,CMD:55
CMD:41,0x0
SDCSDSlotOptionHandler:0x0
SDCSDSlotOptionHandler - called - SetSlotPower : 0x00100000  
CMD:0,0x0
CMD:55,0x0
CMD:41,0x100000
CMD:55,0x0
CMD:41,0x100000
CMD:2,0x0
CMD:3,0x0
CMD:9,0x879b0000
CMD:13,0x879b0000
CMD:7,0x879b0000
CMD:55,0x879b0000
CMD:51,0x0
CMD:55,0x879b0000
CMD:42,0x0
SDCSDSlotOptionHandler:0x5
SDCSDSlotOptionHandler - called - SDHCDGetWriteProtectStatus : on slot 0  
CMD:55,0x879b0000
CMD:6,0x2
SDCSDSlotOptionHandler:0x1
BUS Width 4Bit
charlie::Prescale for Real clock rate = 4, pRate:25000000
CMD:16,0x200
CMD:17,0x0
CMD:17,0x1fe00
CMD:17,0x0
CMD:17,0x1fe00
CMD:17,0x20000
CMD:17,0x3e000
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你的sd卡驱动是没有源码的3个dll吧?不重新编译,你只改了头文件定义应该没有用,sd卡的映射地址不要改了,还是想办法改OEMAddressTable从前面挤出一点空间来.其实前几个存储bank如果没有接东西,完全没必要32M的
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
现在:charlie::Prescale for Real clock rate = 668, pRate:100000
原来:charlie::Prescale for Real clock rate = 156, pRate:100000

这个已经有差异了,先看看怎么回事。

你可以插上SD卡,在eboot下,对其读写,看看能不能用。这样程序简单,更容易看出问题。
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 Reallyu 的回复:
你的sd卡驱动是没有源码的3个dll吧?不重新编译,你只改了头文件定义应该没有用,sd卡的映射地址不要改了,还是想办法改OEMAddressTable从前面挤出一点空间来.其实前几个存储bank如果没有接东西,完全没必要32M的


前辈 我按照你说的 进行了改动 我把bank4,5映射到最后的地方,然后把sdram的地址提前,然后我又改了config.bib里面的相关内容,对应现在的sdram地址,可是现在启动不起来了。 不知道还有什么地方需要修改呢
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
启动不来应该OEMAddressTable改错了,其实你不需要改动太大,在原来的能启动但SD卡不能用的基础上,把SD卡的虚拟地址改回到 0xB1A00000 把占用了这个位置的设备和SD卡调换一下,然后改掉头文件的相应定义,重新编译一下.具体你看着办,其他的虚拟地址可以随便改,只要和头文件里面对应,但是SD卡驱动因为没有源代码所以虚拟地址不要改.
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 Reallyu 的回复:
启动不来应该OEMAddressTable改错了,其实你不需要改动太大,在原来的能启动但SD卡不能用的基础上,把SD卡的虚拟地址改回到 0xB1A00000 把占用了这个位置的设备和SD卡调换一下,然后改掉头文件的相应定义,重新编译一下.具体你看着办,其他的虚拟地址可以随便改,只要和头文件里面对应,但是SD卡驱动因为没有源代码所以虚拟地址不要改.


老大你说的对着呢,sd 我只有映射到这个地方才可以。

可是现在的问题是这么样子的。我要用128M的sdram它从0x8c000000 开始 128M 之后已经覆盖了sd寄存器的地址,所以我才将外设驱动的地址都后移了,别的外设都可以,就sd就像您说的没有驱动,只要换个地址就不行。

我早上按照你一开始的方法做的,就是sdram区域上移,把上面的空间映射到最后,这样外设的地址就不用变了,可是... 我靠 我发现改的地方真多,改动量太大了,吐了2次血也没有把系统跑起来。

按照你说的,我现在只能是和我sdram牵扯的东西太多了,我不想动了。

我现在想两个办法看可行不:
1 我把物理上本身连续的地址映射成2段 (咋做我不会呢还)
2 我网上下个sd驱动,看能改好不


我才做wince一个月,原来是做linux,linux下只有你不想看,没有你看不见的,我靠这wince真担任,半遮半露的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
1方法应该比较简单,比如sdram映射成2段,除了修改OEMaddresstable 还要在个大概叫OEMGetExtentionSDRAM的函数里面报告一下另一段sdram的虚拟地址
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 Reallyu 的回复:
1方法应该比较简单,比如sdram映射成2段,除了修改OEMaddresstable 还要在个大概叫OEMGetExtentionSDRAM的函数里面报告一下另一段sdram的虚拟地址




OK!!! 就是这个 很简单就搞定了 还有就是在 config.bib 中打开 AUTOSIZE 就好了 多谢
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 Reallyu 的回复:
1方法应该比较简单,比如sdram映射成2段,除了修改OEMaddresstable 还要在个大概叫OEMGetExtentionSDRAM的函数里面报告一下另一段sdram的虚拟地址


---------------高手,学习ing!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表