wince 2440 usb mass storage问题请教!

时间:2022-01-19 15:59:00
在wince下作mass storage功能,现在功能已经能够实现,sd卡在pc端能够出现一个硬盘。现在想研究下mdd的code,有个问题要请教:
sd卡在wince系统下会出现一个硬盘,当连接上pc usb线的时候,进入mass storage模式,这个盘会消失, 这个动作是开始于在pdd层通知mdd层attach的时候,还是在通知reset的时候开始做的?

19 个解决方案

#1


我的也比较郁闷,我使用鼠标,同步软件连接就断了。
关于你的问题,我还没有能力回答哦。

#2


to gooogleman :

usb真是个好东西,研究中。。。

#3


引用 2 楼 abo77281 的回复:
to gooogleman : 

usb真是个好东西,研究中。。。 


的确是好,但是我发觉我现在C++还得学习一段时间再去看那些代码比较合适。

#4


引用 3 楼 gooogleman 的回复:
引用 2 楼 abo77281 的回复:
to gooogleman : 

usb真是个好东西,研究中。。。 
 

的确是好,但是我发觉我现在C++还得学习一段时间再去看那些代码比较合适。


同意,呵呵,分层驱动加上pubilc的code,结构比较庞大,研究code要大量时间。usb协议有看过的话,code也比较好理解。

#5


引用 4 楼 abo77281 的回复:
引用 3 楼 gooogleman 的回复:
引用 2 楼 abo77281 的回复: 
to gooogleman : 

usb真是个好东西,研究中。。。 


的确是好,但是我发觉我现在C++还得学习一段时间再去看那些代码比较合适。 
 

同意,呵呵,分层驱动加上pubilc的code,结构比较庞大,研究code要大量时间。usb协议有看过的话,code也比较好理解。


坚决同意,WINCE这些大块好复杂啊

#6


应该是在attach的时候,在MDD层,当有一个attach事件发生的时候,MDD层负责dismount相关的Disk(将所有这个Disk的partition全部dismount掉)


当PC端remove掉USB mass storage的时候,MDD层会关闭这个Disk的handle,然后在storage manager中有一个PNP thread 负责将这个dismount掉的DISk从新的mount上。

#7


学习下。。。

#8


看看USBFN这部分驱动程序你就明白了

#9


to all
感谢各位回帖!

引用 6 楼 yangkunzhen 的回复:
应该是在attach的时候,在MDD层,当有一个attach事件发生的时候,MDD层负责dismount相关的Disk(将所有这个Disk的partition全部dismount掉) 


当PC端remove掉USB mass storage的时候,MDD层会关闭这个Disk的handle,然后在storage manager中有一个PNP thread 负责将这个dismount掉的DISk从新的mount上。


请教,dismount Disk的时候应该是访问的block.cpp里面的STORE_Init和STORE_Close这两个函数,不知道我这样理解对不对。
我在这两个函数的开始部分加了调试信息,RETAILMSG(1, (_T("--STOREinit--\r\n"))); 但并没有访问到。

#10


学习中

#11


to abo77281,

  block.cpp里面的STORE_Init中会调用dismount(g_hStore);将整个DSK unmount掉

而STORE_Init这个函数是在attach事件来的时候调用的

#12


引用 11 楼 yangkunzhen 的回复:
to abo77281, 

  block.cpp里面的STORE_Init中会调用dismount(g_hStore);将整个DSK unmount掉 

而STORE_Init这个函数是在attach事件来的时候调用的



to yangkunzhen:

thank you.还有问题请教:

我有跟踪code,在usb的pdd层发出的Notify(attach or reset or detach)没有传到block.cpp里面,而是传到了eum.cpp里面,STORE_Init这个函数没有访问.没有跟踪到dismount disk.

是否还有他解?

#13


引用 11 楼 yangkunzhen 的回复:
to abo77281, 

  block.cpp里面的STORE_Init中会调用dismount(g_hStore);将整个DSK unmount掉 

而STORE_Init这个函数是在attach事件来的时候调用的



to yangkunzhen:

thank you.还有问题请教:

我有跟踪code,在usb的pdd层发出的Notify(attach or reset or detach)没有传到block.cpp里面,而是传到了eum.cpp里面,STORE_Init这个函数没有访问.没有跟踪到dismount disk.

是否还有他解?

#14


