[求助]请教375打印问题?

我购买了你们的CH375+CH341开发板,在调试供的打印程序时,init_print()程序有问题,不知道什么原因? 1.执行status=get_descr(1);指令后, status=0x14,正确.

2.执行status=set_addr(3);指令后, status=0x14,正确. 3.执行status=get_descr(2); 指令后, status=0x17,不正确,其含义为USB控制传输数据太多,缓冲区溢出,扣面的程序就无法运行了,请用如何解决?

我用的打印机是HP-1015,请高手指点.

status=get_descr(2); 返回控制传输数据太多,缓冲区溢出.这时候要参考USB协议用外部固件来实现USB描述符的读取.


有没有源程序,请提供一下,多谢!


你是用的内部固件的简化命令来读取描述符的, 你可以试一下用外部固件方式试一下: 下面是个大概的流程: set_addr(3);后需要set_usb_addr(3); unsigned char get_descr_ex() { unsigned char descr_len; unsigned char *p=data_buf; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf); if(issue_token(0x0d)==USB_INT_SUCCESS) { endp6_mode=0xc0; toggle_recv(); } else printf("setup failed\n"); if(issue_token(0x09)==USB_INT_SUCCESS) { if(flag_config_2)descr_len=data_buf[2]-rd_usb_data(data_buf); else descr_len=data_buf[0]-rd_usb_data(data_buf); while(descr_len>0) { toggle_recv(); p+=0x08; if(issue_token(0x09)==USB_INT_SUCCESS) descr_len-=rd_usb_data(p); else printf("data in again failed\n"); } } else printf("data in failed\n"); endp7_mode=0xc0; toggle_send(); wr_usb_data(0,Request.Req_buf); if(issue_token(0x01)==USB_INT_SUCCESS) return(1); else printf("status failed\n"); }

printf("get device descr \n"); Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0001; Request.Req.wIndex=0x0000; Request.Req.wLength=0x1200; printf("device descr = "); if(get_descr_ex()==1) { for(i=0;i!=data_buf[0];i++) printf("%02x ",(unsigned int)data_buf[i]); printf("\n"); } else printf("get device descr failed\n");

printf("get config descr \n"); Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0002; Request.Req.wIndex=0x0000; Request.Req.wLength=0x0900; printf("config descr = "); if(get_descr_ex()==1) { for(i=0;i!=data_buf[0];i++) printf("%02x ",(unsigned int)data_buf[i]); printf("\n"); } else printf("get config descr failed\n");


谢谢,我试试!


我编写了一个外部固件的方法读取描述符的程序,在调试时出现以下问题: 如1: 正确数据: 12 01 10 01 - 00 00 00 08 - f0 03 17 0e - 00 01 01 02 03 01 程序收到的数据 12 01 10 01 - 00 00 00 08 03 01 如2: 正确数据: 09 02 4e 00 - 01 01 00 c0 - 01 09 04 00 - 00 03 07 01 03 00 07 05 - 01 02 40 00 - 00 07 05 81 - 02 40 00 00 07 05 82 03 - 08 00 ff 09 - 04 00 01 02 - 07 01 02 00 07 05 01 02 - 40 00 00 07 - 05 81 02 40 - 00 00 09 04 00 02 01 07 - 01 01 00 07 - 05 01 02 40 - 00 00 程序收到的数据 09 02 4e 00 - 01 01 00 c0 03 00 07 05 - 01 02 40 00 07 05 82 03 - 08 00 ff 09 07 05 01 02 - 40 00 00 07 00 02 01 07 - 01 01 00 07 每次丢失后面的8位数据,请各位大侠指导一下。


set_addr(3);和set_usb_addr(3);有什么区别?我怎么找不到set_usb_addr(3);


中间的部分数据丢失,就不可能是操作设备时没返回,那一定是你程序上或存描述符的缓冲区上有问题 set_addr(3);和set_usb_addr(3);见CH375DS2.PDF


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