9735|27

78

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ce5.0 2440 SD卡当u盘的问题 [复制链接]

ce5.0 2440

SD卡驱动用的微软提供的三层架构的那种,在设备端可以正常访问

usb function controller驱动昨天刚刚调好可以通过activesync与pc同步连接,与xuefeng_baggio兄弟在我之前的帖子中提供提供的驱动一样,xuefeng_baggio兄弟说他的驱动是可以实现mass storage的

硬件板子是可以与pc同步的

现在加入device client 的 mass storage组件,想让sd卡当u盘

错误现象: 插入usb线,pc端盘符可以显示,但是无法访问内容,设备端SD卡目录未消失


请给点提示,推测一下问题可能出在哪里

最新回复

不好意思!最近忙自己事情一直没看到帖子!你这个是什么问题呀?我当时是用u盘做的,不知道你的sd卡友什么区别?还有我想明白你现在是把sd卡插在wince设备中然后在pc段设别做u盘,还是直接拿sd卡在wince设备中作u盘?这个概念必须清楚!  详情 回复 发表于 2010-1-29 11:38
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶一下.
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
http://bbs.driverdevelop.com/read.php?tid-114930-fpage-5.html
这兄弟是nand flash当u盘的,说注册表有个东西要改,不然就会只有盘符
但他是容量无法获取,感觉跟我问题不一样,今天太晚了,明天碰碰运气


硬件可以同步应该没问题
usb function controller driver 可以同步,而且是有人已经当u盘成功过的,应该也没问题

我自己猜测应该是注册表设置的问题或SD卡驱动的问题
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
CE端的盘符没有dismount掉
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 
恩,看过Veabol的帖子,但是为什么没有dismount呢?
按说我用的东西都是没问题的,应该好使啊,输出的调试信息太少了,明天多输出些信息看看
xuefeng_baggio调试mass storage的时候碰到过这个问题吗?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
肯定是某个地方没有设置好,如果在PC上(题外话),可能原因是你没有足够的权限…
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
又来顶帖子了,还是搞不定,问题太奇怪了

插入USB - UFN_DETACH - STORE_Close 这时SD卡的盘符在设备上消失了
但是马上UFN_ATTACH - STORE_Init 再过几秒,SD卡的盘符又在设备上出现了
STORE_Init可以正常运行,GetDiskInfo返回的扇区总数和扇区字节也是正确的
在PC端的设备管理器里看到的Mass storage device也是不带感叹号的

这时在PC端点击移动磁盘的盘符,PC的explorer变得特别慢,最终访问失败,在设备端仍然能正常访问SD卡

看了坛子里的相同问题帖子,我遇到的问题跟其他人的都不同,似乎这个SD卡在设备方被卸载了,之后又被加载了,U盘不能正常工作,真是急死了
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
UFN_DETACH 怎么会比 UFN_ATTACH 先执行了呢

在 STORE_Init 未执行的时候 STORE_Close 函数里的 g_hStore 变量应该是NULL,现在却是有值的
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
UFN_DETACH这个参数正常是由BSP的USB驱动传到MDD层的,所以看一下你的驱动有没有什么问题。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

10
 
过程是对的,我理解错了,但是U盘还是不好使

USB fuction controller 驱动里 UfnPdd_Init 函数里 pContext->attachedState = UFN_DETACH;

之后 中断来了 ISTMain 进入 HandleUSBEvent函数 有这样的代码

if (bUSBBusIrqStat & USB_RESET_INTR) {
        pContext->fSpeedReported = FALSE;
        WriteReg(pContext, USB_INT_REG_OFFSET, USB_RESET_INTR);
        // If the cable was connected to a host at boot, the attach interrupt
        // will be missed. Generate it here.
        if (pContext->attachedState == UFN_ATTACH) {
            pContext->pfnNotify(pContext->pvMddContext,
                UFN_MSG_BUS_EVENTS, UFN_DETACH);
            pContext->attachedState = UFN_DETACH;
        }

        if (pContext->attachedState == UFN_DETACH){
            pContext->pfnNotify(pContext->pvMddContext,
                UFN_MSG_BUS_EVENTS, UFN_ATTACH);
            pContext->attachedState = UFN_ATTACH;
        }

        peps->dwEpState = EP_STATE_IDLE;
        pContext->pfnNotify(pContext->pvMddContext, UFN_MSG_BUS_EVENTS, UFN_RESET);

        // Enable the Suspend interrupt...
        SetClearReg(pContext, USB_INT_EN_REG_OFFSET, USB_SUSPEND_INTR, SET);

        DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Reset\r\n"), pszFname));
    }


