stm32f107 usbh主模式库解析.docx
- 文档编号:10566567
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:33
- 大小:381.23KB
stm32f107 usbh主模式库解析.docx
《stm32f107 usbh主模式库解析.docx》由会员分享,可在线阅读,更多相关《stm32f107 usbh主模式库解析.docx(33页珍藏版)》请在冰豆网上搜索。
stm32f107usbh主模式库解析
简介
STM32F105/7USB主模式库的目的是为USB主模式应用程序开发提供一个框架。
库代表了在STM32F105/7之上的USBOTG周边底层驱动。
它实现必要的软件块,目的是便于USB的主模式应用程序开发。
STM32F105/7USB主模式协议栈的库支持以下两个USB标准应用类:
■大批量存储类(MSC)用于访问USB闪存pendrives
■人机接口设备类(HID)用于键盘和鼠标设备
1USB的主模式包文件夹结构。
..................6
2 USB主模式的库结构................................8
2.1库的结构框图............................8
2.2库内核的描述。
................................9
2.2.1内核状态机。
........................................9
2.2.2设备枚举。
......................................10
2.2.3控制传输状态机。
..............................11
2.2.4 USB的I/O请求模块。
..................................11
2.2.5主模式通道控制模块。
..............................12
2.3类驱动程序。
..............................................13
2.3.1 USB大批量存储类(MSC)驱动程序。
........................13
2.3.2 USB人机接口设备类(HID)鼠标键盘设备驱动。
.......................................17
3库用户API和回调函数。
..............................................................................20
3.1库用户API。
..............................................................................................20
3.2用户的回调函数。
..............................................................................................20
3.2.1类的回调函数。
..............................................................................................20
3.2.2独立类的回调函数。
.......................................................................................22
4演示固件。
。
。
。
。
。
……..25
4.1大容量存储类演示。
…。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
25
4.1.1软件初始化。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
25
4.1.2大容量存储设备枚举。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
25
4.1.3访问大容量存储器内容。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
26
4.1.4Flashpendrive测试。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
26
4.2HID鼠标和键盘演示。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
27
4.2.1初始化准备。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
27
4.2.2鼠标或键盘设备枚举。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
27
4.2.3.鼠标演示。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
28
4.2.4键盘演示。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
28
4.3演示脚本。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
28
5已知的限制。
........................................29
6修订历史。
..........................................30
listof表
表1内核文件…………………………………………………………………………………7
表2class文件…………………………7
表3枚举请求……………………………………11
表4USB的I/O请求模块………………………………………………………12
表5主模式通道控制模块……………………………………………………………………12
表6大容量存储类模块…………………………………………………………..13
表7MSC的内核模块……………………………………………………………………15
表8MSC BOT模块……………………………………………………………15
表9MSC SCSI命令……………………………………………………………16
表10MSC文件系统接口功能………………………………………………………16
表11efsl主API…………………………………………………………………17
表12HID类模块……………………………………………………………………17
表13MSC内核模块的功能…………………………………………………………18
表14鼠标和键盘初始化和HID Report解码功能……………………………19
表15测试U盘……………………………………………………27
表16演示的足迹…………………………………………………………………28
表17文件修订历史………………………………………………………………30
数字表
图1。
文件夹结构。
......................................................6
图2。
USB主模式库框图结构。
..................................8
图3。
内核状态机。
......................................................9
图4。
设备枚举。
....................................................10
图5。
的MSC驱动器框图结构。
................................14
图6。
MS设备枚举。
..................................................25
图7。
MS设备内容的访问。
............................................…26
图8。
鼠标演示。
..........................................................28
图9。
键盘演示。
........................................................28
1USB主模式包文件夹结构
STM32的USB主模式封装库具有以下文件结构:
图1。
文件夹结构
封装库文件夹具有如下组织结构
■库
–CMSIS:
微微控制器软件接口标准文件
–STM32_USB_HOST_Library:
USB主模式库文件
–STM32_USB_HOST_Driver:
STM32USB2.0 OTG 外设低电平驱动
–STM32F10x_StdPeriph_Driver:
STM32标准外设驱动程序
■项目
–_USB_HOST_EXAMPLES/HID_KBrd_Mouse:
鼠标和HID键盘演示文件
–USB_HOST_EXAMPLES/MSC:
大容量存储类的演示文件
■公用事业
–STM32_EVAL/STM3210C_EVAL:
STM3210C_EVALevalboard功能函数
( GPIO,液晶显示,时钟配置,……)
–Third_Party/efsl:
EFSLFAT文件系统,用于大容量存储例程
USB主模式库文件结构
USB主模式库文件夹”stm32_usb_host_library”是由两个主要子文件夹构成:
■内核:
该文件夹包含USB主模式库内核文件。
这些文件实现必要的功能,状态机和数据结构所需的:
–设备的识别和枚举,
–USB控制传输管理,
–为解决控制,大批量或中断USB事务而设立的低级功能,
–USB主模式通道配置。
■类:
这个文件夹包含USB类管理所必需的文件。
USB主模式库支持两种USB类:
–MSC:
大批量存储类
–HID:
为启动鼠标和键盘设备的人机接口设备类
下表详体说明了内核文件和类文件:
表1。
内核文件
FileDescription
usbh_core.c/.h使内核,设备枚举和控制权转移的状态机生效
usbh_stdreq.c/.hUSB标准请求需要在设备枚举(USB 9章)
usbh_ioreq.c/.hUSB的I/O请求:
USB事务包括控制,大批量和中断通道请求
usbh_hcs.c/.hUSB主模式控制信道(信道配置,分配,释放……)
usbh_def.h在USB主模式库中广泛使用的宏定义
表2。
类文件
ClassFileDescription
usbh_hid_core.c/.hHID类管理
HIDusbh_hid_mouse.c./hHID鼠标的具体例程
usbh_hid_keyboard.c/.hHID键盘的具体例程
usbh_msc_core.c/.h大批量存储类管理
MSCusbh_msc_bot.c./.hBOT”Bulk-Only传输协议的实现
usbh_msc_scsi.c/.hSCSI标准命令的执行
usbh_msc_fs_interface.c./h一个带有文件操作系统用于文件访问的接口
2 USB主模式的库结构
2.1库框图结构
USB主模式库具有以下框图结构:
图2.USB主模式库框图结构
如上图所示,USB主模式库由两个主要部分组成:
内核
和类驱动程序。
库的核心主要由五块构成:
■内核状态机
■设备枚举
■控制传输状态机
■USB的I/O请求
■USB主模式通道控制
对于所有与类相关的操作,内核状态机都是操作一个特定的类驱动。
在USB主模式库目前的版本中,两类驱动程序-HID和MSC已经实现。
这类驱动程序使用内核层对底层驱动通信进行服务。
内核和类驱动程序与用户的应用程序交流都主要是通过定义回调函数来实现的。
不同的主模式模块库描述如下。
2.2描述库内核
2.2.1内核状态机
下图描述了库的状态机:
图3。
内核状态机
内核状态机有8个状态:
■host_idle:
主模式初始化后,内核在这个状态开始,在这个状态下为USB设备连接进行检测。
这种状态也在当一个设备断开事件被检测到的时进入,同时也在当不可恢复错误发生时进入。
■host_issue_core_reset:
当设备为发出一个USB总线复位请求则进入此状态。
■host_dev_attached:
内核进入这个状态,当一个设备连接。
当一个全速或低速设备被检测到时,状态机移动到host_enumeration状态。
■host_enumeration:
在这种状态中,内核根据一个基本的USB设备枚举进行。
在枚举过程结束时,默认的配置(配置0)被选择。
■host_usr_input:
这是一个紧跟在枚举后的中间状态,这个状态包括一个等待用户输入以便进行USB类操作。
■host_class_request:
从这个状态开始,类驱动接管,类请求状态机为了处理所有的初始类控制请求被调用(例如:
get_report_descriptorHID)。
完成所需要的类请求后,内核移动到host_class状态。
■host_class:
在这种状态下,类状态机被调用类相关的操作(非控制和控制操作)。
■host_ctrl_xfer:
,无论何时当有一个控制转移请求时进入此状态。
■host_error_state:
无论何时从任何库状态机有一个不可恢复的错误时进入此状态;在这种情况下,一个用户调用回调函数(例如显示一条不可恢复的错误消息)。
然后主模式库重新初始化。
内核状态机的过程是由usbh_process功能函数实现。
这个函数应该从应用程序的主循环周期调用。
USB主模式库初始化功能由函数usbh_init实现。
这个函数这个函数应该在初始化过程中由用户应用程序调用。
更多这方面的细节在section3提供。
2.2.2设备枚举
在检测完全速或低速设备之后,主库通过一个基本的设备枚举继续运行。
下面的关系图显示了参与设备枚举的不同的步骤。
图4。
设备枚举
枚举状态机是在库的功能函数USBH_HandleEnum中实现,这是从内核状态机过程调用。
USBH_HandleEnum功能函数调用下面的库路径(在文件usbh_stdreq.c中实施):
表3。
设备枚举请求
FunctionDescription
USBH_Get_CfgDesc获取配置描述符请求
USBH_Get_DevDesc获取设备描述符请求
USBH_Get_StringDesc得到字符串描述符的请求
USBH_GetDescriptor一般取描述符请求
USBH_SetCfg
(1)配置请求
USBH_SetAddress2)设置地址的请求
USBH_ClrFeature清除功能请求
注:
1 usbh_setcfg调用选择默认的配置(配置0)
2 usbh_setaddress要求设置设备地址为0x1。
用户回调函数将在用户枚举阶段结束时调用以使过程的描述信息(如显示的描述符的数据,例如)。
为更多的细节,请参阅第3节。
****************************************************************************************************
2.2.3控制传输状态机
当有控制传输需求时从内核或类驱动进入控制传输状态机,。
该状态机实现了标准的控制转移阶段,即安装阶段,可选的数据阶段,最后,状态阶段。
控制传输状态机实现的功能是在功能函数USBH_HandleControl中。
它是从内核状态机程序中调用。
2.2.4 USB的I/O请求模块
USB的I/O请求模块位于内核的低层。
它的接口与关于控制,大批量,中断等的USB事务的USB底层驱动相连。
表4显示在I/O请求模块的主要功能。
这些功能在文件usbh_ioreq.c中实施。
表4USB的I/O请求模块
FunctionDescription
USBH_CtlSendSetup关于设置事务
USBH_CtlSendData关于控制数据输出阶段的事务
USBH_CtlReceiveData关于控制数据输入阶段的事务
USBH_CtlReq关于控制传输(设置,数据,状态阶段)的高级功能
USBH_BulkSendData关于大批量输出的事务
USBH_BulkReceiveData关于大批量输入的事务
USBH_InterruptSendData关于中断输出事务
USBH_InterruptReceiveData关于中断输入事务
2.2.5主模式通道控制模块
主模式通道控制模块位于较低的内核层,它允许把主模式通道配置为一个特定的操作(控制,大批量或中断传输型)也允许设置一个选定的主模式通道为设备端点来创建一个USB通道。
对于USB通道控制模块的主要功能是在表6定义。
这些功能在文件usbh_hcs.c中实施。
表5。
主模式通道控制模块
FunctionDescription
USBH_Open_Channel开放和配置一个新的主模式通道
USBH_Modify_Channel修改现有的主模式通道
USBH_Alloc_Channel分配一个主模式通道到设备的端点(一个USB通道创建)
USBH_Free_Channel释放一个主模式通道
2.3类驱动程序
在枚举的结束时,内核通过调用特定功能的类驱动程序来管理所有的与类相关的操作。
请注意,某些类驱动的选择不是基于设备枚举的结果,而是当初始化主模式库通过调用函数usbh_init“预先定义的“。
类驱动通过使用结构类型usbh_class_cb_typedef来实现:
typedefstruct_Device_cb
{
USBH_Status(*Init)(USB_OTG_CORE_HANDLE*pdev,USBH_DeviceProp_TypeDef*hdev);
void(*DeInit)(USB_OTG_CORE_HANDLE*pdev,USBH_DeviceProp_TypeDef*hdev);
USBH_Status(*Requests)(USB_OTG_CORE_HANDLE*pdev,USBH_DeviceProp_TypeDef\
*hdev);
USBH_Status(*Machine)(USB_OTG_CORE_HANDLE*pdev,USBH_DeviceProp_TypeDef\
*hdev);
}USBH_Class_cb_TypeDef;
结构成员如下所述:
■初始化:
此函数在类操作启动时调用以确保完成所有需要的初始化操作。
这包括:
–解析接口和端点描述符(请注意当前的USB主模式库只支持一种接口),
–为非控制端点开放和分配主模式通道,
–调用用户回调函数(见第3节),以防止该设备不被支持的情况。
■去初始化:
这个功能当重新初始化主模式为释放分配的主模式通道被调用。
当一个设备拔出或在不可恢复的错误的情况下被调用。
■请求:
执行类请求状态机的功能。
在host_class_request状态下它被调用;其目的是实现类的初始化请求。
■机器:
执行类内核状态机。
在host_class内核状态被调用。
2.3.1 USB大批量存储类(MSC)驱动程序的目的是支持常见的USB接口的u盘,使用BOT”Bulk-Only传输协议。
以下模块,位于class\MSC文件夹,用于实现MSC驱动:
表6。
大批量存储类模块
ModuleDescription
usbh_msc_core.c/.hMSC内核状态机的实现
usbh_msc_bot.c./.hBOT”Bulk-Only传输协议的实现
usbh_msc_scsi.c/.hSCSI命令的实现
usbh_msc_fs_interface.c./h文件操作系统访问文件的接口功能
图表5显示了模块之间的相互作用。
图5。
MSC驱动器结构框图
============================================================
操作流程描述:
MSC内核状态机通过必需的设备初始化来启动,这是:
■通过get_max_lun检测目前设备的逻辑单元的数目的类请求。
请注意,只有一个逻辑单元的设备支持。
■bot_reset是发出复位设备BOT状态机的类请求。
■关于SCSI命令:
mode_sense是为了检测设备是否写保护,read_capacity用于检测u盘容量。
经过上述设备初始化,MSC内核状态机调用应用程序的用户
回调函数。
用户回调可以让文件系统访问任何类型的文件。
此操作解释成一个逻辑页读取或写入操作。
文件系统接口为文件系统和MSC驱动器提供连接。
在SCSI水平,逻辑页读取或写入操作转换为SCSI命令:
READ(10)orWRITE(10)。
这些命令“Bulk-OnlyTranport”协议传输到u盘。
BOT层状态机是关于使用必要的USB内核I/O请求模块进行大批量输入输出传输。
MSC模块描述如下。
MSC内核模块:
MSC内核模块在“usb_msc_core.c”实现MSC驱动,它通过usbh_class_cb_typedef定义
msc_cbof结构类型(见2.3节)。
USBH_Class_cb_TypeDefMSC_cb=
{
USBH_MSC_InterfaceInit,
USBH_MSC_InterfaceDeInit,
USBH_MSC_ClassRequest,
USBH_MSC_Handle,
};
表7.MSC内核模块
FunctionDescription
USBH_MSC_InterfaceInit解析接口和端点描述符和配置主模式通道(大批量输入输出通道)
USBH_MSC_InterfaceDeInit去初始化路径(释放主模式通道)
USBH_MSC_ClassRequest在MSC的情况下,此功能只将库内核状态机转移到host_class状态
USBH_MSC_Handle执行MSC内核状态机
USBH_MSC_Issue_BOT关于BOT复位类请求
USBH_MSC_Issue_GETMaxLUN关于get_max_lun类请求
USBH_MSC_ErrorHandleMSC错误处理
MSC BOT模块:
MSC”Bulk-Only传输”(BOT)模块执行了传输协议通过发送SCSI命令(READ(10)orWRITE(10))。
该模块在文件“usbh_msc_bot. c实现。
关于BOT协议的详细信息,请参阅usb.org大批量存储类文件。
BOT模块具有以下功能:
表8。
MSC BOT模块
功能描述
usbh_msc_init初始化状态机
usbh_msc_handlebotxfer BOT传输状态机
MSC SCSI模块:
SCSI“小型计算机系统接口”模块在“usb_msc_scsi .C”在BOT顶部。
它在需要访问u盘时执行SCSI命令集。
需要执行的命令:
表9.MSC SCSI命令
功能描述
usbh_msc_read10逻辑块读命令
usbh_msc_write10逻辑块写入命令
usbh_msc_testunitready检查设备状态命令
usbh_msc_readcapacity10请求读取设备容量命令
usbh_msc_modesense6检查大容量存储设备写保护状态命令
usbh_msc_requestsense接收错误消息命令
MSC文件系统接口模块
MSC文件系统接口模块在“usbh_msc_fs_interface.C”允许文件系统与MSC驱动器连接。
本模块必须移植到选定的文件系统。
当前的USB主模式库包来自开源的,支持EFSL FAT文件系统(见下一节对EFSL概述API)。
文件系统接口实现的功能:
表10.MSC文件系统接口功能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm32f107 usbh主模式库解析 usbh 模式 解析