阅读:1849回复:2
pxa27x的mass storage usb driver的问题
最近在porting ms的例子mass storage driver,平台是pxa270,结果就发现了几个问题:
1. usb总线在刚连线的时候,会出现几次reset信号(我特地用usb逻辑分析仪抓了一下,确实是上来就有好几次reset),造成的结果就是pxa270的收到了数次reset的中断,然后我们的usb堆栈code里就模拟了数次attach然后detach的动作...本来这个问题也不大,反正多reset几次就ok了,跑rndis的时候也好好的...但是,加载mass storage作为客户端驱动时,在ms的例子里在attach消息收到时把sd的storage用DismountStore从device端的文件系统中直接卸掉,在detach消息的时候会再用MoveFile再挂载上去(MoveFile可以用来挂载文件系统,这个我在google和帮助档里都没有找到,不知道算不算undocument),结果就出了个莫名其妙的问题,如果连续多次做DismountStore和MoveFile,会造成用deviceIoControl读sd卡数据的失败,而且,我跟了一下,更本就没有走进sd memory的iocontrol函数里,但是openstore都是ok的,昏过去.... 2. 还有一个问题就是,插槽里没有卡的时候,pc端的command发过来,我是直接stall当前的IN endpoint的,然后pc会发一个clear_feature的command过来,用于clear endpoint的stall状态,然后会再要求一个13 byte的csw。结果,又出了个问题,概率性的会出现,要返回一个csw的时候,却返回了一个0 byte的空包,然后pc端发现这个错误后立马又是一个usb reset..... 仔细看看intel的spec,有这么一句话: “Users must clear the SST bit before the USB host controller requests more data from IN endpoints or invalid or corrupted data may be sent to the host.“ 照这句话的意思来讲,就是SST bit在下一个IN request之前是要清空的,那最好的机会就是在pc端的CLEAR_FEATURE发过来的时候,我去把SST bit清空,本来pc端这条command也就是为了这个目的....结果,再一看intel的spec: "In the case of standard device requests SET_ADDRESS, SET_FEATURE, and CLEAR_FEATURE, the UDC accepts the data and updates the appropriate internal UDC registers. The data for these device requests is not forwarded on to users through the endpoint FIFO memory." 彻底昏过去,照这么讲CLEAR_FEATURE更本就不会跑进我的code了....所以我现在就觉得,没有一个合适的时机去clear SST bit了,所以造成概率性的错误数据包被发送出去.... 有哪位朋友有做过这方面的东西,给点提示了... 斑竹大哥,帮帮忙给点建议吧.... |
|
沙发#
发布于:2007-05-02 08:38
第一个问题,觉得还是对某个命令响应的不对,才引起PC发RESET,查查它为什么发RESET就行了.
|
|
|
板凳#
发布于:2007-05-08 09:14
关注.我也是碰到同样问题
|
|