ch32v307的设备描述符不能设置成USB2.10版本。
设置成2.0的就没问题。
设置成2.1会导致上位机收不到设备描述符。
2.0不支持Microsoft OS 2.0描述符,只有2.1以上才支持。
有技术大佬帮忙看看么?
ch32v307的设备描述符不能设置成USB2.10版本。
设置成2.0的就没问题。
设置成2.1会导致上位机收不到设备描述符。
2.0不支持Microsoft OS 2.0描述符,只有2.1以上才支持。
有技术大佬帮忙看看么?
你好,请问你想具体实现什么功能呢
没有接触过USB2.1,只能给出以下观点以供参考。
1.主机根据设备描述符中的的USB协议版本,加载相应的驱动程序,也就是说,主机需要支持相应的USB版本。
2.V307的描述符是按照USB2.0的协议写的,并不清楚USB2.1的设备走什么样的协议,所以仅改变描述符中的版本号是不行的。
3.可以用现有的USB2.1的设备,进行抓包,根据抓包的数据修改V307的代码和描述符
谢谢回复。我上面表述应该比较清楚:我想实现的功能就是”使用winUSB驱动,通过Microsoft OS 2.0描述符来实现“。
提到的几个点,主机是win11,肯定支持usb2.1。
CH55x上面都能实现的设备描述符,在v307上改不了。
我主要不明白的是为什么不能改设备描述符中usb版本为2.1的问题。
关键的关键,我在上面已经表述清楚了。
v307的设备描述符中的USB版本号字段,设置成2.1会导致上位机收不到设备描述符,导致枚举进行不下去。
设置成2.0就没有问题,但是这样windows主机端就没有办法请求”Microsoft OS 2.0描述符“,因为这个只有在识别到设备描述符中为2.1版本才支持。
你好,USB版本改为2.1,主机会走对应的协议去获取描述符,这是只改变USB版本为2.1后的抓包数据
与2.0的枚举过程相比,多了80 06 00 0F 00 00 FF 00的请求,这是主机在请求BOS描述符,而307的代码是2.0的配置,没有相关处理,回复STALL,所以主机无法识别。
除了BOS描述符之外,还会有其他请求,307的代码中也没有相关处理,可以查找相关协议去修改307的代码,比较节省时间的方法是用一个可以正常使用的USB2.1的设备,抓包后,根据抓包数据修改307的代码和描述符。
非常感谢您的回复。不过您还是没看明白我的问题。你说的这些问题我全都知道的。
您说的这个:
可以正常使用的USB2.1的设备,抓包后,根据抓包数据修改307的代码和描述符。
你说的这个步骤我也做了,有完整的抓包数据,我也按照抓包数据修改了307的代码和描述符,关键关键的问题就是第一步就进行不下去,原因就是:“307的设备描述符中描述版本的字段从0200改成0210就会导致无法上报给主机”。
我说的这个问题,如果您手中有307的板子大可以一试,你会发现这要改这个版本号,上报的设备描述符就变成了全0.
所以设备描述符无法上传,主机就无法得知设备的USB版本,也不会有后面2.1协议中的“80 06 00 0F 00 00 FF 00”。只要设备描述符上传正常了,后面的步骤才能进行下去。
你好,这个纯粹是协议的问题,和是什么芯片没有关系
1.307的设备描述符中USB版本改为2.1为什么无法识别,上面已经说了,是因为:改为2.1后,会请求BOS描述符,而307的代码里没有处理,回复了STALL,如果307的代码里加上这样的处理,是可以识别的。
2.WinUSB,307的代码里有BOS的描述符,但是这个描述符是无法使用WinUSB的,需要去找协议自行修改。
如图是一个WinUSB设备的抓包,请求完BOS描述符后,又有C0开头的请求,类似的请求,我们307的例程中没有相关处理,同样需要你去根据协议修改代码。
你好,你还是没有仔细看过我描述的问题。 下面的描述加粗了,请重点理解一下。
抓包的事情我早就做过了!改为2.1后,WinUSB协议上要做什么事情我也很清楚!
设备端BOS描述符这些我都根据协议改好了!
请问你上面这段是用V307抓的吗?如果不是,我还是建议你用V307试试。主机收不到设备描述符,哪里来的后面BOS描述符请求步骤啊?插上去就是无法识别的USB设备,就因为设备描述符改了2.1,PC接收的设备描述符变成了全0。
如果你用V307可以上报2.1的设备描述符,那就是USB驱动初始化有什么问题。
你好,你可以对比一下你的抓包数据,我是用的307,这是设备管理器的截图
或者你可以把抓包的数据发我邮箱zc@wch.cn,我照着你的抓包数据写一个一模一样的固件给你
非常感谢。
我以及给你发了邮件。倒不用麻烦你写一个一模一样的,只需要帮忙看看为啥不能改成USB2.1的问题,或者给我一份你能正常枚举USB2.1的程序给我参考即可。