打印
[资料分享与下载]

【经验分享】FSL USB Stack 简介

[复制链接]
2960|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 FSL_TICS_A 于 2014-10-27 13:45 编辑

FSL USB Stack 简介
       USB stack是飞思卡尔半导体公司为客户提供的免费USB协议栈,方便客户在飞思卡尔MCU上进行USB方面的开发,支持的MCU有:ClodFire、HCS08、Kinetis,同时它提供基于CW、IAR、KEIL MDK的例程供客户选择,这样可满足客户使用不同IDE的习惯。
      USB stack按照协议驱动可分为:Device stack、Hoststack和OTG stack;同时其支持的USB 类几乎可以满足所有的USB开发需求,包括个人保健设备类(PHDC)、人机接口设备(HID)、大容量存储设备(MSD)、通信设备类(CDC)、音频类、On-The-Go USB 2.0标准附录和PHDC USB.org标准类等。其中除了标准USB类,PHDC可遵照康体佳健康联盟等医疗行业标准,使软件能够支持医疗设备内部的USB连接。该协议栈使现有的8位和32位飞思卡尔MCU实现了标准化、数据连接和可移植性,有助于加速通用和医疗产品的开发。
       本文以USB stack 4.1.1中的Kinetis_twrmkl25z128_hid_mouse例程为例,介绍USB Device stack的代码架构组成,程序流程,USBstack USB driver和HID class driver文件,API函数。
1.   USBDevice stack代码架构       图1是USB stack 4.1.1的目录结构,而图2表示的是USB stack 4.1.1的代码架构。


1 目录结构

2 软件架构

      飞思卡尔提供的USBstack的代码架构是分层式的,自上而下可分为USB Application、Class Drivers和USBDrivers。基于分层式架构的USB stack可以让USB开发者只需将开放的精力放在USB Application,而无需理会其它两层的程序代码细节,同时USBApplication的程序代码也可以在不同MCU间非常容易的实现移植,只要底层程序代码与MCU是相契合。
       USB Drivers处于USB stack代码架构的最底层,它与MUC的USB寄存器的联系也最为紧密,它操作USB寄存器实现USB device initialization、USB devicede-initialization、端点初始化、发送字符到端点或接受来自端点的字符、配置USB device地址、stall或unstall端点、拒绝挂起传送、禁止USBdevice。当端点发送或接受字符和USB总线上有事件发生时,USBDrivers都会传送对应的Callback给上层架构如USBApplication或Class Drivers,接着上层架构根据传送的Callback调用具体API处理。调用USB Drivers中的USB Device Controller Interface (DCI) API可直接操作USB模块中的寄存器,实现不同配置和USB总线功能。
       Class Drivers由Framework模块、Commonclass模块、Class specific模块组成。Framework模块负责处理USB device在枚举过程中的控制端点接到的来自Host的各式请求。Commonclass模块负责处理所有USB类都会发生的suspend/resume、reset、stall、SOF。当检测到事件发送时,如USB总线复位、枚举成功、配置变换、数据接收或发生完成等,Commonclass模块都会通过传送Callback通知Class specific模块或者USB Application。图3表示USB Device在枚举过程中的状态变换关系,而状态变换中所引发请求或者事件由Framework模块和Common class模块处理,表1描述的是USB Device状态。


3USB device状态框图

1 USBDevice状态

       Class specific模块用于处理控制端点外的端点与Host通信的事宜,在这类端点上进行字符发送和介绍都受Classspecific模块管理,同时Class specific模块还会处理在控制端点上接收到的特定请求,以Kinetis_twrmkl25z128_hid_mouse例程为例,Get_Report、Set_Report 、Get_Idle、 Set_Idle 、Get_Protocol、Set_Protocol就属于HID类的特定请求。
       不同USB类的Class specific模块其Class specific模块名称和API也是不同,像HID类的Classspecific模块—HID Class driver为HID类协议服务,所以对于通信设备类(CDC),则CDC Classdriver为CDC类协议服务,个人保健设备类(PHDC)的Class specific模块—PHDC Class driver自然为PHDC类协议服务,以此类推。
       USB Application处于USBstack软件架构的最上层,通过调用Class Drivers和USBDrivers来实现USB通信需求。在USB stack 4.1.1中提供了各个USB类的例程(如图4所示)如HIDmouse, keyboard, SD card, USB audio, battery charging, personal health care,video device, MSD, CDC,方便客户参考或者直接应用。






4USB stack例程
   2.   USBDevice stack程序流程2.1 初始化流程
        USB Device stack初始化时,USBApplication通过逐层调用,实现Class Drivers和USB Drivers层的初始化。在枚举过程中,当检查到USB总线有事件发生,Class Drivers会向USBApplication传送Callback,而对于USB Host向USB Device发送获得设备描述符、配置描述符、字符描述符的请求,ClassDrivers也会处理,而且识别出具体请求后,会将在USB Application中,已定义好的描述符发送给USB Host。当收到到USB Host发出的Set configuration请求,即表明USB Device枚举成功,而Class Drivers也会将枚举成功事件通知给USBApplication。


