如何识别 USB MSD 为高速还是全速?

of123 2012-04-19 03:24:39
通过一个 PC 端的软件,可以打开、识别并访问一个专用的 USB MSD 设备。有什么办法使软件从 Windows 的资源知道该设备当前是高速模式还是全速模式?

目前,是通过设备底层代码向软件报告高速或全速状态的。即需要软件与设备之间的一次通讯。能否不依赖于底层代码的报告,直接从 Windows 获取一个 USB MSD 设备是高速还是全速(高速握手是否成功)?需要怎样做?
...全文
467 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
高全速识别的机制是这样的:高速设备在插入主机总线时,或得到 Reset 信令时,与全速设备一样在 D+ 线上有 1.5K 上拉电阻。支持 USB 2.0 规范的主机会在此时与设备进行 3 次高速握手。握手成功后,设备撤销其 1.5K 上拉电阻。如果握手成功,主机就会按高速设备继续枚举。

这些都是底层的行为。

应用层有什么信息能够反映出一个设备是高速呢?
[/Quote]
你这个问题是个硬件问题,我估计Windows是通过驱动来实现的,同时还跟CMOS的设置有关。
of123 2012-04-23
  • 打赏
  • 举报
回复
高全速识别的机制是这样的:高速设备在插入主机总线时,或得到 Reset 信令时,与全速设备一样在 D+ 线上有 1.5K 上拉电阻。支持 USB 2.0 规范的主机会在此时与设备进行 3 次高速握手。握手成功后,设备撤销其 1.5K 上拉电阻。如果握手成功,主机就会按高速设备继续枚举。

这些都是底层的行为。

应用层有什么信息能够反映出一个设备是高速呢?
咸清 2012-04-20
  • 打赏
  • 举报
回复
如果没有开放接口,那就只能从驱动想办法了。
东方之珠 2012-04-20
  • 打赏
  • 举报
回复
Windows应该是通过底层获得硬件,或者通过CMOS读取全速(Full Speed)、高速(0High-Speed)参数。
Tiger_Zhao 2012-04-20
  • 打赏
  • 举报
回复
同一个驱动应该是对多种速度自适应的,所以没有插入之前是无法确定的。

假设这样的情况:电脑是 2.0 接口,外接 USB 转接器是 1.1 接口。那么同样的 2.0 设备直接插电脑和插到转接器上的速度是不同的。
worldy 2012-04-19
  • 打赏
  • 举报
回复
肯定有记录,否则,当用户发起一次USB读写的时候,系统如何确定使用什么速度?

USB是全速还是高速,识别在于是D-接电阻到+5V,还是D+接电阻到+5V。而这个参数只有在插入时候检测
of123 2012-04-19
  • 打赏
  • 举报
回复
连系统的设备管理器中都找不到。怀疑驱动层没有将此信息传上来。因为应用层理论上不需要处理这些信息,驱动层才会依据设备是高速或全速,来执行传输协议。

当然,像 Bushound 等软件可以通过拦截层间的信息传递,可以得到相关信息。但太复杂了,我们不值得做。
worldy 2012-04-19
  • 打赏
  • 举报
回复
注册表里肯定有相关信息,研究一下注册表
东方之珠 2012-04-19
  • 打赏
  • 举报
回复
其实,你已经解决了,只不过是想从Windows本身获得全速、高速标识。
新的USB2.0规范重新命名了USB标准将原先的USB 1.1改成了USB 2.0 Full Speed(全速版),同时将原有的USB 2.0改成了USB 2.0High-Speed(高速版),并同时公布了新的标识。不言而喻,高速版的USB 2.0速度当然超过全速版的USB 2.0。问题是怎么获得这个新的标识?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