to abo77281, 
  在bot.cpp文件中有一个BOT_InternalInit 函数,这个函数中会调用g_pUfnFuncs->lpStart(g_hDevice,  BOT_DeviceNotify, NULL, &g_hDefaultPipe);(Note:pUfnFuncs这个usb context是通过IO Control从MMD层得到的) 可以看出他是向MDD层注册一个callback函数。同样在MDD层也会向PDD层注册一个callback函数UfnMdd_Notify,如果你细心看UfnMdd_Notify这个function的code的话,你会发现一个SendDeviceNotification函数(不用说也知道这个函数要干嘛了吧,呵呵~~)。


所以 一个notification chain也就形成了。

#15


学习ing

#16


引用 14 楼 yangkunzhen 的回复:
to abo77281, 
  在bot.cpp文件中有一个BOT_InternalInit 函数,这个函数中会调用g_pUfnFuncs->lpStart(g_hDevice, BOT_DeviceNotify, NULL, &g_hDefaultPipe);(Note:pUfnFuncs这个usb context是通过IO Control从MMD层得到的) 可以看出他是向MDD层注册一个callback函数。同样在MDD层也会向PDD层注册一个callback函数UfnMdd_Notify,如果你细心看UfnMdd_Notify这个function的code的话,你会发现一个SendDeviceNotification函数…


to yangkunzhen: 

我在你说的这个函数BOT_InternalInit 中加有调试信息,但是从dnw看,没有访问到它.比较困扰,是不是我的调试信息有问题:RETAILMSG(1, (_T("--BOT_InternalInit--\r\n")));

#17


在windows mobile/wince下的USB驱动做得N复杂。

我们还用到了OTG,开启了很多USB功能。
驱动架构变成了:
                          OTG Driver(MDD,PDD)
    Function Driver(MDD,PDD)       Host Driver(MDD,PDD)

在Function驱动下还有STORAGE,SERIAL,RNDIS,PC-CAMERA四个Client驱动

在Host驱动下还有STORAGE,HID两个Client驱动。


#18


引用 17 楼 Larry_Liang_cn 的回复:
在windows mobile/wince下的USB驱动做得N复杂。 

我们还用到了OTG,开启了很多USB功能。 
驱动架构变成了: 
                          OTG Driver(MDD,PDD) 
    Function Driver(MDD,PDD)      Host Driver(MDD,PDD) 

在Function驱动下还有STORAGE,SERIAL,RNDIS,PC-CAMERA四个Client驱动 

在Host驱动下还有STORAGE,HID两个Client驱动。 


USB驱动的确很复杂,看的比较痛苦.
看yangkunzhen 兄研究的很细.很希望他能够好好指点我下!
也希望其他高手赐教!

#19


我也在研究。看了两天还没头绪。学习下。

#1


我的也比较郁闷,我使用鼠标,同步软件连接就断了。
关于你的问题,我还没有能力回答哦。

#2


to gooogleman :

usb真是个好东西,研究中。。。

#3


引用 2 楼 abo77281 的回复:
to gooogleman : 

usb真是个好东西,研究中。。。 


的确是好,但是我发觉我现在C++还得学习一段时间再去看那些代码比较合适。

#4


引用 3 楼 gooogleman 的回复:
引用 2 楼 abo77281 的回复:
to gooogleman : 

usb真是个好东西,研究中。。。 
 

的确是好,但是我发觉我现在C++还得学习一段时间再去看那些代码比较合适。


同意,呵呵,分层驱动加上pubilc的code,结构比较庞大,研究code要大量时间。usb协议有看过的话,code也比较好理解。

#5


引用 4 楼 abo77281 的回复:
引用 3 楼 gooogleman 的回复:
引用 2 楼 abo77281 的回复: 
to gooogleman : 

usb真是个好东西,研究中。。。 


的确是好,但是我发觉我现在C++还得学习一段时间再去看那些代码比较合适。 
 

同意,呵呵,分层驱动加上pubilc的code,结构比较庞大,研究code要大量时间。usb协议有看过的话,code也比较好理解。


坚决同意,WINCE这些大块好复杂啊

#6


应该是在attach的时候,在MDD层,当有一个attach事件发生的时候,MDD层负责dismount相关的Disk(将所有这个Disk的partition全部dismount掉)


当PC端remove掉USB mass storage的时候,MDD层会关闭这个Disk的handle,然后在storage manager中有一个PNP thread 负责将这个dismount掉的DISk从新的mount上。

#7


学习下。。。

#8


看看USBFN这部分驱动程序你就明白了

#9


to all
感谢各位回帖!

引用 6 楼 yangkunzhen 的回复:
应该是在attach的时候,在MDD层,当有一个attach事件发生的时候,MDD层负责dismount相关的Disk(将所有这个Disk的partition全部dismount掉) 


