阅读:1283回复:2
把USBN9603的U盘代码移到D12上,出现问题,请熟悉D12的帮忙。
刚作为USBN9604上的U盘开发,是在ARM上开发的。现在老板要求把程序移到单片机上,USB芯片是很多人用的D12。
在D12上的列举过程在附件中,里面有我注释的一些疑问,请大家看看,帮忙分析一下是什么原因? |
|
|
沙发#
发布于:2004-06-08 11:04
CTL a1 fe 00 00 - 00 00 01 00
这个是GET_MAX_LUN命令,可以stall掉,如果你的U盘只有一个分区的话 另外你提到的请求命令,提示overrun,应该是因为你的firmware没有做好,cbw过来后你接收然后响应发出数据给host(datain),再发csw,仔细调一下这段代码。并且我相信即使host发了read10命令,你也发不出数据。错误应在同一个地方。极有可能是你响应了两次,一次为空,这只是我的猜测而已。毕竟没有你的代码:) 15 DO 55 53 42 43 - 68 6e 32 81 - 24 00 00 00 - 80 00 06 12 USBChn2.$....... 5.0sc 29.1.0 00 00 00 24 - 00 00 00 00 - 00 00 00 00 - 00 00 00 ...$........... 29.1.16 /*程序的主要问题在这里,在收到12类型的请求后,发送应答数据(36个,和请求的一致,0x24), 但是主机端显示如下的overrun的信息显示数据过多,试着发送少量的数据,发现最多可以接收13个字节,也就是CSW包的数据长度 如果我们在收到12的请求后不发送应答数据,只发送13个字节的CSW包,那么可以出现后面的READ CAPACITY ,READ10等命令。 */ |
|
|
板凳#
发布于:2004-06-08 15:55
我又做了测试发现了如下的现象:
按照正常过程: inquiry(12)请求, 应答inquiry的数据。 发送CSW包。 然后是READ FORMAT CAPACITY(25)的请求。 在我的测试中,在处理inquiry请求时:发现HOST不接收INQUIRY 的应答数据,只接收CSW的数据。 具体现象如下: 在inquiry处理后,写inquiry的应答数据到FIFO,然后使发送缓冲区有效。但是用BUSHOUND抓的话,发现了前面附件中的现象,出现OVERRUN的消息,如果我把inquriy的应答数据截取13个字节发送,可以成功,但是CSW包就发送不出去。后来我不发送inquiry的应答数据,直接发送CSW包,就可以出现READ FORMAT CAPACITY的请求。 也就是说我的程序只能发送CSW数据,而不能发送各个命令的应答数据。 后来又做了另外一种测试,就是在inquiry处理中,先发送csw数据,然后再发送inquiry的应答数据,发现这个应答数据作为后面的read format capacity的应答数据接收。 请帮忙分析一下。谢谢。 |
|