TOS-WLink 的USB使用CherryUSB开源库;以下是错误码;需要了解的可以下载CherryUSB代码查看分析:
usb_errno.h中
#define USB_ERR_NOMEM 1
#define USB_ERR_INVAL 2
#define USB_ERR_NODEV 3
#define USB_ERR_NOTCONN 4
#define USB_ERR_NOTSUPP 5
#define USB_ERR_BUSY 6
#define USB_ERR_RANGE 7
#define USB_ERR_STALL 8
#define USB_ERR_BABBLE 9
#define USB_ERR_NAK 10
#define USB_ERR_DT 11
#define USB_ERR_IO 12
#define USB_ERR_SHUTDOWN 13
#define USB_ERR_TIMEOUT 14
1~5, 字面意思理解就好,类似防御性编程;
需要注意这个错误码对应用调用者友好;不能完全指向底层的USB IP核的硬件错误;需要切实了解底层的硬件错误原因,最好去自己的USB IP核查看,这些错误码有些是多个硬件错误码或出来的置位的;
6号USB_ERR_BUSY错误,创建URB之前的状态字会置为6,注意下次创建该端点的URB前最好手动清除它,你不能保证底层确实清除了它;否则就是urb没创建就已退出;它并不直接指向具体硬件错误,当然URB执行没错误它会被清除;但是有时候底层USB并不是致命错误,比如toogle翻转下,不要因为下一次就总线会恢复的错误导致提前就函数退出了,而且是不断电上电,一直认为自己错了;
7号错误是msc, 优盘类存储的block专属,不介绍了;
8号错误:STALL,在USB通信中常常发生,对发生该故障的端点Clear Feture通常可以恢复该错误;打个比方,你和兄弟打台球,突然你不小心撮到他了一下,没错,他就是矫情,你道个歉,他就和你继续玩,当然有时候也不顶事;那就容易进入道歉死循环;
9号,packet数据超出了长度的,在STM32数组越界,应该进入xxxx_fault中断了吧,好多年不写STM32,Cortex-Mx的代码了,记不清了;
10 字面意思理解就好,可查USB总线术语;像极了已读不回的女友;
11 当前版本没有用到;
12 致命错误,传输错误,覆盖9号 + 10号;TOS无线USB助手日志看到这个(-12)基本需要复位了;
13 不能完全算错误,常用于端点初始状态,或者拔出了USB;
14 严重的错误,超时,比如设置500ms发送,500ms到了,发送还是没有完成;这里需要去看底层的urb的quenue等资源了,是不是又什么BUG;卡住了队列;当然最好情况是设置超时时间小了,加大就行;
总结:TOS无线USB助手日志可能会给出:
-12 错误,致命错误;
-8 如果在枚举阶段多次也是致命的;
-6 和 -14也有可能;
不要害怕修改底层,寄存器相关的底层开源软件,很多时候还是需要你自己对照USB IP核寄存器去修改甚至全部改写成自己项目需要的;
TOS-WLink底层USB IP核的手册,被我翻烂了都,而且是骂骂咧咧的,当然真遇到底层问题,有经验的攻城狮懂得,卡你个7 * 7 = 49天,你还一点办法都没有;只能狂掉头发;