evan908
驱动牛犊
驱动牛犊
  • 注册日期2008-11-13
  • 最后登录2008-11-14
  • 粉丝2
  • 关注0
  • 积分2分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3183回复:1

在WINCE5.0上实现通过USB device访问大容量SD卡问题

楼主#
更多 发布于:2008-11-13 18:30
在对机器上的存储媒介做mass storage的时候出现了这么个问题..
系统是WINCE5.0
芯片是S3C2443
用Serial方式时SD卡可支持到8G,并能全部映射出去在PC机上显示出来.
但是用mass storage则出现问题:
具体现象是这样的:2G以下的卡通过USB MASS STORAGE PC能正常识别.
                      2G以上的卡PC提示"无法识别的设备"
不插卡 PC提示"设备无法启动"
 
我们做了跟踪,得出的结论是SD卡驱动的问题.
但是不能确定是PB上SD卡程序问题还是BSP部分程序问题.

跟踪步骤如下:
1.插入8G卡 并连接PC.
 
 
2.CE程序运行到...../USBFN/CLASS/STORAGE/TRANSPORT/BOT/BOT.CPP文件中的函数
BOT_DeviceNotify(   )
{
.................
                case UFN_ATTACH: {
                    DEBUGCHK(!g_fStoreOpened);
                    DWORD dwRet = STORE_Init(g_szActiveKey);
                    if (dwRet != ERROR_SUCCESS) {
                        ERRORMSG(1, (_T("%s Failed to open store\r\n"),
                            pszFname));
                    }
                    else {
                        g_fStoreOpened = TRUE;
                    }
                    break;
                }
......................
}
出现打印Failed to open store 说明DWORD dwRet = STORE_Init(g_szActiveKey); 失败了
 
 
3. 继续跟踪进入STORE_Init()函数
...../USBFN/CLASS/STORAGE/EMULATION/SCSI2/BLOCK/BLOCK.CPP文件中的函数
STORE_Init()
{
.................
    // read name of store to expose
    cbData = sizeof(g_szDeviceName);
    dwError = RegQueryValueEx(hKey, PRX_DEVICE_NAME_VAL, NULL, &dwType, (PBYTE) g_szDeviceName, &cbData);
//得到SD卡的名字  "DSK1"
....................
    // open store
    g_hStore = OpenStore(g_szDeviceName);
    if ((g_hStore == NULL) || (g_hStore == INVALID_HANDLE_VALUE)) {
        dwError = GetLastError();
        DEBUGMSG(ZONE_ERROR, (_T(
            "%s failed to open store %s; error = %u\r\n"     //这里打印出 failed to open store
 

            ), pszFname, g_szDeviceName, dwError));
        goto EXIT;
    }
 
...............
}
 
这里打印出 failed to open store 说明OpenStore()函数打开错误.
也就是打开8G的SD卡操作失败了.


另外要问一下,
OpenStore()打开SD卡后
紧跟着是运行SD卡的哪部分?
游客

返回顶部