USB之:MTKUSB软件框架及其MassStorage Class规范学习

来源:互联网 发布:车牌翻转器淘宝 编辑:程序博客网 时间:2024/06/14 14:47

MTKUSB软件框架及其MassStorage Class规范学习总结


目录

MTKUSB支持功能设备

USB软件体系结构介绍

2.1代码目录

2.2软件架构

2.3主要数据结构,函数,,变量

MS功能设备分析

3.1 MS概述

3.2 MS功能模块组成

3.3 MS时序图以及消息流程

3.4MS数据传输流程图以及状态机

四小结


摘要

本文主要描述MT6236平台USB的软件框架,重点介绍MS规范流程,且着重针对驱动源代码做分析,包括代码架构,时序图,状态机进行分析总结。















MTKUSB支持功能设备协议:

1massstorage类:

norflash做存储设备;

nandflash做存储设备;

RAMdisk,内存做存储设备;

T卡;

cmrom;

2)通信设备:

虚拟串口;

3.多媒体类

图像MTP;

图像采集;

4.视频设备

USB复合视频接口

5.网络设备

RNDIS //RemoteNetwork Driver Interface SpecificationRNDIS是指RemoteNDIS,基于USB实现RNDIS实际上就是TCP/IPover USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。

6)特殊应用设备:

TC01----对应设备描述USB_COMPOSITE_MULTI_COM。作用就是热电偶测量设备连至各类USB端口后,可将PC(或者手机)作为显示器并且实时监测数据。NIUSB-TC01JKRSTNB热电偶兼容) 

7)OTG_SUPPORT---------支持。

 

---------------------------------------软件设备描述:

支持的设备类型在usb_comm.h

{

USB_UNKOWN=0,

USB_CDC_ACM, //虚拟串口设备,

USB_MASS_STORAGE, //海量存储设备,就是手机当U盘那样用

USB_VIDEO, //USB摄像头功能

USB_COMPOSITE_VIDEO_COM,/*USB复合视频接口(手机作为视频输出源,USB作为复合视频接口,输出到显示设备,LG液晶显示器“L206WU”,就支持USB视频接口*/

USB_STOP_MS, //没有什么用,为什么????

USB_CDC_ACM_LOGGING, //USB虚拟串口打印log

USB_IMAGE, //USB图像类,应该是图像采集的意思。手机作为一个USB图像采集卡功能。

USB_IMAGE_MTP, /*IMAGE_MTP:就是手机从设备,PC端的图片浏览器作为发起者,通过USB,手机端准从IMAGE_MTP规范,向该浏览器发送图片数据。反之,多媒体传输就是直接传输图片和音频视频,会直接放到手机的制定文件夹里,方便手机直接打开。*/

USB_STOP_MTP, //没有用,????

USB_COMPOSITE_MULTI_COM, //复用设备:COM+TC01 36不支持。代码是有的,估计是其他平台系列支持。

USB_RNDIS,                

USB_COMPOSITE_RNDIS_COM, ////复合设备RNDIS+COM

USB_MASS_STORAGE_CDROM_ONLY,

USB_MAX_DEVICE_TYPE

}

 

二软件框架

2.1代码目录:包括3个部分:

代码目录

文件列表

描述

\code\venusmmi\app\Cosmos\USBApp

Vapp_usb_usbmode.cpp

Vapp_usb_normalmode.cpp

...

 

USB应用层

code\plutommi\Service\UsbSrv

usbsrv.c

USBservicelayer

手机USB功能驱动:

\code\hal\connectivity\usb_driver

bootloader驱动:

code\hal\system\bootloader\src

手机USB功能驱动:

usb_phy_drv.c

bootloader驱动:

usbdl_usbacm_adap.c

usbdl_XXXX.c usbdl_XXX.h

USB驱动层:HAL

\code\usb

usb_mode.c

usb_task.c

…….

USB task相关

code\hal\peripheral\src\

dcl_chr_det.c

中断检测:

CHR_USB_EINT_HISR()

