考虑到描述符已经写成了代码中的常量,USB枚举过程中实际上只有一些长度字段是多字节的。
长度字节颠倒后相当于向主机报告想要发送长达10000字节的描述符,主机显然不支持。
Linux直接报错-75,这个错误代码在 /usr/src/linux-headers-6.1.0-1035-oem/include/uapi/asm-generic/errno.h 定义:
#define EOVERFLOW 75 /* Value too large for defined data type */
就是说溢出了,枚举失败(逻辑分析上看大概尝试了3次,io共26个请求)。
Windows似乎更宽容一些,虽然不太对但是还是接受了描述符,可能是因为第一次发包时本来就不知道端口大小。
所以从抓包上看,只接收了第一个描述符,实际上后几个描述符都发送并接收了,但是不正确被忽略了(逻辑分析上看大概尝试了2次,io共20个请求)。
所以移植的每一个程序都会在同样的地方出错,现象一致。
还以为sdcc和keil只有几条指令和配置不一样原理还有这个差别啊 lzyor 发表于 2024-3-19 16:34
破案了,Keil是大端序,SDCC是小端序;
USB包是小端序,例程代码全都是为Keil写的,
对字节序全部做了转换 ...
这个地方最容易坑人了{:4_167:} 楼主请问有没有改好的例程给我们参考一下哈? 多谢楼主,已知晓。
页:
1
[2]