3 USB控制部分
USB控制部分使用USB接口控制芯片CH372来实现数据的接受和发送。CH372是一个USB总线的通用设备接口芯片,CH372在单片机端,具有8位数据总线和读、写、片选控制线以及中断输出,因此可以方便地挂接到单片机/DSP/MCU等控制器的系统总线上;在计算机系统中,CH372的配套软件提供了简洁易用的操作接口,因此,与本地端的单片机通讯就如同读写文件一样简单。
CH372在计算机端提供有应用层接口,应用层接口是由CH372动态链接库DLL提供的面向功能应用的API,所有API在调用后都会有操作状态返回,但不一定有应答数据。CH372动态链接库提供的API包括:设备管理API、数据传输API、中断处理API等。
在应用层设计中,笔者采用的是请求加应答的方式。该方式使用一个下传的主动请求和一个上传的被动应答进行交互式双向数据通讯,下传与上传一一对应,相互关联。主动请求是指由计算机应用层下传给单片机的数据请求,被动应答则是单片机收到数据请求后,上传给计算机应用层的应答数据。所有的通讯都由计算机应用层发起,然后以接收到单片机的应答结束,其完整的过程包括如下步骤:
(1) 计算机应用层按事先约定的格式将数据请求发送给CH372芯片;
(2) CH372芯片以中断方式通知单片机;
(3) 单片机进入中断服务程序,以获取CH372的中断状态并分析;
(4) 如果是上传,则释放当前USB缓冲区,然后退出中断程序;
(5) 如果是下传,则从数据下传缓冲区中读取数据块;
(6) 分析接收到的数据块,准备应答数据,或者先退出中断程序再处理;
(7) 单片机将应答数据写入批量端点的上传缓冲区,然后退出中断程序;
(8) CH372芯片将应答数据返回给计算机;
(9) 计算机应用层接收到应答数据。
在单片机端,CH372芯片占用两个地址位,当A0引脚为高电平时,系统选择命令端口,此时可以写入命令;当A0引脚为低电平时,选择数据端口,此时可以读写数据。单片机通过8位并口对CH372芯片进行读写时,所有操作都是由一个命令码、若干个输人数据和若干个输出数据组成。
但部分命令不需要输入数据,而部分命令也可以没有输出数据。
CH372芯片专门用于处理USB通讯。在接收到数据或发送完数据后,CH372将以中断方式通知单片机进行处理。单片机通过CH372接收和发送数据的流程图如图3所示。