图 5 初始化流程
2.2 发送数据流程
     USB Application通过调用Class Drivers中的Send API发送数据。Class Drivers中的Send API在发送数据前,首先检测队列的当前状态,如果队列已满,则返回Busy状态标志。如果队列不为空,已有请求正在处理,新来的请求进入队列等待,为将请求内容发送到USB Drivers做准备。而在发送请求内容期间,它会先检测USB总线是否处于挂起状态,如果正处于挂起状态,它会唤醒USB总线并接着将请求内容发送到USB Drivers。当Send API执行完成后,Class Drivers会将此请求从队列中移除,并重新发送一个新的请求。


6 发送数据流程
            2.3数据接收流程
      当USB 总线上有来自USB Host的字符数据时,USB Drivers将此事件发送给ClassDrivers,而Class Drivers则调用USBDrivers中Receive API接收字符数据,如果接收的字符数据小于端点缓存值,则ClassDrivers会立即处理收到的字符数据,否则,需要等Class Drivers接收到所有的字符数据后,Class Drivers才会处理。


7数据接收流程
飞思卡尔USB stack 简介.pdf (768.64 KB)









相关帖子

沙发
FSL_TICS_Jeremy|  楼主 | 2014-8-25 11:44 | 只看该作者
未完待续,不足之处请指正

使用特权

评论回复
板凳
ar_m_cu| | 2014-8-25 12:15 | 只看该作者
这个是个好东西,期待更新

使用特权

评论回复
地板
FSL_TICS_Jeremy|  楼主 | 2014-8-25 14:29 | 只看该作者
ar_m_cu 发表于 2014-8-25 12:15
这个是个好东西,期待更新

谢谢支持,敬请关注更新

使用特权

评论回复
5
FSL_TICS_ZJJ| | 2014-8-26 10:47 | 只看该作者
楼主的讲解非常详细,支持!

使用特权

评论回复
6
三个森林| | 2014-8-30 08:54 | 只看该作者
下载看看

使用特权

评论回复
7
link8001| | 2014-9-1 13:37 | 只看该作者
支持

使用特权

评论回复
8
茫茫大士| | 2014-9-1 14:01 | 只看该作者
好东西

使用特权

评论回复
9
qq4988| | 2014-9-1 14:05 | 只看该作者
不错

使用特权

评论回复
10
攻城狮| | 2014-9-13 16:43 | 只看该作者
谢谢分享!

使用特权

评论回复
11
cavsle| | 2014-9-16 15:41 | 只看该作者

这个是个好东西,期待更新

使用特权

评论回复
12
mical111| | 2014-9-17 18:18 | 只看该作者
阿斯蒂芬爱上

使用特权

评论回复
13
zslnc| | 2014-10-24 08:15 | 只看该作者
看看

使用特权

评论回复
14
FSL_TICS_ZJJ| | 2014-10-24 10:03 | 只看该作者
cavsle 发表于 2014-9-16 15:41
这个是个好东西,期待更新

更多中文资料请到kinetis资料大本营:https://bbs.21ic.com/icview-649582-1-1.html
如果遇到问题,欢迎发帖交流。

使用特权

评论回复
15
weiweiyixiao| | 2014-10-27 13:43 | 只看该作者
下来看看,但不喜欢这个模式

使用特权

评论回复
16
FSL_TICS_ZJJ| | 2014-10-27 13:44 | 只看该作者
weiweiyixiao 发表于 2014-10-27 13:43
下来看看,但不喜欢这个模式

你指的是回复可见吗?
现在就去掉!

使用特权

评论回复
17
weiweiyixiao| | 2014-10-27 14:28 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-10-27 13:44
你指的是回复可见吗?
现在就去掉!

:handshake

好的资料给大家分享,支持的人会越来越多的!

使用特权

评论回复
18
FSL_TICS_ZJJ| | 2014-10-27 16:12 | 只看该作者
weiweiyixiao 发表于 2014-10-27 14:28
好的资料给大家分享,支持的人会越来越多的!

是的,以后我们的**全部不加回复可见,如果你发现没改过来了的告诉我,我会去掉。

使用特权

评论回复
19
weiweiyixiao| | 2014-10-27 18:26 | 只看该作者
FSL_TICS_ZJJ 发表于 2014-10-27 16:12
是的,以后我们的**全部不加回复可见,如果你发现没改过来了的告诉我,我会去掉。 ...

支持!

使用特权

评论回复
20
deliciouscook| | 2015-1-25 19:43 | 只看该作者
多谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

113

主题

2865

帖子

38

粉丝