3.2 与PC机之间通信
与PC机进行通信,系统作为USB从设备时, 要应答PC主机的标准请求、处理USB总线事务和用户功能[6]。首先调用void USB_OTG_USBD_Init ()将USB OTG工作模式配置成从机模式,接着调用底层驱动API函数USB_OTG_USBD_EP_Open ()来激活端点进行数据传输,USB OTG定义了三个端点, 程序中定义端点0在控制传输中应答设备枚举,端点1的功能为向PC机发送数据, 端点2的功能为接受PC机发送的数据。PC主机枚举系统设备时, 必须先获得USB OTG端点的配置参数。最后通过调用如下的PCD层API函数完成SETUP包、IN包、OUT包的传输。
uint32_t USB_OTG_USBD_EP_Read();
uint32_t USB_OTG_USBD_EP_Write();
uint32_t USB_OTG_USBD_EP_Stall();
uint32_t USB_OTG_USBD_EP_ClrStall();
uint32_t USB_OTG_USBD_EP_Flush();
本文采用意法半导体公司互联型控制芯片STMF107集成的USB OTG接口, 在基于金牛开发板上实现了从设备和主机的数据传输,作为从设备, PC机端的应用程序可以通过USB OTG 开发板的SDRAM进行数据的读写,可稳定在500 kb/s;作为主机, 可以枚举连接到USB OTG 接口上的U盘实现了对U盘的读写,最高读写速率可达800 kb/s。
本文利用了STM32F107芯片高度集成的USB OTG接口,其开发系统性能好、可靠性高、开发方便,开发者只需在软件上编程实现数据传输。同时STM32芯片提供了相关固件库,在此基础上进行开发提高了效率。