一、USB发展历史
USB协议版本有:USB1.0、USB1.1、USB2.0、USB3.0。
USB1.0和USB1.1只有低速模式(Low-SpeedMode)和全速模式(Full-Speed Mode),理论上最大传输速率分别为1.5Mbps和12Mbps。
USB2.0除了拥有USB1.1中规定的1.5Mbps和12Mbps两个传输模式以外,还增加了480Mbps高速数据传输模式(注:第二版USB2.0的传输速率将达800Mbps,最高理想值1600Mbps)。虽然USB2.0的传输速度大大提升了,但其工作原理和模式是完全与USB1.1一样的,而提高到480 Mbps的传输速度的最关键技术就是提高单位传输速率:
USB3.0最大传输速率理论值高达5Gbps。USB3.0 引入全双工数据传输。5根线路中2根用来发送数据,另2根用来接收数据,还有1根是地线。也就是说,USB3.0可以同步全速地进行读写操作。以前的USB版本并不支持全双工数据传输。
USB3.0与USB2.0的外观区别包括:
颜色:USB3.0接口通常是蓝色,而USB2.0是黑色或白色。(具体还是要看厂家定义)
插口引脚:USB3.0有9针脚,而USB2.0只有4针脚。
标识:USB3.0插口旁边通常有“SS”标志,代表“SuperSpeed”
USB2.0接线
USB3.0接线
4根用于数据传输,2根用于电源供应,剩下的3根则用于地线和屏蔽
二、USB简介
2.1 USB概念
USB有USB1.0/1.1/2.0/3.0多个版本,标准USB由4根线组成,VCC,GND,D+,D-,其中D+和D-是数据线,采用差分传输。在USB主机上,D-和D+都是接了15K的电阻到地,所以在没有设备接入的时候,D+、D-均是低电平。而在USB设备中,如果是高速设备,则会在D+上接一个1.5K的电阻到VCC,而如果是低速设备,则会在D-上接一个1.5K的电阻到VCC,当设备接入主机时,主机就可以判断是否有设备接入,并能判断设备是高速设备还是低速设备。有些芯片内部有两个USB控制器,名称分别为USB_OTG_FS和USB_OTG_HS。其中HS代表实现高速480Mbps速度模式通信。FS意为全速,速度为12Mbps。HS高速模式必须外接PHY芯片才能实现,例如USB3300等。
2.2 USB速度
USB2.0 支持三种速度:
- 低速 (LS):支持 1.5 Mb/s 的传输速率。此速度主要专用于交互式设备(例如鼠标、键盘)
- 全速 (FS):支持 12 Mb/s 的传输速率。此速度主要专用于电话和音频设备(如麦克风、扬声器)
- 高速 (HS):支持 480 Mb/s 的传输速率。此速度主要专用于视频和存储设备(如打印机、相机)
在协议级别,USB 提供了非常高的兼容性,因此用户看不到处理不同速度之间的巨大差异。
2.3 USB模式
单片机的几种应用场景:
⭐OTG的意思是既可以做USB HOST,也可以做USB DEVICE。
⭐USB Host是单片机充当主机,单片机可以读取和转载USB中数据。
⭐USB Device是单片机充当从机,单片机作为一个USB移动设备,通过USB连接到电脑上,类似U盘。
USB在不同应用场景下可以充当的角色:
HID(Human Interface Device):人机接口设备,用于与人类交互,例如键盘、鼠标、游戏手柄等。
MSC(Mass Storage Class):大容量存储类,用于存储数据,例如闪存驱动器、移动硬盘等。
CDC(Communication Device Class):通信设备类,主要用于支持串行通信和数据传输。CDC设备允许计算机和设备之间进行数据交换,通常应用于各种通讯设备,如调制解调器、网络适配器和串行设备等。
当我们需要官方例程运行代码时,此时需要明白每一个工程的含义。
2.4 设备状态
从完全分离到被 USB Host 完全识别并确保其功能,USB 设备会经历连续的阶段:
- Attached:这是设备物理连接到 USB 主机但尚未通电的阶段。这个阶段主要由硬件来保证。
- 已通电:这是第二阶段,对应于连接到 USB Host 并刚刚通电的设备。这个阶段主要由硬件来保证。
- Default:当连接的设备通电,然后由主机重置时,将进入此阶段。每次新连接设备然后通电然后重置或旧连接的设备收到重置时,此阶段由其软件分配给设备。在此阶段,USB 设备以方便的速度运行(在重置期间由硬件选择),并具有默认地址,即地址编号 0。
- Addressed:在完成上述所有阶段后,USB 设备通过从主机接收其唯一地址(不同于 0)来达到此状态。在设备软件正确处理主机请求后,将进入此阶段。
- Configured:设备收到主机发送的配置编号不为零的便捷请求后,到达该阶段。在设备软件正确处理主机请求后,将进入此阶段。
- Suspended:如果在取决于速度的已知时间段内没有流量数据,则设备必须进入此阶段。事实上,主机会根据设备的速度以电气方式强制设备进入此状态。检测到此电气指示时,USB 设备软件必须将其状态更改为 suspended。
三、USB引脚图
四pinUSB
通常,主机(根集线器)为函数直接连接提供动力。一些集线器可能会为直接连接的下游功能供电。对于函数,有两种类型:
- 总线供电功能:这些设备完全依赖于来自上游集线器的总线电源。例如USB引脚图第三张,PA15USB_PWR,这个USB供电完全依赖于总线电源。
- 自供电功能:这些设备能够独立于总线提供自己的电源。例如USB引脚图第一张,通过给USB_RESET配置为输出,并置为高电平,USB即开始供电。
主要有两种情况,一种是单片机引脚控制USB电源,一种是USB一直接通5V电源
USB (通用串行总线)信令包括两条数据线 D+ 和 D-,差分信号发送数据,以提高抗噪能力和数据完整性。
四、STM32F407库函数配置USB
4.1 资料准备
(1)SD卡带文件系统的基本工程
(2)USB源码
链接:https://pan.baidu.com/s/1Cy1WokfpHBpDONfbqT_wgQ?pwd=8888
提取码:8888
4.2 移植过程
4.3 修改错误
编译,报12个错误,从第一个错误解决(解决完一个问题可以尝试编译以下)
(1)添加头文件 #include "stm32f4xx.h"
(2)添加宏定义 USE_USB_OTG_FS
(3)修改usbh_usr.c和usbh_usr.h文件
#include "usbh_usr.h"
#include "ff.h"
#include "usart.h"
static u8 AppState;
extern USB_OTG_CORE_HANDLE USB_OTG_Core;
//USB OTG 中断服务函数
//处理所有USB中断
void OTG_FS_IRQHandler(void)
{
USBH_OTG_ISR_Handler(&USB_OTG_Core);
}
//USB HOST 用户回调函数.
USBH_Usr_cb_TypeDef USR_Callbacks=
{
USBH_USR_Init,
USBH_USR_DeInit,
USBH_USR_DeviceAttached,
USBH_USR_ResetDevice,
USBH_USR_DeviceDisconnected,
USBH_USR_OverCurrentDetected,
USBH_USR_DeviceSpeedDetected,
USBH_USR_Device_DescAvailable,
USBH_USR_DeviceAddressAssigned,
USBH_USR_Configuration_DescAvailable,
USBH_USR_Manufacturer_String,
USBH_USR_Product_String,
USBH_USR_SerialNum_String,
USBH_USR_EnumerationDone,
USBH_USR_UserInput,
USBH_USR_MSC_Application,
USBH_USR_DeviceNotSupported,
USBH_USR_UnrecoveredError
};
/
//以下为各回调函数实现.
//USB HOST 初始化
void USBH_USR_Init(void)
{
printf("USB OTG HS MSC Host\r\n");
printf("> USB Host library started.\r\n");
printf(" USB Host Library v2.1.0\r\n\r\n");
}
//检测到U盘插入
void USBH_USR_DeviceAttached(void)//U盘插入
{
printf("检测到USB设备插入!\r\n");
}
//检测到U盘拔出
void USBH_USR_DeviceDisconnected (void)//U盘移除
{
printf("USB设备拔出!\r\n");
}
//复位从机
void USBH_USR_ResetDevice(void)
{
printf(&#