调试工具用的是“USB设备CH372或CH375简单调试工具”和USBTrace 请问: 端点2的上传事务,是在“case USB_INT_EP2_IN: ”中处理吗?
case USB_INT_EP2_IN: 表示上次上传成功中断状态, 什么时候处理上传事务,可以由程序决定。
明白 我用端点2上传数据 需要写REG_USB_LENGTH以表示数据长度 而同时读这个寄存器REG_USB_LENGTH又为当前USB 传输的接收长度 是不是意味着这个寄存器的值是一直在变动的? 那么 我每次上传数据前 是否都需要重写这个寄存器?
是的。
我实际测试了一下,发现我只在初始化的时候写了一次REG_USB_LENGTH,中间下传过几次长度不等的数据之后再上传数据,仍然成功(收到的数据长度是PC调试软件规定的长度) 不知道这是怎么回事
USB是分时传输的。半双工传输方式。接收数据要去读长度寄存器,发送时要写长度寄存器。
你可以在长传前读一下长度寄存器的值是多少,把数据写进去之后再读出来看看是多少。 不能排除操作流程有问题和偶然性因素,不可以这样做,每次上传数据前必须正确的写入长度寄存器。
这个半双工的模式我能理解 我现在是这样 初始化的时候写REG_USB_LENGTH为8 然后就是下传事务 读REG_USB_LENGTH为64 然后再上传数据,此时我只是写RAM_ENDP2_TRAN的内容,并没有写REG_USB_LENGTH 此时传输也是正确的
我明白你的意思。你按照我说的流程测试一下。看看REG_USB_LENGTH 的长度是多少。 你上传了多少数据?
你这种模式是不正确的,你如果写的数据长度是一样的数据可能没问题,但是如果数据长度不一样就可能出现问题了,建议你还是加上些长度,只有些了长度之后,我们的芯片才会给你发一个你真正要发送的数据长度。
明白 真正通信的时候肯定是要写数据的 我只是想了解一下 芯片的工作原理 我感觉手册上说的不是很清楚 很多功能需要看例程去了解
一般USB芯片都有长度寄存器。否则根本就不知道接收和要发送的数据长度是多少。数据肯定能发送出去。但是发送的长度就是长度寄存器里的长度。
“4楼”:中途下传过数据之后,REG_USB_LENGTH中就上上次的数据长度(用a表示),如果这个时候不对REG_USB_LENGTH赋新值,此时再上传的话,那么数据长度就是a,本次的传输也是成功的,PC调试软件接收到的数据长度是规定长度和a中二者较小的