您好,欢迎访问三七文档
OTG相关协议AttachDetectionProtocol(ADT)ADT协议用来检测设备的连接和断开(在没有总线供电的情况下),原理为设备连接或断开后线路的阻抗发生变化,发起ADT探测的设备用一电流源给Vbus升到一定电压的时间会不同。SessionRequestProtocol(SRP)SRP用来请求A设备给Vbus进行供电。由于一般的移动电子设备对功耗要求比较高,因此OTG标准允许A设备平常关闭对总线的供电,而B设备就可以使用SRP请求A设备打开Vbus,建立一个有效的连接。HostNegotiationProtocol(HNP)对于之前提到过的dual-roledevice,即可以做A设备又可以做B设备。默认情况下是根据USBOTG线的连接情况确定A设备,而HNP可以让dual-roledevice互联时,在不调换USBOTG线的情况下,通过协商实现A设备、B设备的角色更换。2.3OTG软件架构根据USBOTG的电气和机械标准,USBOTGControler需要支持一系列的OTG协议;而ControlerDriver理所当然的就需要和这个Controler进行交互,读取状态、发起操作等;当完成了OTG的检测连接、建立连接的工作后,最终需要去让相应USB设备的HostControler或者DeviceControler去进行数据传输,OTGDriverCore则负责这个工作。图8OTG软件架构3Android下USB驱动开发根据之前的介绍,进行USB传输的驱动开发在从设备端需要进行GadgetDriver的开发;在设备端需要进行HostDeviceDriver的开发。而之前介绍的相应Controler的驱动由于是直接和相关硬件控制器交互,一般由芯片厂商或者平台端完成。由于USB设备的普及应用,USB标准对一些通用的设备:键盘、鼠标、U盘等做了规范,即不同的设备类(USBClass)。对于这些通用设备,由于设备端按照标准进行设计、固件程序由厂商按照标准实现;主机端有对应的标准驱动程序,因此只要安装相应驱动即可。对于自定义的设备或是功能来说:3.1Host端驱动开发由于HostControlerDriver做的工作以及HostCoreDriver提供的完善接口,这里的Host端驱动开发相对来说已经是比较简单了。当设备的连接探测、设备信息获取等一系列操作完成后,会遍历注册到核心的HostDeviceDriver为连接到Host端的设备寻找一个控制驱动,因此在编写驱动时需要写好自己的匹配规则;当编写的驱动注册到后,核心会创建一个字符设备,用户空间一般就通过这个字符设备来读写USB设备,因此驱动中实现读写等其他设备操作接口是最重要的一部分内容。图9Host端驱动开发步骤对于USB设备的读写,之前有提到过在从设备端有多个EndPoint(可寻址的FIFO),所以读写接口的实现就是对这些EndPoint进行操作。USB设备中的端点除了0号端点是双向的(用来初始获取设备信息使用),其他端点都是单向的。读/写接口需要和IN/OUT端点交互,调用核心提供的接口从IN端点中读或者向OUT端点中写。图10Host和端点进行数据传输对于数据传输的方式,USB标准规范了四种传输方式:控制传输(ControlTransfers)、中断传输(InterruptTransfers)、同步传输(IsochronousTransfers)、块传输(BulkTransfers)。USB主机通过控制传输向USB设备读取信息、配置;中断传输具有固定速率、数据量少的数据传输;同步传输适合实时流传输,但是不保证数据正确性;块传输适合大量数据传输,提供错误检测和重传机制。在实际程序中,选定不同的传输方式,只需要使用不同的内核接口即可,而具体的协议过程会由硬件控制器及其驱动来完成。对应于具体函数,可以参考内核中的usb-skeleton.c对应进行了解。对于主要的接口和基本的编写过程下面提供一个简单的草图:图11Host端驱动具体函数草图3.2Device端驱动开发对于Android设备来说,属于USB复合设备(设备上有多个通过USB管理控制的功能)。为了方便用户使用,Android将每种功能对应的gadgetdriver做了重新组织并和应用层交互:图12Android下USBdevice端驱动组织在这样的架构下,USBgadgetdriver做的事情就是描述自己属于何种类型的设备,USBHost可以访问的端点有哪些、端点的性质,读取端点、填充端点的具体方式。USB从设备利用描述符(Descriptor)来表明设备的属性,USB标准规定了各种不同的描述符,以及描述符的具体内容,USB主设备通过获得这些描述符的信息来判断连接设备的类型、功能等一系列信息。一般来说,USBgadgetdriver中需要关心的描述符有:设备描述符、接口描述符、端点描述符、配置描述符,这里面端点描述符描述EndPoint的方向、大小、地址等信息;设备描述符描述设备的生产商信息、设备类、遵循协议等信息;其他描述符可以认为是逻辑上的(一个接口对应一个功能,它对应着一个驱动)。图13USB从设备描述符及逻辑关系在Android对数据结构的组织和composite框架下,如果需要新加一个USBgadgetdriver只需要填充好Android提供的一个函数指针结构体,在一个bind_config接口中去把实现好的composite框架规定的接口加入composite框架中去,具体的端点操作可以在一些可选的接口中维护自己的读写接口(一般在init中注册设备)。详细可参见f_adb.c文件。图14Android下新加功能需要关注
本文标题:OTG相关协议
链接地址:https://www.777doc.com/doc-2885099 .html