找回密码
 立即注册
楼主: lzyor

【已解决】SDCC移植USB例程后不能正常枚举(是字节序的问题)

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2024-08-08 21:16:41

5

主题

14

回帖

28

积分

新手上路

积分
28
发表于 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个请求)。

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-3-21 10:35:54 来自手机 | 显示全部楼层
还以为sdcc和keil只有几条指令和配置不一样原理还有这个差别啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-05-01 08:13:06
已绑定手机

27

主题

341

回帖

1687

积分

金牌会员

机长

积分
1687
发表于 2024-4-9 16:22:46 | 显示全部楼层
lzy*** 发表于 2024-3-19 16:34
破案了,Keil是大端序,SDCC是小端序;
USB包是小端序,例程代码全都是为Keil写的,
对字节序全部做了转换 ...

这个地方最容易坑人了
业余撸代码,专业开飞机
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-03-03 10:30:04

0

主题

13

回帖

156

积分

注册会员

积分
156
发表于 2024-7-2 16:05:23 来自手机 | 显示全部楼层
楼主请问有没有改好的例程给我们参考一下哈?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-05-01 18:20:12

79

主题

631

回帖

1132

积分

金牌会员

积分
1132
发表于 2024-8-16 19:20:30 | 显示全部楼层
多谢楼主,已知晓。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:10 , Processed in 0.113586 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表