有两种中断消息,OTG用的是A接口和接口B常规(MS,请参考USB电气标准

AMSG_ID_USB_A_PLUGIN_IND

B:MSG_ID_USB_B_PLUGIN_IND //同理OUT消息

 





2.2整体软件架构:


软件框架(图1

2.3主要数据结构,函数,,变量:

1)宏

__CHARGER_USB_DETECT_WIHT_ONE_EINT__ //charger and usb share same EINT

PMIC_PMU_SERIES

PMIC_CHR_USB_DET_EINT_LEVEL_ACTIVE_LOW低有效

PMIC_CHR_USB_DET_EINT_LEVEL_TRIGGER电平触发

PMIC_CHR_USB_DETECT_THROUGH_USB //驱动USBand charger

DRV_USB_IP_V3 //usb 控制器芯片IP核版本

__COSMOS_MMI_PACKAGE__是关闭;原来pluto_mmi有用

1)数据结构:

1.CHR_DET_TYPE_ENUM \\\\\\充电类型

2.chr_usb_detect_struct \\\\各种区分USBcharger方式

3.USB_DEVICE_STATE \\\为什么要设备状态请参考USB设备架构。iddle下士缺省态

4.g_UsbMode /*USB插拔时候到USB-task时候第一件事就是设置模式。比较重要的结构,

那用来做什么的?表明USB设备(手机)现在用来做什么功能。比如发送AtcmdLOG;下载;massstorage;开机(就是开机,啥也不做);

主要参数包括:

cable_type电缆的类型(A,B接口);

mode_param参数;

usb_menu_en是否要弹出框(声明comport,下载,log就不需要弹出)*/

5.Usb_Command //USB命令格式

6.Usb_Dev_Dscr //USB设备描述符(还有其他描述符格式,自己找找看哦)

7.Usb_EpBIn_StatusUsb_EpBOut_Status定义的是MASSstorageBulk-Only传输协议。

8.Usb_Device//这个结构比较牛逼,必须理解。描述一个设备功能,特性,还有还有一些协议上共性的参数。

 

设备驱动数据结构:

USB_DiskDriver_STRUCTUSB_MSDC_drv;/// massstroage功能函数接口;SD

USB_DiskDriver_STRUCTUSB_RAM_drv//massstroage功能函数接口;RAMdisk

 

 

3)变量pw_chr_type.

4)函数:

1.中断部分函数:

CHR_USB_EINT_HISR()//充电器,USB插入先经过这里处理。

USB_IP_V3_check_charger_or_usb()//区分USBcharger

USB_EINT_HISR()//////通过USBtask,USB插拔动作(MSG_ID_USB_B_PLUGIN_INDMSG_ID_USB_B_PLUGOUT_IND

CHRDET_HISR)////通知BMT有充电器插入

 

2.USB管理层函数:

USB_Mode_Selection()

usb_task_main()

 

 

MS功能设备分析

3.1MS概述

USB组织定义了海量存储设备类(MassStorage Class)的规范,也称USB海量存储协议,这个类规范包括四个独立的子类规范,即:

1.USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport

2.USB Mass Storage Class Bulk-Only Transport

3.USB Mass Storage Class ATA Command Block

4.USB Mass Storage Class UFI Command Specification

前两个子规范定义了数据/命令/状态在USB上的传输方法。Bulk-Only传输规范仅仅使用Bulk端点传送数据/命令/状态,CBI传输规范则使用Control/Bulk/Interrupt三种类型的端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA命令规范用于硬盘,UFI命令规范是针对USB移动存储。


3.2mass storage功能模块组成

宏:__USB_MASS_STORAGE_ENABLE__


  FormMTK2

消息流程:

注意:这里到了选择massstorage了。前面插入USB的时候,其实手机端(术语应该是设备端)还没有启动,设备端什么都还没有做,也就是说还没有开始做枚举,配置状态等等,PC端尚不知道手机端的USB功能设备的启动,主机也不会发送请求命令过来。

3.3时序图:


FormMTK3

分析:

a.MMImass storageselect:--->VappUSBNormalModeContext::onCommandPopupClick(VfxIdid)configMSMTP(DEVUSB_CFG_ACTION_MASS_STORAGE);

b.Msg to l4c : MSG_ID_MMI_EQ_USBCONFIG_REQ