如果从未插入USB线,会先
pContext->pfnNotify(pContext->pvMddContext,
                UFN_MSG_BUS_EVENTS, UFN_ATTACH);

如果插入过USB线了,会先
pContext->pfnNotify(pContext->pvMddContext,
                UFN_MSG_BUS_EVENTS, UFN_DETACH);
出了if之后立刻
pContext->pfnNotify(pContext->pvMddContext,
                UFN_MSG_BUS_EVENTS, UFN_ATTACH);

我看到的先UFN_DETACH后UFN_ATTACH是正常的
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

11
 
http://bbs.driverdevelop.com/read.php?tid-108380-page-1.html
有人很早前跟我遇到同样的问题,还是没解决,继续搞
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

12
 
学习了 强顶一下
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
感谢啊,哪位高人能进来给解释一下啊

我也是dismount/mount一直被重复调用

http://topic.eeworld.net/u/20090213/10/cb287edf-bbca-4607-ad24-b42f68382896.html
帖子好像也是这个问题

遇到问题的人好像都没有解决
是我们少加了组件?还是我们的USB Fuction Controller Driver有问题?

哪位有调试过的,s3c2440 ce5.0的驱动,可以支持连接pc让sd卡当u盘的发给兄弟试试行吗

yangyong9608@163.com
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

14
 
http://topic.eeworld.net/u/20090213/10/cb287edf-bbca-4607-ad24-b42f68382896.html
好像是Vid Pid没设置正确,跟我的不一样

yangkunzhen哥们提到

to LinHanLao,

可能是PNP线程和ufn线程竞争的结果,也就是你的SD卡  会不停的dismount/mount,
把PNP线程的优先级调高些,try一下。(要是还不行,麻烦把你的log信息发出来)

[HKEY_LOCAL_MACHINE\System\StorageManager]
    "PNPThreadPrio256"=dword:63

我改了这地方了,还是不好使,感觉没啥效果

yangkunzhen不知道还来不来eeworld,你遇到过这样的问题吗?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

15
 
每天顶一次,eeworld这么多好心的高手,我就不信没人帮忙
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

16
 
这个不是没人帮忙啊,是很少有人知道怎么做
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

17
 
Veabol,你不是搞过吗?能跟传授一下经验不?

我这现在发现给sd卡的流驱动发 IOCTL_DISK_READ 报错了,错误码是160

这个会是USB Fuction controller 驱动的问题吗?还是SD卡驱动有问题啊
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 9 楼 yangyong9609 的回复:
过程是对的,我理解错了,但是U盘还是不好使

USB fuction controller 驱动里 UfnPdd_Init 函数里 pContext->attachedState = UFN_DETACH;

之后 中断来了 ISTMain 进入 HandleUSBEvent函数 有这样的代码

if (bUSBBusIrqStat & USB_RESET_INTR) {
? ? ? ? pContext->fSpeedReported = FALSE;
? ? ? ? WriteReg(pContext, USB_INT_REG_OFFSET, USB_RESET_INTR);
? ? ? ? // If the cable was connected to a host at boot, the attach interrupt
? ? ? ? // will be missed. Generate it here.
? ? ? ? if (pContext->attachedState == UFN_ATTACH) {
? ? ? ? ? ? pContext->pfnNotify(pContext->pvMddContext,
? ? ? ? ? ? ? ? UFN_MSG_BUS_EVENTS, UFN_DETACH);
? ? ? ? ? ? pContext->attachedState = UFN_DETACH;
? ? ? ? }

? ? ? ? if (pContext->attachedState == UFN_DETACH){
? ? ? ? ? ? pContext->pfnNotify(pContext->pvMddContext,
? ? ? ? ? ? ? ? UFN_MSG_BUS_EVENTS, UFN_ATTACH);
? ? ? ? ? ? pContext->attachedState = UFN_ATTACH;
? ? ? ? }

? ? ? ? peps->dwEpState = EP_STATE_IDLE;
? ? ? ? pContext->pfnNotify(pContext->pvMddContext, UFN_MSG_BUS_EVENTS, UFN_RESET);

? ? ? ? // Enable the Suspend interrupt...
? ? ? ? SetClearReg(pContext, USB_INT_EN_REG_OFFSET, USB_SUSPEND_INTR, SET);

? ? ? ? DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Reset\r\n"), pszFname));
? ? }







