liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1316回复:4

请问海量硬盘设备通过USB插上主机后何时通过何管道来接收主机方发来的SCSI命令?

楼主#
更多 发布于:2002-05-21 17:46
我的设备插上后通过控制管道已经枚举成功,可和主机通信传递数据。但是我希望实现成一个USB硬盘设备,所以设备必须能够接收和处理主机发来的标准SCSI transfer command set。请问各位高手:主机何时发来这些命令?是在所有的标准设备请求处理完毕后进行处理还是在别的什么阶段?另外这些命令通过什么管道到达设备,是批管道还是控制管道?
    哎,我现在设备的所有请求都已经处理完成,设备枚举成功,PC上也显示UMASS类设备驱动程序工作正常,就是不知道该如何即在哪里处理这个SCSI命令。请教各位大虾了。
菜菜
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-21 18:10
补充说明:我尝试着把CBW的处理放在进入BULK OUT的中断中进行处理,但是我跟踪发现程序在整个枚举过程中根本没有进入到BULK OUT中断中来。我是这样处理这些管道中断到来顺序的:
1. 读D12芯片的中断寄存器的值.
2.  判断是否有 \"BUS RESET\" 中断到来.如有,则设置总线复位标志,并记录当前时刻。退出中断处理。
3. 如何没有\"BUS RESET\" 到来,则进行以下操作:
4. 首先判断是否有\"SUSPEND CHANGE\"中断到来.如有,则读取当前时刻,把这个时刻和BUS RESET的时刻的时间间隔进行分析,如果间隔大于0.6s,我就认为设备已经被拔除,设置设备状态为拔除。
5. 紧接着再判断是否有\"BULK OUT\"中断到来。如果有,则读取D12的缓冲区,如果为满,则转入CBW(SCSI命令集)的处理。
6.紧接着再判断是否有“CONTROL OUT”中断来到,如有,则转入各种标准设备请求和特定类请求的处理。
7.紧接着再判断是否有\"CONTROL IN\"中断来到,如有,直接向主机回复O长度报文。
8.紧接着再判断是否有\"bulk in\"中断来到,如有,执行D12_ReadLastTransactionStatus 命令清空缓冲即可。
9.最后设置USB消息中断内容,退出中断处理。

以上就是我的处理过程,请大家看看,有没有什么问题?或更好的顺序可以使得CBW得到处理?
菜菜
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-23 16:58
斑竹,请过来帮俺看看呀。
在bulk-only传输中,CBW和CSW及数据都必须在批管道中传送吗?还是也可以选择在控制终点中传送?协议看了有段时间了,我又忘了。版主帮帮忙吧,我用送分往哪里送啊?
菜菜
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-24 10:37
都是在BULK里面处理的。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
wozhuce
驱动小牛
驱动小牛
  • 注册日期2004-04-02
  • 最后登录2005-11-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-17 09:21
这个帖子虽然很老了,并且liuwan大虾已经做出来了,但是我他的帖子启发了我很多知识,所以还上跟个,和同辈交流。
“紧接着再判断是否有"CONTROL IN"中断来到,如有,直接向主机回复O长度报文。”这个BULK的处理可能是不对的,因为BULK是在收到IN包和MCU发送完数据后再产生中断的,所以,这就是跟踪不到中断的原因吧!
游客

返回顶部