【求助】USB芯片和PC机通讯的疑问

主机在发起一个读取块端点请求的时候,开始的时候肯定是个令牌包,USB芯片收到后应该产生一个什么样的中断呢?即单片机在GET STATUS的时候,取得什么样的中断码呢?在CH372的应用手册中,只有如下三种: 09H 端点1发送完数据,IN事务成功 02H 端点2接受到数据,OUT事务成功 0AH 端点2发送完数据,IN事务成功 这三种情况显然都不适合。 敬请各位高手指点!

主要的中断有: #define USB_INT_EP0_SETUP 0x0C /* USB端点0的SETUP */ #define USB_INT_EP0_OUT 0x00 /* USB端点0的OUT */ #define USB_INT_EP0_IN 0x08 /* USB端点0的IN */ #define USB_INT_EP1_OUT 0x01 /* USB端点1的OUT */ #define USB_INT_EP1_IN 0x09 /* USB端点1的IN */ #define USB_INT_EP2_OUT 0x02 /* USB端点2的OUT */ #define USB_INT_EP2_IN 0x0A /* USB端点2的IN */


如上面所说,真正的中断状态是上面几个,而你所说的那几个只是在内置固件模式的情况下才用到的中断状态,实际上对于CH372,我们将端点0的操作全部作成固件写在372里面的了,目的是为了减少客户编程的时间,你如果想用到上面所说的没用到的状态的话,你只要将模式设置为0X01就可以了,那你就需要对端点0进行操作了,那这样的话就比较符合USB协议里面的操作流程了


我现在要设计一个用USB芯片和单片机采集信号的系统。 PC 发起一个读取的事务,先发一个IN令牌包,然后读取数据段,再返回一个ACK握手包。USB芯片肯定要通知单片机进行数据采集,我的问题是,USB芯片是以中断方式通知的吗?如果说是以中断方式通知的,那么单片机得到的中断码是什么?CH372是在哪个阶段发出的中断?是在接收到IN令牌并译码分析后才发出的中断吗?


你实际上可以这样做,你可以通过批量端点下传一个数据,这个时候375收到数据并且检测数据是正确的话,那么这个时候给计算机返回ACK,同时将375的INT脚拉低,通知单片机来取数据,单片机取走数据之后,分析是什么样的数据,如果是要求你采集的数据的话,这个时候你的单片机就进行数据采集,采集完数据之后在将数据通过批量端点将数据上传上去就可以了, 如果按照你上面的做法的话,你应该先进行一次数据采集,将采集的数据写到375被动的等待计算机将数据取走,如果单片机没有将数据写下去的话,计算机从375取数据的话,那么返回的是NAK,只有计算机将数据取走之后,375才会产生批量端点上传成功的中断状态,而不是你所理解的计算机发一个读取数据的令牌就会产生中断。


明白了,谢谢


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