刚才看了下,我的 HandleUSBEvent函数中没这段,你去掉一下试试看会怎么样。
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

19
 
去掉就啥反应都木有啦,你那应该也有这样的代码,不然怎么通知storage class有USB插入事件呢

我的问题很奇怪,大家帮忙看看调试信息

问题一

SC2440UsbFn!HandleUSBEvent: UFN_ATTACH
SC2440UsbFn!HandleUSBEvent: Reset
SC2440UsbFn!HandleUSBEvent: bEpIrqStat = 0;bUSBBusIrqStat = 0
SC2440UsbFn!HandleUSBEvent: bEpIrqStat = 0;bUSBBusIrqStat = 4
SC2440UsbFn!HandleUSBEvent: USB_RESET_INTR
UsbMsFn!STORE_Close: forcing storage manager to re-examine \StoreMgr\DSK1:
SC2440UsbFn!HandleUSBEvent: UFN_DETACH
UsbMsFn!STORE_Init: DeviceName = DSK1:
UsbMsFn!STORE_Init: Removable not present; default is true
UsbMsFn!STORE_Init: Removable = 1
UsbMsFn!STORE_Init: ===g_hStore = 4022615982
UsbMsFn!STORE_Init: opened store DSK1:
SDMemory: +SMC_IOControl Handle 7822816
IOCTL_DISK_GETINFO
SDMemory: -SMC_IOControl returning 1
UsbMsFn!STORE_Init: IOCTL_DISK_GETINFO passed

OpenStore的时候返回的handle 是 g_hStore = 4022615982 ,我用%u输出的

到了
fResult = DeviceIoControl(
        g_hStore,
        IOCTL_DISK_GETINFO,
        NULL,
        0,
        &g_diDiskInfo,
        sizeof(g_diDiskInfo),
        &dwBytesReturned,
        NULL);
传入到SDMemory:的IOControl里 SMC_IOControl Handle 7822816 居然handle变成7822816


问题二

下列函数被依次调用后
BOT_TransferThread
ProcessBOPipeTransfer
BOT_HandleCBW MSC_STATE_COMMAND_TRANSPORT
STORE_IsCommandSupported
BOT_ExecuteCB
STORE_ExecuteCommand
ProcessScsiRead10

fResult = DeviceIoControl(
        g_hStore,
        dwIoControlCode,
        &sgSgReq,
        sizeof(sgSgReq),
        NULL,
        0,
        &dwBytesReturned,
        NULL);
输出
UsbMsFn!BOT_HandleCBW: Length: 0x0200 Flags: 0x80 CBWLen: 0xa
UsbMsFn!STORE_IsCommandSupported: command 0x28
UsbMsFn!STORE_IsCommandSupported: READ (10)
UsbMsFn!STORE_ExecuteCommand: command 0x28
UsbMsFn!STORE_ExecuteCommand: READ (10)
UsbMsFn!ProcessScsiRead10: starting LBA/sector = 0, transfer length = 1 (sectors)
UsbMsFn!ProcessScsiRead10: ===g_hStore = 3485743006
g_fLegacyBlockDriver = 0 DISK_IOCTL_READ = 2 IOCTL_DISK_READ = 482312 dwIoControlCode = 482312
UsbMsFn!ProcessScsiRead10: IOCTL_DISK_READ failed; error = 160
UsbMsFn!STORE_ExecuteCommand: failed to execute command 0x28
UsbMsFn!BOT_ExecuteCB: Command : failed

DeviceIoControl 被调用 SMC_IOControl 居然没有被执行,DeviceIoControl就直接返回错误160了

因为调试信息太多,只能贴小部分,请高手给分析一下,为什么Handle会突变,又为什么同样的DeviceIoControl代码,同样的handle传入,在问题二里SMC_IOControl未被调用呢
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

20
 
我的USB插入事件是在USB 的VBUS检测中断那里做的,检测到有插入则UFN_ATTACH 否则UFN_DETACH
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表