[求助]CH376接打印机的问题,初始化可以,发送数据问题

主函数: mInitCH376Host(); // 设置为HOST模式 if(init_print()==0x14) // 初始化USB打印机 printf("打印机初始化成功!");delay_ms(50); send_data(1,printdata); printf("程序执行完毕!");

程序我是参考CH375 HOST的例程。 从串口得到的 设备描述符等: 通信测试正常! USB模式设置完成!模式5 USB模式设置完成!模式7 USB模式设置完成!设备已连接!模式6 init_print() >> p_dev_descr->bLength:0x12 init_print() >> p_dev_descr->bDescriptorType:0x1 init_print() >> p_dev_descr->bcdUSB:0x200 init_print() >> p_dev_descr->bDeviceClass:0x7 init_print() >> p_dev_descr->bDeviceSubClass:0x0 init_print() >> p_dev_descr->bDeviceProtocol:0x0 init_print() >> p_dev_descr->bMaxPacketSize0:0x10 init_print() >> p_dev_descr->idVendor:0x471 init_print() >> p_dev_descr->idProduct:0x2379 init_print() >> p_dev_descr->bcdDevice:0x100 init_print() >> p_dev_descr->iManufacturer:0x1 init_print() >> p_dev_descr->iProduct:0x2 init_print() >> p_dev_descr->iSerialNumber:0x0 init_print() >> p_dev_descr->bNumConfigurations:0x1

-------------- init_print() >> p_cfg_descr->bLength:0x9 init_print() >> p_cfg_descr->bDescriptorType:0x2 init_print() >> p_cfg_descr->wTotalLength:0x20 init_print() >> p_cfg_descr->bNumInterfaces:0x1 init_print() >> p_cfg_descr->bConfigurationValue:0x1 init_print() >> p_cfg_descr->iConfiguration:0x0 init_print() >> p_cfg_descr->bmAttributes:0xc0 init_print() >> p_cfg_descr->MaxPower:0x32

-------------------------- init_print() >> p_itf_descr->bLength:0x9 init_print() >> p_itf_descr->bDescriptorType:0x4 init_print() >> p_itf_descr->bInterfaceNumber:0x0 init_print() >> p_itf_descr->bAlternateSetting:0x0 init_print() >> p_itf_descr->bNumEndpoints:0x2 init_print() >> p_itf_descr->bInterfaceClass:0x7 init_print() >> p_itf_descr->bInterfaceSubClass:0x1 init_print() >> p_itf_descr->bInterfaceProtocol:0x2 init_print() >> p_itf_descr->iInterface:0x0

-------------- init_print() >> endp_descr-> init_print() >> endp_descr->bDescriptorType:0x5 init_print() >> endp_descr->bEndpointAddress:0x2 init_print() >> endp_descr->bmAttributes:0x2 init_print() >> endp_descr->wMaxPacketSize:0x40 init_print() >> endp_descr->wMaxPacketSize1:0x0 init_print() >> endp_descr->bInterval:0x0

-------------------------- init_print() >> endp_descr->bLength:0x7 init_print() >> endp_descr->bDescriptorType:0x5 init_print() >> endp_descr->bEndpointAddress:0x83 init_print() >> endp_descr->bmAttributes:0x2 init_print() >> endp_descr->wMaxPacketSize:0x40 init_print() >> endp_descr->wMaxPacketSize1:0x0 init_print() >> endp_descr->bInterval:0x0

-------------------------- init_print() >> endp_descr-> init_print() >> endp_descr->bDescriptorType:0x0 init_print() >> endp_descr->bEndpointAddress:0x0 init_print() >> endp_descr->bmAttributes:0x0 init_print() >> endp_descr->wMaxPacketSize:0x0 init_print() >> endp_descr->wMaxPacketSize1:0x0 init_print() >> endp_descr->bInterval:0x0

-------------------------- init_print() >> endp_descr->bLength:0x0 init_print() >> endp_descr->bDescriptorType:0x0 init_print() >> endp_descr->bEndpointAddress:0x0 init_print() >> endp_descr->bmAttributes:0x0 init_print() >> endp_descr->wMaxPacketSize:0x0 init_print() >> endp_descr->wMaxPacketSize1:0x0 init_print() >> endp_descr->bInterval:0x0

打印机初始化成功! endp_in_addr:0x3 endp_out_addr:0x2 endp_out_size:0x40 成功发送!程序执行完毕!

我用BUS Hound直接发送ASCII数据就可以打印,用CH376这样可以吗?

如果你前面初始化正常通过的话,使用send_data()把打印机识别的数据发送到对应OUT端点,打印机是可以正常打印的。 有几个问题,你配置描述符的大小是0x20,后面多了14个字节?注意一下打印机数据发送的端点号是否正确,同步标志默认DATA0。你可以进入send_data()这个函数里面监控一下。


后面14个字节没有配置,用串口输出的端点0到3的描述符。send_data里面的端点号是0x2,我把程序发到你邮箱了,帮我看一下吧,谢谢了。关于CH376的程序大部分都没改动。


用BUS Hound直接发送的数据 和 用函数send_data()发送的数据 效果是一样的吗?201412616214362.jpg


如果端点号正确的话,效果应该是一样的。你可以使用USB分析仪监控一下CH376发出的USB数据,与电脑端比对一下。


端点号就是从描述符里面的endp_out_addr:0x2 是吗?我这里没有USB总线监控器,第一次接触USB。


是的 还需要注意的是否电脑枚举的所有命令都用CH376模拟实现,最好还是用分析仪监控一下两种情况,再做对比。


我用BUS BOUND抓取的初始化过程有多次的获取描述符,并且用两个接口!!,如果用单片机+CH375当主机的话,用完全符合这样的流程吗?我用的打印机是HP Deskjet 1000 J110 在用BUS BOUND抓数据时 选择设备有很多层 20—ROOT HUB √32—USB Composite Device √33—USB打印支持 √34—HP Deskjet 1000 J110 series (REST) 打勾是我选的,感觉不对,如果用单片机+CH375需要抓哪些设备的数据是仅仅要34设备的数据吗?


单片机控制CH375操作打印机的流程基本要上与BUS HOUND抓到的数据要一致,像设备描述符、配置描述符只需要完整的获取一次即可,像字符串描述符是不影响打印机操作的。 抓数据的话那三个都需要勾选,都是指的同一个设备,只是不同层而已。因为是复合设备所以会分两个接口。


哦哦,了解了,谢谢。我用的这款打印机用的打印机语言是PCL3 GUI 可是找不到它的命令手册,不知道您有没有或者知道哪里可以找到?如果有的话麻烦您发到我邮箱个人信息保护,已隐藏 之后有什么问题再向您请教,谢谢


我们这边没有相关资料,这些资料最好和打印机厂商要,在其他地方找的不全。


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