lzyor 发表于 2024-3-21 09:49:38

【现象复盘】
考虑到描述符已经写成了代码中的常量,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个请求)。

所以移植的每一个程序都会在同样的地方出错,现象一致。

soma 发表于 2024-3-21 10:35:54

还以为sdcc和keil只有几条指令和配置不一样原理还有这个差别啊

hsrzq 发表于 2024-4-9 16:22:46

lzyor 发表于 2024-3-19 16:34
破案了,Keil是大端序,SDCC是小端序;
USB包是小端序,例程代码全都是为Keil写的,
对字节序全部做了转换 ...

这个地方最容易坑人了{:4_167:}

magic8421 发表于 2024-7-2 16:05:23

楼主请问有没有改好的例程给我们参考一下哈?

durongze 发表于 2024-8-16 19:20:30

多谢楼主,已知晓。
页: 1 [2]
查看完整版本: 【已解决】SDCC移植USB例程后不能正常枚举(是字节序的问题)