CH558的USB问题: 端点0的最大数据包长度(bMaxPacketSize0) 为什么不能设置为64字节

有一份从CH554移植过来的程序,其USB功能用于模拟一个游戏手柄(Full speed设备),其设备描述符如下:

UINT8C DevDesc[18] =    // -> usb_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为何又可正常运行. 求指点.


长度不只是一个宏定义,还有所有代码中涉及到长度处理的地方需要修改。242行len的赋值是直接与8做对比。

所有涉及到长度的地方都需要检查。image.png


是程序问题.似乎是Keil的一个bug导致


Ch554 也是遇到端点0最大数据包只能是8字节,设置64字节 BUS Hound显示MaxPacket=8

用软件测试也确实只能传8字节,还有那个位置需要设置吗?

1644973701253380.png

1644973701109104.png

1644973701413892.png


1644973701880922.png


      



注意设备是低速设备还是全速设备,低速设备EP0最大8字节


初始化还是有注意到的,设置如下是从例程修改的

微信截图_20220217103525.png


问题已经解决!

 Bus Hound虽然显示  Endpoint0 : Maxpacket=8

但端点0确实可以64位,先前是上位机程序的问题.j_0064.gif

微信截图_20220216091423.png

微信截图_20220217154518.png


我也遇到

怎么解决的


@空中之鹰

注意USB工作在全速还是低速:/bbs/thread-87143-1.html

代码中修改端点0长度宏定义“

DEFAULT_ENDP0_SIZE



只有登录才能回复,可以选择微信账号登录