阅读:3355回复:16
SD卡初始化完加载不上SDmemory.dll
各位大虾帮忙看看,谢谢了。
下面是错误信息: 0x8ce73100: SDBusDriver: Device Ready, loading driver... 0x8ce73100: DEVICE!RegReadActivationValues RegQueryValueEx(\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class\BusPrefix) returned 2 0x8ce73100: SDMemory: +SMC_Init 0x8ce73100: SDGetDeviceHandle: ActivePath: Drivers\Active\4294967290 0x8ce73100: SDGetClientFunctions: +Init 0x8ce73100: SDGetClientFunctions: -Init 0x8ce73100: SDMemCalcDataAccessClocks: Tpd:f ns, Asynch: f ns, AsyncClocks:0 , SyncClocks: 1078198272, ReadTotal: 0, Write Factor: 1094116192 WriteTotal: 37500 0x8ce73100: SDMemCardConfig: Card indicates unsupported file system (non FAT) 0x8ce73100: SDMemory: Error initialising MemCard structure and card 0x8ce73100: DEVICE!LaunchDevice: Init() failed for device 0x0004c780 0x8ce73100: DEVICE!I_ActivateDeviceEx: couldn't activate: prefix DSK, index 1, dll SDMemory.dll, context 0x622f3c4 0x8ce73100: SDBusDriver: Failed to load driver with path: \Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class 0x8ce73100: SDBusDriver: HandleAddDevice has been complete! 谢谢了, |
|
|
沙发#
发布于:2007-07-03 09:41
兄弟,问题解决了没?我出现了与你一模一样的问题 。
顶上 |
|
|
板凳#
发布于:2007-07-03 09:53
SDMemCardConfig: Card indicates unsupported file system (non FAT)
格式化为FAT试一试 |
|
地板#
发布于:2007-07-03 10:21
FAT,FAT32都试过不了。没用。
LoadSDdriver时调用DefaultBusDriver::ActivateChild(pszChildBusName)返回失败了。但就是找不到DefaultBusDriver::ActivateChild的定义。 |
|
|
地下室#
发布于:2007-07-03 14:55
已经解决了,驱动已经做完了,呵呵
先更新一下,五月份的WinCE的更新。 里面几乎全是SD卡的,更新之后重新试试。呵呵。 再这把catalog----------->storage manage给加上, 在控制面板里面,storage manage里面看看能不能看见SD卡。 问题比较久了,当时忘了怎么解决的。 你先试试这个看看,有问题再讨论, |
|
|
5楼#
发布于:2007-07-03 15:27
不好意思,上面的回答不对,看错了问题。
个人感觉问题可能是: 在Busrequest函数中,你对Sendcommand之后, 然后对相应的命令收回应, 需要将这些回应提交给Sdmemory. 你在添response的时候出了问题。 你可以自己跟一跟,看你提交的CSD是否正确?? 估计是这个问题。。呵呵。。 |
|
|
6楼#
发布于:2007-07-06 18:19
是在GetCommandResponse中出了问题吗?
但是都没有报错的啊。 BusRequestHandler starts (CMD:2) SDHCD: Clock started... SendCommand (0x0004f100, 0x0002, 0x00000000, 0x0003, 0x0) starts sendSDICommand long response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:3) SDHCD: Clock started... SendCommand (0x0004f100, 0x0003, 0x00000000, 0x0007, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:9) SDHCD: Clock started... SendCommand (0x0004f100, 0x0009, 0x00020000, 0x0003, 0x0) starts sendSDICommand long response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:13) SDHCD: Clock started... SendCommand (0x0004f100, 0x000d, 0x00020000, 0x0001, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:7) SDHCD: Clock started... SendCommand (0x0004f100, 0x0007, 0x00020000, 0x0002, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:55) SDHCD: Clock started... SendCommand (0x0004f100, 0x0037, 0x00020000, 0x0001, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:51) SDHCD: Clock started... SendCommand (0x0004f100, 0x0033, 0x00000000, 0x0001, 0x1) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:55) SDHCD: Clock started... SendCommand (0x0004f100, 0x0037, 0x00020000, 0x0001, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:42) SDHCD: Clock started... SendCommand (0x0004f100, 0x002a, 0x00000000, 0x0001, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends SDHCDSlotOptionHandler option=SDHCDGetWriteProtectStatus SDHCDSlotOptionHandler ends BusRequestHandler starts (CMD:55) SDHCD: Clock started... SendCommand (0x0004f100, 0x0037, 0x00020000, 0x0001, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends BusRequestHandler starts (CMD:6) SDHCD: Clock started... SendCommand (0x0004f100, 0x0006, 0x00000000, 0x0001, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS |
|
|
7楼#
发布于:2007-07-07 17:43
zhuxiaofeng :
另外: CSD的值不是直接从SD卡的寄存器里面读出来的吗? |
|
|
8楼#
发布于:2007-07-07 18:07
是呀,CSD是靠CMD9这个命令读出来的。
cmd2--cmd3---cmd51--cmd9等命令的发送 是在sdhceventhandles.cpp中的HandleAddDevice()这个函数实现的, 加载Sdmemory也在这里面, 在里面debug一下,看提交给sdmemory.dll的response是否正确 。 具体的response意义可以参考sdcard得spec. 这个函数位于: WinCE500\public\common\oak\drivers\sdcard\sdbusdriver下面。 |
|
|
9楼#
发布于:2007-07-07 18:13
看你的Debug信息:是命令都执行了,
不过信息不够,我也无法判断, 在CMD6之后的命令那?? 把后续的Debug信息都给贴上。。 “SDHCD: Clock started...“ SDHCD: Clock stopped 2 SDHCD: Clock stopped... 把这个Debug信息给去了吧。。 影响看Debug信息,呵呵。。 |
|
|
10楼#
发布于:2007-07-09 10:09
首先多谢zhuxiaofeng的回帖。
这个是我CSD寄存器response的结构。你看一下有什么不妥的???最后一个字符串打印出来总是乱码不知道怎么回事。 UCHAR CSDVersion=0; // 4 bit CSD version struct { DOUBLE TAAC=0; // The TAAC field in units of nano-seconds USHORT NSAC=1; // The NSAC field in units of clock-cycle } DataAccessTime; ULONG MaxDataTransferRate=25000; // In units of kbit/s USHORT CardCommandClasses=1525; // 12 bit command class support indicators USHORT MaxReadBlockLength=512; // In units of bytes BOOLEAN ReadBlockPartia=1l; // Partial Block Read allowed ? BOOLEAN WriteBlockMisalign=0; // Misaligned Block Writes allowed ? BOOLEAN ReadBlockMisalign=0; // Misaligned Block Reads allowed ? BOOLEAN DSRImplemented=0; // DSR Register implemented ? ULONG DeviceSize=504365056; // Calculated device memory size in bytes USHORT VDDReadCurrentMin=60; // in units of milliamps USHORT VDDReadCurrentMax=80; // in units of milliamps USHORT VDDWriteCurrentMin=60; // in units of milliamps USHORT VDDWriteCurrentMax=80; // in units of milliamps BOOLEAN EraseBlockEnable=1; // Erase in multiples of MaxWriteBlockLength ? UCHAR EraseSectorSize=64; // Size of an erase sector in blocks (SECTOR_SIZE+1) UCHAR WPGroupSize=128; // Size of a WP group in erase sectors (WP_GRP_SIZE+1) UCHAR WPGroupEnable=1; // Group Write Protection possible ? UCHAR WriteSpeedFactor=128; // Block Write time as multiple of Read access time USHORT MaxWriteBlockLength=512; // In units of bytes BOOLEAN WriteBlockPartial=0; // Partial block writes allowed ? BOOLEAN CopyFlag=0; // Copy control flag BOOLEAN PermanentWP=0; // Permanent Write Protect flag BOOLEAN TemporaryWP=0; // Temporary Write Protect flag SD_FS_TYPE FileSystem=0; // File System type UCHAR RawCSDRegister[16]=?@ |
|
|
11楼#
发布于:2007-07-09 10:16
麻烦zhuxiaofeng再给看一下。
出错是在HandleAddDevice函数中SDLoadDevice,然后到ActivateChild失败了。最后跟踪到 if (DefaultBusDriver::ActivateChild(pszChildBusName)) { status = SD_API_STATUS_SUCCESS; *ppDeviceFolder = pNewChildFolder; pNewChildFolder->AddRef(); // Add a reference } else { RETAILMSG(1, (TEXT("CSdBusEnum.ActivateChild5 .status = %x,GetLastError()=%d\r\n"),status,GetLastError())); BOOL fSuccess = RemoveChildByFolder(pNewChildFolder); DEBUGCHK(fSuccess); DefaultBusDriver::ActivateChild返回FALES了。。 以下是我CMD6之后的打印信息。 +++ SDCard: Calling Send Handler for HC:SDH. Slot:0, Request:0x00047628 BusRequestHandler starts (CMD:6) SDHCD: Clock started... SendCommand (0x0004f1a0, 0x0006, 0x00000000, 0x0001, 0x0) starts sendSDICommand short response required GetCommandResponse started GetCommandResponse returned SD_API_STATUS_SUCCESS SDHCD: Clock stopped 2 SDHCD: Clock stopped... SDHCD:BusRequestHandler ends flyfffffffffffffffffffffffffffffffffff.status=1 SDCard: SDBusRequest-====================== powerUpFinish!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6 BUS Width 4Bit SDHCD:SetClockRate() - Clock rate set to 16666666 Hz Real clock rate = 3 SDHCDSlotOptionHandler ends SDBusDriver: Device Ready, loading driver...**************************************** SDBusDriver: Device Ready, loading driver...****************************************try to load devices SDLoadDevice()================ SDBusDriver: Loading Driver : SDMemory.dll SDMEMORY:: PROCESS_ATTACH!!! m_sdBusEnum.ActivateChild1 .status = 0,loadPath= \Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class, CSdBusEnum.ActivateChild4 .status = c0000003,pszChildBusName=\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class CSdBusEnum.ActivateChild5 .status = c0000003,bRt=0 m_sdBusEnum.ActivateChild2 .status = c0000003 m_sdBusEnum.ActivateChild2 .loadPath = \Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class,dwHCNumber=0,SlotIndex=0, SDMEMORY:: PROCESS_DETACH!!! SDBusDriver: Failed to load driver with path: \Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class SDBusDriver: HandleAddDevice- |
|
|
12楼#
发布于:2007-07-09 11:13
好像你没有在OS里面添加sdmemory这个组件。
catalog---->Device Driver----->SDIO--------->Sdmeomry----〉add to os design.. 别的貌似没什么错误。 你check一下,添加了没有?? |
|
|
13楼#
发布于:2007-07-09 11:23
这个是有加的。不然
SDMEMORY:: PROCESS_ATTACH!!! 这一句就是从sdmemory.dll里面打印出来的。 |
|
|
14楼#
发布于:2007-07-12 11:34
出错是在HandleAddDevice函数中SDLoadDevice,然后到ActivateChild失败了。最后跟踪到
if (DefaultBusDriver::ActivateChild(pszChildBusName)) { status = SD_API_STATUS_SUCCESS; *ppDeviceFolder = pNewChildFolder; pNewChildFolder->AddRef(); // Add a reference } else { RETAILMSG(1, (TEXT("CSdBusEnum.ActivateChild5 .status = %x,GetLastError()=%d\r\n"),status,GetLastError())); BOOL fSuccess = RemoveChildByFolder(pNewChildFolder); DEBUGCHK(fSuccess); DefaultBusDriver::ActivateChild返回FALES了。。 兄弟,你这个是怎么解决的?? 我现在Realse的时候会出现这个问题?? 而Debug的时候没有问题。。 |
|
|
15楼#
发布于:2007-07-17 10:55
在初始化里面有一断被我注释掉了。用三星提供的就不会了。呵呵。自作聪明了。
|
|
|
16楼#
发布于:2007-11-07 19:00
楼上的兄弟,能不能再讲具体一点:
哪个地方的初始化被你注掉了?用三星提供的什么代码就不会了? 我也碰到和你一样的问题,就是跑到ActivateChild返回失败,你是怎么解决这个问题的,请具体谈一下,谢谢~!!! |
|