bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1283回复:2

把USBN9603的U盘代码移到D12上,出现问题,请熟悉D12的帮忙。

楼主#
更多 发布于:2004-06-08 09:57
刚作为USBN9604上的U盘开发,是在ARM上开发的。现在老板要求把程序移到单片机上,USB芯片是很多人用的D12。
在D12上的列举过程在附件中,里面有我注释的一些疑问,请大家看看,帮忙分析一下是什么原因?
附件名称/大小 下载次数 最后更新
2004-06-08_0607.txt (8KB)  8
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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等命令。
*/

千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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的应答数据接收。

请帮忙分析一下。谢谢。

游客

返回顶部