IP
role
class
USB-USBD-MSC/HID
Lilian YAO
STM32 MCU有两种带USB功能的IP
2
• USB IP
• 可作为全速或低速的USB设备
• 存在于STM32F102、STM32F103
• FS OTG IP
• 可作为全速和低速USB主机
• 可作为全速USB设备
• 存在于STM32F105、STM32F107、STM32F2、STM32F4
本PPT讲解USB IP
• HS OTG IP
• 可作为高速、全速和低速USB主机
• 可作为高速和全速USB设备
• 存在于STM32F2、STSM32F4
STM32F102/103
STM32F105/107
STM32F2/F4
OTG
FS
HS
USB
FS
Y
Y
Y
Y
Presentation Title
20/06/2013
模块特点和注意事项
3
• 符合USB2.0中的全速规范
• 可用资源:8个双向端点
• 支持四种传输类型
• 对于bulk和同步传输,还支持double buffer模式;使得一个buffer用于USB硬件和PC
交换数据的同时,另外一个buffer可被MCU使用
• 支持USB设备的挂起和唤醒操作(写控制寄存器)
• 从而停止设备时钟,以进入低功耗模式
• 可产生SOF脉冲
• 注意事项:
• F102/103中的USB和CAN共享512字节的专用SRAM来进行数据收发操作,因此两个
IP不能同时使用
• F105/107不受此限制
Presentation Title
20/06/2013
USB模块的功能框图
4
PC和MCU的数据交换是通过专门的
packet buffer memory实现的
SIE使用固定的48MHz精确时钟
为使USB正常工作,APB1时钟不能
低于8MHz !
Presentation Title
20/06/2013
• SIE
• 硬件识别同步信号、进行比特填充、产生以及校验CRC、产生以及验证PID、握手
• 根据外设事件来产生SOF、复位信号等。。。
5
• 时钟
• 产生和帧信号同步的时钟脉冲
• 检测挂起信号(即3ms内USB总线上没有信号)
• Packet Buffer接口
• 通过一组收、发buffer来管理512字节的local memory
• 硬件根据来自SIE的请求来选择合适的buffer
• 寄存器
• EP相关的寄存器:该EP的传输类型、地址、当前状态
• 【USB_EPnR n=0~7】
• 控制寄存器:控制USB模块事件(比如唤醒和休眠)和反应USB模块当前状态
• 【USB_CNTR.功耗方面的控制】、【USB_DAADR.模块使能/设备地址】、
【USB_BTABLE】、【USB_FNR.】、【USB_ADDR/CNT_TX/RX】
• 中断寄存器:中断掩码,记录事件
• 【USB_CNTR.中断掩码控制】、【USB_ISTR】
Presentation Title
20/06/2013
• USB模块和APB1总线的接口部分包含以下子模块
• Packet buffer memory
• 实际包含packet buffer的地方
• 最大容量=512字节=256个半字*16比特
• 仲裁
• 接收来自APB1总线和来自USB接口的memory request,前者优先级更高
• 寄存器 mapper
• 把USB外设的字节宽度和位宽度的寄存器,组合成能被APB1访问的16位宽度字
6
• APB1 wrapper
• 为packet buffer memory和寄存器提供了APB1接口
• 把所有USB外设映射到APB1的地址空间
• 中断 mapper
• NVIC.向量20:所有USB事件(正确传输结束、USB复位等)都可触发
• NVIC.向量19:只能被同步和double buffer bulk传输的正确传输结束事件触发
• NVIC.向量42:只能被(唤醒USB挂起模式)的事件触发 @EXTI_18
• 从page100可以看到,只有host唤醒device,才会触发device的这个中断
Presentation Title
20/06/2013
1. 复位
7
• 系统复位和上电复位
• 提供USB外设模块时钟
• De-assert该模块的复位信号,使得软件能够访问该模块的寄存器组
• 打开和USB收发器相连的模拟部分(打开内部参考电压给端口收发器供电)
• 复位PDWN@CNTR;
• 等待内部参考电压稳定时间tSTARTUP
• 移除施加在该USB模块上的复位条件:软件清零FRES@CNTR
• 清除ISTR寄存器,以移除spurious pending interrupt,然后再使能其他单元
• USB复位信号及其对应中断
• 该事件发生时,USB外设的状态和系统复位后状态一样
• 软件应该在10ms之内使能USB功能:EF@DADDR
• 初始化EP0R寄存器和ep0对应的packet buffer
• 如果置位了RESETM@CNTR,还会产生中断;直到RESET标志被清零之前,数据
收发都被disable的
Presentation Title
20/06/2013
2. Packet buffer的使用
8
• 每个双向EP对应两个packet buffer,分别
用于发送和接收
• 软件通过packet buffer interface来访问它们
• 这些packet buffer的位置和大小都可配置,由
buffer描述表指定
• Buffer描述表本身也在这块memory里,它自己
的地址是由USB_BTABLE寄存器指定的
• Table里每个entry由4个半字组成(分别表示双向
EP的接收packet和发送packet的位置和大小)
• 因此该table的位置本身必须以8字节对齐,即
USB_BTABLE的低三位全部为0
• USB外设硬件不会把本EP的数据溢出到与其相
邻的其他packet
• 如果收到的数据多于buffer的长度,则只把前
length个数据放到该EP对应的Packet buffer中
硬件缓冲区
@ USB_BTABLE
Presentation Title
20/06/2013