我现在和HP打印机相连,前面的枚举过程都挺顺利,但是到了批量传输数据的时候,却不知道怎么进行批量传输,批量传输的指令是怎么样的?怎么实现的?哪位大虾可以帮我一下,谢谢!
一般打印机也只有上传和下传端点,就向上传端点送炸数据就行了,一般的端点地址都为0x01,小数的有0x02,0x03的都有,具体就要看端点描述符了,这个也不用说了,不明看协议吧,不然要USB协议来干嘛, 下传的地址一般为0x81,
关于主机端的批量数据发送,你首先要知道什么哪个端点是批量端点,这个你可以去参考USB协议里面关于描述符的介绍,还有就是你在发送数据的时候一定要同步,还有就是你在发送数据的时候,如果是批量传输的话,那么你的前面的数据每次都是64字节,只有最后一次可以不是64字节,同时,你要先将数据写到375,然后在发送令牌请求数据输出。
我试来试去,好象都不行呀,谁可以帮助我一下呀?
你可以下载CH375HST里面有一个关于打印机的例子程序,那个批量传输你是可以参考的
因为我看了CH375的那个芯片介绍,里面根本没有介绍批量传输的内容,特别没有介绍主机输出的具体内容,包括issue_token的具体用法,只介绍了输入和控制的用法,输出没有太仔细的介绍,所以搞不太懂了.
你可以下载CH375DS2里面关于外置固件的有介绍
是不是我只要先wr_usb_data7把数据发送到主机的输出缓冲区里,然后用issue_token输出就可以了呢? 如果数据长度不为8的倍数,发出后会是什么情况?
我现在就是搞不懂批量传输的具体指令执行情况和方法?特别是输出指令.
那是USB的协议里面的,实际上我们的外置固件还是将一些USB协议写好了,你要想了解清楚的话你可以看USB1。1的协议
我不是这个意思,我是说你们不是有说可以支持块传输指令的吗?我是看到你们说可以用issue_token的方式进行DATA输出,但是我一直搞不懂怎么进行DATA输出,具体步骤是怎么样的?是不是就是WR_USB_DATA7先把数据送到CH375主机的输出缓冲区里面(是哪一个缓冲区啊?),然后用ISSUE_TOKEN进行DATA输出啊?是不是执行了ISSUE_TOKEN后CH375缓冲区里的值就自动传到了设备去了啊?那么传输的数据长度由什么来控制呢?
是这样的,首先单片机将数据写到375中,接着在发送令牌(令牌的命令是请求数据输出),当令牌发送成功之后,那么就将375中的数据在写到USB设备中,在USB协议中规定,批量传输中,当传输的数据大于64字节的时候,前面传输的数据都必须是64字节,只有最后一次的数据可以不是64字节,当设备检测到传输的数据是小于64字节或者是 0字节的包的话,那说明数据传输完了
哦,谢谢hcn,我现在的疑问是比如我要发送一个6个字节或者就1个字节的数据,我也使用块传输可以吗?在使用issue_token发送了令牌以后是不是就自动将CH375中的数据自动写到USB设备中去呢?还有数据写到USB设备中以后USB设备会不会返回一些握手信号呢?CH375自身去处理吗?
发送6个或者一个都是一样的,USB设备会返回一些握手信号,我们的375进行处理之后就产生中断告诉单片机是哪中状态,在发送子程序里面不是有ACK,NAK和STALL三种中断判断吗?就在那进行判断
哦,非常谢谢hcn,还有发送6个或者1个字节的数据时CH375是不是在发送令牌以后只发送这1个或者6个数据,会不会必须要发送8个或者16个这样的数据呢? 另外在主机方式下发送wr_usb_data7需要进行DATA0和DATA1之间的转换?
hcn,在主机方式下想CH375发送数据时需要进行DATA0和DATA1之间转换吗?如何转换呢?