各位大虾,我是USB开发菜鸟,在用CH375做host控制打印机时,获取打印机的设备描述符不正确,请帮助查找错误原因。
1、现象描述
用BUS HOUND捕获到的设备描述符为:
23.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 9.1.0
23.0 DI 12 01 10 01 00 00 00 08 b8 04 05 00 00 01 01 02 03 01
但用我的CH375电路获取的描述符始终为:
12 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
单片机使用MEGA169,电路使用 CHECK_EXIST命令测试通过
2、程序相关部分如下:
void main()
{
//相关初始化
set_usb_mode( 6 ); // 设置USB主机模式
while ( wait_interrupt()!=USB_INT_CONNECT ); // 等待USB打印机连接上来
if ( init_print()!=USB_INT_SUCCESS )
while(1); // 错误
while ( 1 )
{
wdt_reset();
}
}
// 初始化USB打印机,完成打印机枚举
unsigned char init_print()
{
//#define p_dev_descr ((PUSB_DEV_DESCR)buffer)
//#define p_cfg_descr ((PUSB_CFG_DESCR_LONG)buffer)
PUSB_DEV_DESCR p_dev_descr;
PUSB_CFG_DESCR_LONG p_cfg_descr;
p_dev_descr=(PUSB_DEV_DESCR)buffer;
p_cfg_descr=(PUSB_CFG_DESCR_LONG)buffer;
unsigned char status, len, c;
status=get_descr(1); // 获取设备描述符
if ( status==USB_INT_SUCCESS )
{
len=rd_usb_data( buffer ); // 将获取的描述符数据从CH375中读出到单片机的RAM缓冲区中,返回描述符长度
if ( len<18 || (p_dev_descr->bDescriptorType)!=1 )
return( UNKNOWN_USB_DEVICE ); // 意外错误:描述符长度错误或者类型错误
if ( (p_dev_descr->bDeviceClass)!=0 )
return( UNKNOWN_USB_DEVICE ); // 连接的USB设备不是USB打印机,或者不符合USB规范
status=set_addr(3); // 设置打印机的USB地址
return(status);
}
// 数据读写, 单片机读写CH375芯片中的数据缓冲区
unsigned char rd_usb_data( unsigned char *buf )
{ // 从CH37X读出数据块
unsigned char i, len;
CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); // 从CH375的端点缓冲区读取接收到的数据
len=CH375_RD_DAT_PORT(); // 后续数据长度
*buf=len;
buf++;
for ( i=0; i!=len; i++ )
{
*buf=CH375_RD_DAT_PORT();
buf++;
}
return len;
} |