目录
概述
Stm32F103集成了USB全速设备接口(USB)和USB OTG全速(OTG_FS)两个模块。
USB全速设备接口只支持做USB设备,OTG_FS是双重角色设备(DRD)控制器,支持主机端和设备端的功能。
图 1USB设备框图
图 2OTG_FS框图
USB全速设备接口
标准USB共四根线组成,除VCC/GND外,另外为D+,D-;这两根数据线采用的是差分电压的方式进行数据传输的。在USB主机上,D-和D+都是接了15K的电阻到低的,所以在没有设备接入的时候,D+、D-均是低电平。而在USB设备中,如果是高速设备,则会在D+上接一个1.5K的电阻到VCC,而如果是低速设备,则会在D-上接一个1.5K的电阻到VCC。这样当设备接入主机的时候,主机就可以判断是否有设备接入,并能判断设备是高速设备还是低速设备。
STM32F103的MCU自带USB从控制器,符合USB规范的通信连接;USB主机和微控制器之间的数据传输是通过共享一专用的数据缓冲区来完成的,该数据缓冲区能被USB外设直接访问。这块专用数据缓冲区的大小由所使用的端点数目和每个端点最大的数据分组大小所决定,每个端点最大可使用512字节缓冲区(专用的512字节,和CAN共用),最多可用于16个单向或8个双向端点。USB模块同USB主机通信,根据USB规范实现令牌分组的检测,数据发送/接收的处理,和握手分组的处理。整个传输的格式由硬件完成,其中包括CRC的生成和校验。
每个端点都有一个缓冲区描述块,描述该端点使用的缓冲区地址、大小和需要传输的字节数。当USB模块识别出一个有效的功能/端点的令牌分组时,(如果需要传输数据并且端点已配置)随之发生相关的数据传输。USB模块通过一个内部的16位寄存器实现端口与专用缓冲区的数据交换。在所有的数据传输完成后,如果需要,则根据传输的方向,发送或接收适当的握手分组。在数据传输结束时,USB模块将触发与端点相关的中断,通过读状态寄存器和/或者利用不同的中断来处理。
整个USB通信的详细过程十分复杂,自己动手编写USB驱动是一件相当困难的事情,尤其对于从没了解过USB驱动的人来说,不花上一两年的时间是没法搞定的。好在ST提供了一套完整的USB驱动,大大缩短了开发时间。
USB OTG全速(OTG_FS)
OTG_FS是双重角色设备(DRD)控制器,支持主机端和设备端的功能,完全遵从On-The-Go Supplement to the USB2.0规范。同时,该控制器也可配置为仅支持主机端或仅支持设备端功能的控制器,遵从USB2.0规范。在主机模式下,OTG_FS支持全速(FS, 12Mbits/s)和低速(LS, 1.5Mbits/s)通信,而在设备模式下,支持全速(FS, 12Mbits/s)通信。OTG_FS控制器支持HNP和SRP协议。外围仅在主机模式下需要配置一个针对VBUS的电荷泵,即可完成设计。
主机模式功能
OTG_FS控制器接口:
● 需要一个外置的电荷泵为VBUS供电
● 支持最多8个主机通道,每个通道都可以动态的配置为任意一种传输类型
● 内置硬件调度控制器:
─ 在周期性硬件传输请求队列中支持多达8个中断和同步传输请求
─ 在非周期性硬件传输请求队列中支持多达8个控制和大容量传输的传输请求。
● 为有效地使用RAM空间,USB的数据RAM区划分为一个共享的接收FIFO、一个周期性发送FIFO和一个非周期性发送FIFO。
设备模式功能
OTG_FS控制器接口:
● 提供1个双向的控制端点0
● 提供3个IN端点,支持大容量、中断或同步传输
● 提供3个OUT端点,支持大容量、中断或同步传输
● 为有效地使用USB的数据RAM区,管理一个共享的接收FIFO,和一个发送OUT FIFO
● 管理多达4个专用的发送IN FIFO(为每个IN端点配置一个FIFO),以便减少应用程序的负荷
● 支持软件的断开连接功能。