下传数据流是由计算机应用层通过数据流下传API发起的,CH372以64个字节为一组,将一个较大的数据块分成多组提交给单片机;如果应用层发送150个字节的数据块,则单片机会被中断3次,前两次各取64字节,最后一次获取22字节。
上传数据流的发起方式有两种:一种是查询方式,指计算机应用层定期以查询方式发起;另外一种是伪中断方式,指单片机以中断数据通知计算机应用层,再由计算机应用层发起,因为USB总线是主从式结构,只有在计算机主动联系USB设备时,USB设备才能向计算机上传数据。
上传数据流以查询方式发起的系统中,计算机应用层总是通过数据上传API尝试读取数据。当
单片机没有数据需要上传时,计算机应用层就会一直等待(如果设置USB数据读超时则会退出),实际上该应用层程序的线程将会被操作系统挂起。当单片机需要上传数据时,应该将数据写入CH372批量端点的上传缓冲区中,接着计算机应用层自动取走数据,然后CH372以中断方式通知单片机上传成功,以便单片机继续上传后续数据。使用这种方式,建议用CH375SetBufUpload设定内部缓冲上传。
上传数据流以伪中断方式发起的系统中,计算机应用层初始化时设置一个伪
中断服务程序,然后应用层就不需要涉及上传数据流。当单片机需要上传数据时,首先将数据写入批量端点的上传缓冲区中,然后将中断特征数据写入中断端点的上传缓冲区中。在1ms之内(理论值),与中断特征数据对应的伪中断服务程序被激活,伪中断服务程序通知主程序调用数据上传API获得上传数据块。在此期间,单片机将会收到CH372通知的两次中断,首先是中断端点上传成功中断,然后是批量端点上传成功中断。