问:使用中,发现我的USB设备接入到TOS-WLink不能识别
答:USB设备种类真挺多的,尤其厂商自定义的设备;直接旺旺联系我;我会远程协助分析解决;
TOS-WLink有OTA升级功能,定位问题、BUG解决后,升级一下就可以;
一般来说,按下面步骤:
1, 远程合作,抓TOS-WLink运行日志给到我,我来定位分析
昨天有用户咨询,USB转串接入TOS-WLink是可以的,但是为什么他常用的USB工具设备接入了TOS-WLink,无线USB助手没有显示;
分析原因,无线USB助手不显示设备插入,定位在枚举错误,抓取了日志发给我后发现,TOS-WLink运行枚举报的错误;类不支持:驱动driver是查表,对接口、端点进行资源分配,
[I/USB] Enumeration success, start loading class driver
[E/USB] do not support Class:0x00,Subclass:0x00,Protocl:0x00
USB四层,设备,配置,接口,端点;有时候设备描述符有时候也会有类的说明,大多数时候描述类是在接口中;
USB Class定义,usb_def.h:
/* USB Device Classes */
#define USB_DEVICE_CLASS_RESERVED 0x00
#define USB_DEVICE_CLASS_AUDIO 0x01
#define USB_DEVICE_CLASS_CDC 0x02
#define USB_DEVICE_CLASS_HID 0x03
#define USB_DEVICE_CLASS_MONITOR 0x04
#define USB_DEVICE_CLASS_PHYSICAL 0x05
#define USB_DEVICE_CLASS_IMAGE 0x06
#define USB_DEVICE_CLASS_PRINTER 0x07
#define USB_DEVICE_CLASS_MASS_STORAGE 0x08
#define USB_DEVICE_CLASS_HUB 0x09
#define USB_DEVICE_CLASS_CDC_DATA 0x0a
#define USB_DEVICE_CLASS_SMART_CARD 0x0b
#define USB_DEVICE_CLASS_SECURITY 0x0d
#define USB_DEVICE_CLASS_VIDEO 0x0e
#define USB_DEVICE_CLASS_HEALTHCARE 0x0f
#define USB_DEVICE_CLASS_DIAG_DEVICE 0xdc
#define USB_DEVICE_CLASS_WIRELESS 0xe0
#define USB_DEVICE_CLASS_MISC 0xef
#define USB_DEVICE_CLASS_APP_SPECIFIC 0xfe
#define USB_DEVICE_CLASS_VEND_SPECIFIC 0xff
本次问题出在了TOS-WLink代码对Class = 0不支持 ,宏显示是保留;一般来说厂商自己的设备比如CH340 USB转串, JLink,STLink这种都是Class = 0XFF,表示厂商自定义;
类必须要解析,加载的驱动预处理函数和类特别函数不一样; 如 #USB_DEVICE_CLASS_MASS_STORAGE 0x08;这是大容量存储,U盘;对它TOS-WLink要按照BOT,SCSI协议进行预读取,U盘信息,LNA、BLOCK,容量大小等;
定位到原因, 改写代码如下,增加reserved类支持:
CLASS_INFO_DEFINE const struct usbh_class_info class_info_reserved = {
.match_flags = USB_CLASS_MATCH_INTF_CLASS,
.class = 0x0,
.subclass = 0x00,
.protocol = 0x00,
.vid = 0x00,
.pid = 0x00,
.class_driver = &reserved_class_driver
};
编译后、会给出OTA固件,OTA升级测试验证,后面有新问题,如此循环;
2, 实在远程解决不了或者你没有时间抓日志
也可以到付邮寄给我你的USB设备,我调通后给出OTA版本再寄回你的USB设备;TOS-WLink不用寄,期间可以同步验证问题是否解决;
当然解决了,版本+1会更新到网盘;
总结: USB设备种类蛮多的;有时候猜不到到、有些厂商不按套路出牌,哪怕是USB转串(CP210X,FT232,CH340/343, PL230X),这各个厂家做法都不同,所以我视频中说过,PL230X的包最干净,但是也说不出厂家这么做有什么问题;
Linux源码 driver/usb, 同一USB的IP核,驱动作者也注释吐槽,哦,是飞思卡尔啊,一般情况别人PORT都是从1开始,你丫就非得从0开始,BUG? 代码处理增加分支,驱动层常常这样;看注释有时候比刷抖音好玩;
写在最后:TOS-WLink对我已测USB设备有边缘优化加速处理,如果你心爱且常用的USB设备想提速,不是不可以支持;前提你学会下图的wireshark抓包: