WCH沁恒单片机
直播中

fdjslkjd

9年用户 1190经验值
擅长:光电显示
私信 关注
[问答]

CH558无法正常运行是为什么?

有一份从CH554移植过来的程序,其USB功能用于模拟一个游戏手柄(Full speed设备),其设备描述符如下:
UINT8C DevDesc[18] =    // -> u***_device_descriptor
{ 0x12, 0x01,
    00, 02,  //0x10,0x01,   
    0x00, 0x00, 0x00, // bDeviceClass, bDeviceClass, bDeviceProtocol
  64,    // bMaxPacketSize0
    0x0d, 0x0f, 0xad, 0x00, 0x00, 0x01, //0x3d,0x41,0x07,0x21,0x34,0x12,    // VID,PID,REV
    01, 02, 00,   
    0x01
};
这份代码在554上工作是正常的. 移植到CH558(修改了相关的寄存器配置)之后报告"获取设备描述符失败".


我找了官方的例程, 模拟Full Speed设备的只有一份:
"1,CH559/CH558模拟U盘,支持文件拷贝,删除,新建,文件读写,格式化等操作,存储介质采用2M的SPI flash。"



在这个例程中,bMaxPacketSize0也是被设置为8. 查USB协议,Full Speed设备是可以设置为8,16,32,64的. 为何CH558无法正常运行? 而CH554/CH552为何又可正常运行. 求指点.


回帖(4)

罗振炜

2022-5-12 15:41:20
长度不只是一个宏定义,还有所有代码中涉及到长度处理的地方需要修改。242行len的赋值是直接与8做对比。
所有涉及到长度的地方都需要检查。
举报

汪海源

2022-5-12 15:41:25
是程序问题.似乎是Keil的一个bug导致
举报

陈勇

2022-5-12 15:41:32
Ch554 也是遇到端点0最大数据包只能是8字节,设置64字节 BUS Hound显示MaxPacket=8
用软件测试也确实只能传8字节,还有那个位置需要设置吗?





举报

李海龙

2022-5-12 15:41:43
注意USB工作在全速还是低速:
代码中修改端点0长度宏定义“
DEFAULT_ENDP0_SIZE”
举报

更多回帖

发帖
×
20
完善资料,
赚取积分