Linux USB "On-The-Go"(OTG) on OMAP H2 软件架构分析(一)
2013-07-22 17:45
537 查看
原帖地址:/article/8995409.html
Linux USB "On-The-Go"(OTG) on OMAP H2 软件架构分析(一)
本文参考David rownell的文章http://www.linux-usb.org/gadget/h2-otg.html。介绍了linux2.6中关于usb-otg的软件体系结构。在刚结束的基于本公司usb-otg chip的solution也主要参考了omap的构架。如需引用请注明出处:http://blog.csdn.net/zkami
作者:ZhengKui
OMAP H2 Platform简介
<!--[if !supportLists]--><!--[endif]-->集成了3个USB控制器:OHCI host, USB Device Controller(UDC), OTG controller. 都支持full speed (12Mbit/s)
在H2的板子上应该有Mini-AB的插口。根据OTG spec规定所有双角色(doul-role)设备都应有Mini-AB接口。
<!--[endif]-->外部的USB OTG收发器(USB OTG transceiver) --- Philips ISP1301。通过I2C总线控制。
<!--[endif]-->通过TI(TPS65010)电源控制器进行电源管理,通过I2C总线控制TPS65010。这样当H2作为B-role设备时,A-role可以给他供电500mA。当H2作为A-role设备时自身可以提供8mA电流。
OTG简介
USB技术的发展,使得PC和周边设备能够通过简单方式、适度的制造成本将各种数据传输速度的设备连接在一起,上述我们提到应用,都可以通过USB总线, 作为PC的周边,在PC的控制下进行数据交换。但这种方便的交换方式,一旦离开了PC,各设备间无法利用USB口进行操作,因为没有一个从设备能够充当 PC一样的Host。 On-The-Go,即OTG技术就是实现在没有Host的情况下,实现从设备间的数据传送。例如数码相机直接连接到打印机上,通过OTG技术,连接两台 设备见的USB口,将拍出的相片立即打印出来;也可以将数码照相机中的数据,通过OTG发送到USB接口的移动硬盘上,野外操作就没有必要携带价格昂贵的
存储卡,或者背一个便携电脑。 USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG)。OTG两用 设备完全符合USB2.0标准,并可提供一定的主机检测能力,支持主机通令协议(HNP)和对话请求协议(SRP)。在OTG中,初始主机设备称为A设 备,外设称为B设备。可用电缆的连接方式来决定初始角色。图2所示是用第5个ID脚确定默认主机的示意图,两用设备使用新型mini-AB插座,从而使 mini-A插头、mini-B插头和mini-AB插座增添了第五个引脚(ID),以用于识别不同的电缆端点。mini-A插头中的ID引脚接地,
mini-B插头中的ID引脚浮空。当OTG设备检测到接地的ID引脚时,表 示默认的是A设备(主机),而检测到ID引脚浮这的设备则认为是B设备(外设)。系统一旦连接后,OTG的角色还可以更换。主机与外设采用新的HNP,A 设备作为默认主机半提供VBUS电源,并在检测到有设备连接时复位总线、枚举并配置B设备。OTG标准为USB增添的第二个新协议称为对话请求协议 (SRP)。SRP允许B设备请求A设备打开VBUS电源并启动一次对话。一次OTG对话可通过A设备提供VBUS电源的时间来确定(注:A设备总是为 VBUS供电,即使作为外设)。也可通过A设备关闭VBUS电源来结束一闪会话以节省功耗,这在电池供电产品中是非常重要的。例如,在两台蜂窝电话通过连
接互相交换信息时,一台连接在电费的mini-A端,是A设备,默认为主机。另一台是B设备,默认为外设。当在不需要USB通信时,A设备可以关闭 VBUS线,此时B设备就会检测到该状态并进入功低耗模式。
<!--[if !vml]--><!--[endif]-->
Linux2.6 USB-OTG软件结构
<!--[if !vml]--><!--[endif]-->
相对于原来的USB Module, 当前的kernel做了以下更新来支持OTG功能:
<!--[if !supportLists]-->接口的更新:
<!--[if !supportLists]--><!--[endif]-->USB Device Controller Driver导出一些新的接口
USB Gadget Driver 有一些新的功能。
<!--[endif]-->在主机端 “usbcore”模块需要一些新的OTG相关的能力,来负责对设备枚举。这个枚举的过程对设备端是不可见的。同时,主机端还需要一些挂起(suspend), 唤醒(resume), 远程唤醒(remote wakeup)的能力来支持HNP协议。这就涉及到Linux电源管理的接口。
<!--[endif]-->主机端还要定义一个OTG “Targeted Peripheral List”。毕竟作为一个嵌入式设备不用支持每一种设备。而只需支持自己定义的“Targeted Peripheral List”中的设备。
USB 控制器驱动程序的更新:
对OTG核心协议的支持封装在了otg_transceiver object中。对于H2来说, isp1301_omap driver控制了收发器(transceiver)和OMAP OTG controller, 并且通过usb_bus和usb_gadget 接口与OHCI和UDC drivers(设备端控制器驱动程序)通信。如下图所示:
在”USB Gadget”框架中,需要omap_udc driver对上层标准gadget drivers提供良好的支持。这些gadget drivers都基于gadget接口,包括Ethernet/RNDIS, Mass Storage, serial/ACM等等。在gadget driver中需要定义好设备的各项属性包括端点数,DMA, ISO传输等。类似于写设备的firmware。
在linux2.6中已经可以支持OHCI host controller, 通过ohci_hcd可以访问大量的并正在增长的usb device driver。
<!--[if !vml]-->
<!--[endif]-->
以下会针对每一部份分别进行分析。(未完待续)<!--[endif]-->
Linux USB "On-The-Go"(OTG) on OMAP H2 软件架构分析(一)
本文参考David rownell的文章http://www.linux-usb.org/gadget/h2-otg.html。介绍了linux2.6中关于usb-otg的软件体系结构。在刚结束的基于本公司usb-otg chip的solution也主要参考了omap的构架。如需引用请注明出处:http://blog.csdn.net/zkami
作者:ZhengKui
OMAP H2 Platform简介
<!--[if !supportLists]--><!--[endif]-->集成了3个USB控制器:OHCI host, USB Device Controller(UDC), OTG controller. 都支持full speed (12Mbit/s)
在H2的板子上应该有Mini-AB的插口。根据OTG spec规定所有双角色(doul-role)设备都应有Mini-AB接口。
<!--[endif]-->外部的USB OTG收发器(USB OTG transceiver) --- Philips ISP1301。通过I2C总线控制。
<!--[endif]-->通过TI(TPS65010)电源控制器进行电源管理,通过I2C总线控制TPS65010。这样当H2作为B-role设备时,A-role可以给他供电500mA。当H2作为A-role设备时自身可以提供8mA电流。
OTG简介
USB技术的发展,使得PC和周边设备能够通过简单方式、适度的制造成本将各种数据传输速度的设备连接在一起,上述我们提到应用,都可以通过USB总线, 作为PC的周边,在PC的控制下进行数据交换。但这种方便的交换方式,一旦离开了PC,各设备间无法利用USB口进行操作,因为没有一个从设备能够充当 PC一样的Host。 On-The-Go,即OTG技术就是实现在没有Host的情况下,实现从设备间的数据传送。例如数码相机直接连接到打印机上,通过OTG技术,连接两台 设备见的USB口,将拍出的相片立即打印出来;也可以将数码照相机中的数据,通过OTG发送到USB接口的移动硬盘上,野外操作就没有必要携带价格昂贵的
存储卡,或者背一个便携电脑。 USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG)。OTG两用 设备完全符合USB2.0标准,并可提供一定的主机检测能力,支持主机通令协议(HNP)和对话请求协议(SRP)。在OTG中,初始主机设备称为A设 备,外设称为B设备。可用电缆的连接方式来决定初始角色。图2所示是用第5个ID脚确定默认主机的示意图,两用设备使用新型mini-AB插座,从而使 mini-A插头、mini-B插头和mini-AB插座增添了第五个引脚(ID),以用于识别不同的电缆端点。mini-A插头中的ID引脚接地,
mini-B插头中的ID引脚浮空。当OTG设备检测到接地的ID引脚时,表 示默认的是A设备(主机),而检测到ID引脚浮这的设备则认为是B设备(外设)。系统一旦连接后,OTG的角色还可以更换。主机与外设采用新的HNP,A 设备作为默认主机半提供VBUS电源,并在检测到有设备连接时复位总线、枚举并配置B设备。OTG标准为USB增添的第二个新协议称为对话请求协议 (SRP)。SRP允许B设备请求A设备打开VBUS电源并启动一次对话。一次OTG对话可通过A设备提供VBUS电源的时间来确定(注:A设备总是为 VBUS供电,即使作为外设)。也可通过A设备关闭VBUS电源来结束一闪会话以节省功耗,这在电池供电产品中是非常重要的。例如,在两台蜂窝电话通过连
接互相交换信息时,一台连接在电费的mini-A端,是A设备,默认为主机。另一台是B设备,默认为外设。当在不需要USB通信时,A设备可以关闭 VBUS线,此时B设备就会检测到该状态并进入功低耗模式。
<!--[if !vml]--><!--[endif]-->
Linux2.6 USB-OTG软件结构
OHCI Host Controller Driver |
Isp1301_omap Driverr |
Device Controller Driverr |
OHCI Host Controller |
Isp1301 Driverr |
Device Controller |
USB Core |
USB Device Class Driver(Mass storage...) |
USB Device Class Driver(Mass storage...) |
Gadget Driverr |
相对于原来的USB Module, 当前的kernel做了以下更新来支持OTG功能:
<!--[if !supportLists]-->接口的更新:
<!--[if !supportLists]--><!--[endif]-->USB Device Controller Driver导出一些新的接口
USB Gadget Driver 有一些新的功能。
<!--[endif]-->在主机端 “usbcore”模块需要一些新的OTG相关的能力,来负责对设备枚举。这个枚举的过程对设备端是不可见的。同时,主机端还需要一些挂起(suspend), 唤醒(resume), 远程唤醒(remote wakeup)的能力来支持HNP协议。这就涉及到Linux电源管理的接口。
<!--[endif]-->主机端还要定义一个OTG “Targeted Peripheral List”。毕竟作为一个嵌入式设备不用支持每一种设备。而只需支持自己定义的“Targeted Peripheral List”中的设备。
USB 控制器驱动程序的更新:
对OTG核心协议的支持封装在了otg_transceiver object中。对于H2来说, isp1301_omap driver控制了收发器(transceiver)和OMAP OTG controller, 并且通过usb_bus和usb_gadget 接口与OHCI和UDC drivers(设备端控制器驱动程序)通信。如下图所示:
在”USB Gadget”框架中,需要omap_udc driver对上层标准gadget drivers提供良好的支持。这些gadget drivers都基于gadget接口,包括Ethernet/RNDIS, Mass Storage, serial/ACM等等。在gadget driver中需要定义好设备的各项属性包括端点数,DMA, ISO传输等。类似于写设备的firmware。
在linux2.6中已经可以支持OHCI host controller, 通过ohci_hcd可以访问大量的并正在增长的usb device driver。
OHCI driver |
Isp1301_omap driver |
UDC driver |
OHCI host controller |
Usb device controller |
Isp1301 |
OMAP OTG controller |
Usb bus |
gadget |
<!--[endif]-->
以下会针对每一部份分别进行分析。(未完待续)<!--[endif]-->
相关文章推荐
- Linux USB "On-The-Go"(OTG) on OMAP H2 软件架构分析(二)
- Linux USB "On-The-Go"(OTG) on OMAP H2 软件架构分析(三)
- Linux USB "On-The-Go" (OTG) on OMAP H2
- USB-(OTG)On-The-Go简介
- USB-OTG(on-the-go)
- The GNU/Linux "usbnet" Driver Framework
- omap35 出现 No more output is seen on the console after "Starting Kernel..." 调试信息
- [J2EE]The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- linux 使用rpm安装软件时,遇到"warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOK
- Maven项目红色叹号+JavaWeb: 报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java B
- The Wind River Registry on host "localhost" died unexpectedly
- 错误分析 error: invalid suffix "-ui" on integer constant
- Logon: "You must be granted the Allow log on through the Terminal (or Remote Desktop) Services Right
- Opensack Issue & Solution: "HypervisorUnavailable: Connection to the hypervisor is broken on host"
- "无法启动Web服务器。Web服务器无法找到请求的资源" 或 "unable to start debugging on the web server.the web server could not find the request"解决方法
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 淘宝应对"双11"的技术架构分析
- Linux&nbsp;USB驱动框架分析(一)
- notes on ibm:dw"5 things you didn't know about ... Command-line flags for the JVM"