当PC端remove掉USB mass storage的时候,MDD层会关闭这个Disk的handle,然后在storage manager中有一个PNP thread 负责将这个dismount掉的DISk从新的mount上。


请教,dismount Disk的时候应该是访问的block.cpp里面的STORE_Init和STORE_Close这两个函数,不知道我这样理解对不对。
我在这两个函数的开始部分加了调试信息,RETAILMSG(1, (_T("--STOREinit--\r\n"))); 但并没有访问到。

#10


学习中

#11


to abo77281,

  block.cpp里面的STORE_Init中会调用dismount(g_hStore);将整个DSK unmount掉

而STORE_Init这个函数是在attach事件来的时候调用的

#12


引用 11 楼 yangkunzhen 的回复:
to abo77281, 

  block.cpp里面的STORE_Init中会调用dismount(g_hStore);将整个DSK unmount掉 

而STORE_Init这个函数是在attach事件来的时候调用的



to yangkunzhen:

thank you.还有问题请教:

我有跟踪code,在usb的pdd层发出的Notify(attach or reset or detach)没有传到block.cpp里面,而是传到了eum.cpp里面,STORE_Init这个函数没有访问.没有跟踪到dismount disk.

是否还有他解?

#13


引用 11 楼 yangkunzhen 的回复:
to abo77281, 

  block.cpp里面的STORE_Init中会调用dismount(g_hStore);将整个DSK unmount掉 

而STORE_Init这个函数是在attach事件来的时候调用的



to yangkunzhen:

thank you.还有问题请教:

我有跟踪code,在usb的pdd层发出的Notify(attach or reset or detach)没有传到block.cpp里面,而是传到了eum.cpp里面,STORE_Init这个函数没有访问.没有跟踪到dismount disk.

是否还有他解?

#14


to abo77281, 
  在bot.cpp文件中有一个BOT_InternalInit 函数,这个函数中会调用g_pUfnFuncs->lpStart(g_hDevice,  BOT_DeviceNotify, NULL, &g_hDefaultPipe);(Note:pUfnFuncs这个usb context是通过IO Control从MMD层得到的) 可以看出他是向MDD层注册一个callback函数。同样在MDD层也会向PDD层注册一个callback函数UfnMdd_Notify,如果你细心看UfnMdd_Notify这个function的code的话,你会发现一个SendDeviceNotification函数(不用说也知道这个函数要干嘛了吧,呵呵~~)。


所以 一个notification chain也就形成了。

#15


学习ing

#16


引用 14 楼 yangkunzhen 的回复:
to abo77281, 
  在bot.cpp文件中有一个BOT_InternalInit 函数,这个函数中会调用g_pUfnFuncs->lpStart(g_hDevice, BOT_DeviceNotify, NULL, &g_hDefaultPipe);(Note:pUfnFuncs这个usb context是通过IO Control从MMD层得到的) 可以看出他是向MDD层注册一个callback函数。同样在MDD层也会向PDD层注册一个callback函数UfnMdd_Notify,如果你细心看UfnMdd_Notify这个function的code的话,你会发现一个SendDeviceNotification函数…


to yangkunzhen: 

我在你说的这个函数BOT_InternalInit 中加有调试信息,但是从dnw看,没有访问到它.比较困扰,是不是我的调试信息有问题:RETAILMSG(1, (_T("--BOT_InternalInit--\r\n")));

#17


在windows mobile/wince下的USB驱动做得N复杂。

我们还用到了OTG,开启了很多USB功能。
驱动架构变成了:
                          OTG Driver(MDD,PDD)
    Function Driver(MDD,PDD)       Host Driver(MDD,PDD)

在Function驱动下还有STORAGE,SERIAL,RNDIS,PC-CAMERA四个Client驱动

在Host驱动下还有STORAGE,HID两个Client驱动。


#18


引用 17 楼 Larry_Liang_cn 的回复:
在windows mobile/wince下的USB驱动做得N复杂。 

我们还用到了OTG,开启了很多USB功能。 
驱动架构变成了: 
                          OTG Driver(MDD,PDD) 
    Function Driver(MDD,PDD)      Host Driver(MDD,PDD) 

在Function驱动下还有STORAGE,SERIAL,RNDIS,PC-CAMERA四个Client驱动 

在Host驱动下还有STORAGE,HID两个Client驱动。 


USB驱动的确很复杂,看的比较痛苦.
看yangkunzhen 兄研究的很细.很希望他能够好好指点我下!
也希望其他高手赐教!

#19


我也在研究。看了两天还没头绪。学习下。

#20