CH375外部固件、端点0最大包

unsigned char code DevDes[]={ 0x12 //描述符大小 , 0x01 //常数DEVICE , 0x10 //USB规范版本信息 , 0x01 , 0x00 //类别码, , 0x00 //子类别码 , 0x00 //协议码 , 0x08 //端点0的最大信息包大小 , 0x3c //厂商ID , 0x41 , 0x03 //产品ID , 0x20 , 0x00 //设备版本信息 , 0x02 , 0x01 //索引值 , 0x02 , 0x00 , 0x01 //可能配置的数目 };

如上面的描述符一样,设备一切正常,也能正常上传18个字节! 当把 端点0的最大信息包大小 改为0x40时,只能上传16个字节!

其中0x10、0x20试过了,都也不可以!

怀疑设备工作在低速方式引起,也设置成全速方式!还是不可以!

非常奇怪,不清楚为什么?

CH375的端点0大小就是8个字节的。不能改大。 端点为8不能说明为低速方式。批量端点不是64吗? CH375支持FULL SPEED 和LOW SPEED两种速度


是的,你说的对,但是CH375pdf文档第十页所可以设置成0x08、0x10、0x20、0x40的。 端点0的数据是8个,我设置的只是最大包的大小,应该还是没关系的。

速度我设定为FULL SPEED,通过下面的方式设置的。 CH375_WR_CMD_PORT(0x04); CH375_WR_DAT_PORT( 0x00 );

我希望能够仿真一个描述符,如果是0x08不能完全仿真。 期待知道问题在那里?


FULL SPEED你不用设置。 默认就是FULL SPEED 至于第10页说的是USB协议要求的。并不是CH375的特性。CH375的端点0大小是8,在上传描述符的时候不能大于8,否则会产生错误。 不知道您的具体问题在哪里?


是这样的,我仿真一个打印机。打印机的描述符是这样的。 unsigned char code DevDes[]={ 18,0x01,0x00,0x02,0xff,0xff,0xff,0x40, //0x08, 0x4f,0x15,0x4f,0x15,0x00,0x00,0x00,0x00, 0x00,0x01 }; 当我这样做的时候,可以检查到打印机设备,但是在安装的过程中蓝屏,重复几次,都是这样!

于是我采用68013试了一下,是可以仿真出这个描述符,然后安装上面都没有问题! 我就为此烦恼那?


应该不是这个设备描述符的问题。因为要设备描述符是和驱动无关的。是USB主机驱动自己来做的,这时候还没涉及都驱动层。 是不是有部分命令应答不对?


上面没说完整! 是这样的,我仿真一个打印机。打印机的描述符是这样的。 unsigned char code DevDes[]={ 18,0x01,0x00,0x02,0xff,0xff,0xff,0x40, //0x08, 0x4f,0x15,0x4f,0x15,0x00,0x00,0x00,0x00, 0x00,0x01 }; 当我把0x40改成0x08的时候,可以检查到打印机设备,但是在安装的过程中蓝屏,重复几次,都是这样! 如果直接使用0x40,则描述的18个字节,只能传上16个!

于是我采用68013用0x40试了一下,是可以仿真出这个描述符,然后安装上面都没有问题!

我就为如何枚举出0x40烦恼那?


unsigned char code DevDes[]={ 0x12 //描述符大小 , 0x01 //常数DEVICE , 0x10 //USB规范版本信息 , 0x01 , 0x00 //类别码, , 0x00 //子类别码 , 0x00 //协议码 , 0x08 //端点0的最大信息包大小 , 0x3c //厂商ID , 0x41 , 0x03 //产品ID , 0x20 , 0x00 //设备版本信息 , 0x02 , 0x01 //索引值 , 0x02 , 0x00 , 0x01 //可能配置的数目 };

如上面的描述符一样,设备一切正常,也能正常上传18个字节!


因为我就更换了相关的描述符就不可以了,而且我更改68013为全速模式,将其中的0x40更改为0x08就也不能上传全部的描述符了,很是奇怪!第一次关注这么奇怪的问题!


修改这个描述符不是这么简单的,如果从0X40修改为0X08,而你的程序并没有相应的修改的话,原来传输设备描述符只要1个包就可以传输完毕,现在需要3个数据包才可以传输完毕,所以是不正确的。 如果修改为0X08,而程序一个包就传输了0X12数据,PC会认为错误的。


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