c.MSG_ID_DRVUEM_USBCFG_REQ-------重要MSG------这个消息是上层经过L4C,发送到USBtask的消息。做什么用呢?就是根据USB_DEVICE_TYPE通过USB_Config_Req_Hdlr函数------USB_Config_Type()设置owner,初始化USB设备,USBstorage设备驱动(就是前面的USB_DiskDriver_STRUCT,FAT初始化;注册功能数。USB_Register_CreateFunc();USB_Register_Device_Code();

 

3.3.2对于USB设备端的存储器是T卡时候:直接调用SD驱动来操作读写数据。结构体:USB_MSDC_drv

kal_boolusbms_read_all(void*data, kal_uint32 LBA, kal_uint16 sec_len, kal_uint32 ID)

kal_boolusbms_write_all(void*data, kal_uint32 LBA, kal_uint16 sec_len, kal_uint32 ID)

3.3.3对于USB设备端的存储器是Norflash时候,驱动接口为:USB_NOR_drv;实际上是通过封装文件系统:USB_SYSTEM_drv

3.3.4对于USB设备端的存储器是Nandflash时候,驱动接口为:USB_NAND_drv

 



3.4USBMS数据传输流程图以及状态机

这里针对数据的R/T流程做了一个流程图分析,如下:


                                         数据传送状态机

上述的状态机里面提到了读写过程的CMD,他们都是UFI命令。

参考UniversalSerial BusMass StorageClassUFICommandSpecification.pdf

UFI命令格式列表:

命令

描述

USBMS_FORMAT_UNIT

04h

格式化存储单元

USBMS_INQUIRY                

12h

索取器件信息

USBMS_MODE_SENSE

5aH

host传输参数

USBMS_MODE_SELECT

55h

允许Host对外部设备设置参数

USBMS_PREVALLOW_MEDIA_REMOVL        

1eh

写保护

USBMS_READ10                        

28h

Host读存储介质中的二进制数据

USBMS_READ12                        

a8h

同上

USBMS_READ_FORMATCAPACITY        

23h

查询当前容量及可用空间

USBMS_REQUESTSENSE                

03h

请求设备向主机返回执行结果,及状态数据

USBMS_START_STOP_UNIT                        

1bh

主机请求去加载或者卸载介质设备

USBMS_TEST_UNIT_READY                        

00h

请求设备报告是否处于Ready状态

USBMS_VERIFY                        

2fh

在存储中验证数据

USBMS_WRITE10                        

2ah

从主机向介质写二进制数据

USBMS_WRITE12

aah

同上,

USBMS_READ_CAPACITY

25h

获取设备容量


相关文件:

usbms_state.c

MS的状态机处理

usbms_drv.c

MS的中断以及驱动部分(断点,DMA驱动)

usbms_adap.c

MS的文件系统的读写或者存储器的直接读写





四小结:

本文介绍USB的大体框架,以及关键代码,重点介绍MS规范的知识,以及分析其中的流程。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 超过应届生落户年龄怎么办 造价员章到期了怎么办 造价员继续教育过期了怎么办 sd卡存储不够怎么办? 进项税大于销项税怎么办 公司扣员工奖金怎么办 墙面大面积有霉怎么办 电脑总是断网怎么办 造价师资格证书丢了怎么办 行测做题速度太慢怎么办 普通话准考证丢了怎么办 信用卡还款逾期了怎么办 淮北建洗煤厂需要怎么办 建设工程不结算怎么办 考监理没有职称怎么办 公开招标两次招标失败怎么办 山东省植保员证怎么办 工伤没开病假单怎么办 邮储银行怎么办金卡 农机被交警查怎么办 广联达识别板筋负筋重叠怎么办 掌上品的钱怎么办 财务纠纷被起诉怎么办 牙齿补后疼痛怎么办 牙齿表面蛀了怎么办 虫牙全掉了怎么办 牙齿蛀光了怎么办 虫牙全部掉完了怎么办 不喜欢向人请教怎么办 单位不交公积金怎么办 电锯链条掉了怎么办 天津公积金怎么办外地转入 学籍档案涂抹了怎么办 气相点火失败怎么办 小米闹钟声音小怎么办 河北省监理员证怎么办 买的商铺烂尾了怎么办 钢表带被磨花了怎么办 资料员到期了怎么办 八大员挂靠社保怎么办 安许证三类人员不足了怎么办