CH559 HOST 模式 操作USB标签打印机问题

通过CH559连接USB打印机,如果打印机带有串口,通过USB口操作标签打印机,正常;如果打印机本身不带串口只有USB口,无法操作标签打印机通过调试发现

UINT8   USBHostTransact( UINT8 endp_pid, UINT8 tog, UINT16 timeout )

里面

            if ( U_TOG_OK )

            {

                return( ERR_SUCCESS );

            }

U_TOG_OK 的问题



sbit U_TOG_OK      = USB_INT_FG^6; // ReadOnly: indicate current USB transfer toggle is OK


为什么559 只能操作带有串口的usb标签打印机  ,而只有USB口的标签打印机却不行

这个toggle是USB数据包的一个简单的校验机制,在物理层中是按照一定的逻辑进行DATA0和DATA1的交换,这个是和传输过程紧密相关的。

打印机带串口和不带串口,那显然的就是不同的打印机,可能在USB通讯的整个过程中会有不同,这时候可以对USB底层进行抓包,看一下DATAX到底是多少,定位一下是设备传输错误还是芯片判断错误。还有我们在初始化USB的时候通常会打开AUTO_TOGGLE同步标志自动翻转功能,检查一下发送接收控制寄存器的自动翻转功能是否打开。


微信图片_20210924092504.png两个打印机的 描述 对比了一下 不同

不知道如何修改


这个是打印机的静态的一个描述符信息,我们需要关注的是USB枚举、传输过程中的动态的东西。简单的可以在电脑端用bushound软件看一下通讯过程,对比主机代码中是否有缺少的操作步骤(电脑软件抓包只具有参考意义,同时也无法排除单片机操作代码问题),最好是能够从硬件层面抓取电脑操作打印机的过程,和单片机操作的过程对比,即可找出问题


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