PXA270,windows CE5.0下读取MMC/SD卡的硬件ID问题.

alexu2002 2007-01-23 10:30:49
各位大虾好:
我用VirtualAlloc,VirtualCopy影射了PXA270的关于SD/MMC的硬件寄存器的物理地址,想这样通过发送指令CMD2来获得卡的128位的唯一ID.目前情况为: 物理地址已经成功映射.但是发送了指令后,等待SD/MMC响应指令的中断,一直等不到中断位置位.一直搞不定.个人怀疑,可能是CE的SD/MMC的驱动程序在我的程序操作硬件的的时候,也在操作.
大虾分析下什么原因,有没有能够使我独占这份资源的方法?还是其他原因?

谢谢
...全文
884 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
su_wy9901 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 alexu2002 的回复:]

我贴下代码吧,高手诊断下,谢谢啦
pMMCReg-> rMMC_CLKRT = 0x00000006;

pMMCReg-> rMMC_CMD = 0x00000002;//cmd2
pMMCReg-> rMMC_ARGH = 0;
pMMCReg-> rMMC_ARGL = 0;

pMMCReg-> rMMC_CMDAT = CMDAT_RESP_R2;

pMMCReg-> rMMC_I_MASK = ~END_CMD_RES;
pMMCReg-> rMMC_STRPCL = 2;//运行到这里程序就死掉了…
[/Quote]



pMMCReg-> rMMC_STRPCL = 2;
把上面这行代码去掉,前面停CLOCK的代码也去掉
让MMC 的CLOCK在你对卡作操作的时候一直保持,不要停

如果还是不行,可以把MMC_I_REG,和MMC_STAT两个寄存器的值读出来看看有什么问题
tayosoft 2007-02-11
  • 打赏
  • 举报
回复
可以用API函数的,API函数有个好处就是不需要分是SD卡还是MMC卡,如果你直接操作寄存器的话需要细分你插入的是SD卡还是MMC卡,在使用CMD2之前两个卡的初始化是不相同的,所以CMD2命令可能你不能成功的。
alexu2002 2007-02-07
  • 打赏
  • 举报
回复
找了好几遍了,没有这样的api啊
alexu2002 2007-02-06
  • 打赏
  • 举报
回复

我贴下代码吧,高手诊断下,谢谢啦
pMMCReg->rMMC_CLKRT = 0x00000006;

pMMCReg->rMMC_CMD = 0x00000002;//cmd2
pMMCReg->rMMC_ARGH = 0;
pMMCReg->rMMC_ARGL = 0;

pMMCReg->rMMC_CMDAT = CMDAT_RESP_R2;

pMMCReg->rMMC_I_MASK = ~END_CMD_RES;
pMMCReg->rMMC_STRPCL = 2;//运行到这里程序就死掉了,系统也死掉了

while( !(pMMCReg->rMMC_I_REG & (1<<2)) );//wait for end_cmd_res

for( i = 0; i < 8; i ++ )
{
resp[i] = pMMCReg->rMMC_RES & 0x0000ffff;
}
slyzhang 2007-02-06
  • 打赏
  • 举报
回复
为了获得ID 不需要这么做吧,一般的SD卡驱动程序已经包含了这样的命令了, 你只需要调用WinCE标准的API既可以获得SD的硬件ID.

看看 Help 钟关于 Storage 的相关的 API.


shofar 2007-02-01
  • 打赏
  • 举报
回复
具个例子:
///////////////////////////////////////////////////////////////////////////////
// SDClockOn - turn on the MMC Clock
// Input: pHc - hardware context
// Output:
// Return:
// Notes:
///////////////////////////////////////////////////////////////////////////////
VOID SDClockOn(PSDH_HARDWARE_CONTEXT pHc)
{
// RETAILMSG(1, (TEXT("-->SDClockOn\r\n")));
// turn on the clock
WRITE_MMC_REGISTER_DWORD(pHc, MMC_STRPCL, MMC_STRPCL_START_CLOCK);
}
shofar 2007-02-01
  • 打赏
  • 举报
回复
看一下pxa270的datasheet就知道了.
shofar 2007-02-01
  • 打赏
  • 举报
回复
setmem 0x41100000,0x00000002,32 //start the mmclk
alexu2002 2007-01-25
  • 打赏
  • 举报
回复
如果有这样的API,我也不会这样郁闷了。这位高人是否有wince的关于PXA270的SD/MMC驱动?参考以下?
TheGameIsFives 2007-01-25
  • 打赏
  • 举报
回复
我感觉应用程序里面应该直接调用API访问好一点,找找看看有没有可以用的API?
如果像你说的那样自己影射寄存器,最好还是在驱动里面做
alexu2002 2007-01-25
  • 打赏
  • 举报
回复
我面对的是PDA手机,不可能接触到驱动那一层的,我只能在应用层做这些事情
TheGameIsFives 2007-01-25
  • 打赏
  • 举报
回复
看一下驱动代码,只要你的操作驱动支持就可以的。
alexu2002 2007-01-24
  • 打赏
  • 举报
回复
怎么没人帮忙啊?自顶

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