您的位置 首页 设计

SEP6200平台上Linux内核的USB OTG驱动规划

为了满足两个USB设备之间直接进行数据通信的需求,通过对现有USB OTG协议和相关应用的研究,在国产SoC芯片SEP6200平台上设计并实现了基于Linux内核的USB OTG模块驱动。首先介绍了O

摘要:为了满意两个USB设备之间直接进行数据通讯的需求,经过对现有USB OTG协议和相关运用的研讨,在国产SoC芯片SEP6200渠道上规划并完结了依据Linux内核的USB OTG模块驱动。首要介绍了OTG规范中的对话恳求协议(SRP)和主机交流协议(HNP),然后拟定并规划了依据USB操控芯片USB3343的硬件模块计划,终究依据Linux内核中已有的USB驱动架构完结了USB OTG设备驱动的规划,并终究完结了SEP6200嵌入式渠道USB Host和Device人物的自在转化功用。
关键词:USB OTG;SEP6200;USB3343;Linux;设备驱动

导言
传统的USB协议(USB 2.0)规则了两个设备之间进行数据通讯时,必须有一个Host设备作为固定的主机,经过这个主机来操控设备问的数据传输。在日常运用中,根本都是将USB设备衔接到PC,并在PC的操控下进行数据交流。这种交流方法,一旦离开了PC,各设备间就无法运用USB口进行直接操作。跟着嵌入式设备的快速开展,两个USB设备之间直接进行数据交流的需求变得越来越火急。USB On—The—Go(USB OTG)技能便应运而生。OTG技能完结了在没有Host的情况下,设备之间点对点的数据操控与传输。本文经过研讨USB 2.0协议和USB OTG弥补规范,结合详细运用需求,建立了依据国产SoC的嵌入式USB OTG模块硬件渠道,并在Linux操作体系渠道上规划并完结了依据国产内核主控芯片SEP6200的USB OTG设备驱动。

1 USB OTG协议与完结方法概述
USB OTG规范在彻底兼容USB2.0规范的基础上,增添了电源办理(节约功耗)功用,并可供给必定的主机检测才能,支撑对话恳求协议(SRP)和主机交流协议(HNP)。在OTG中,初始主机设备称为A—device,外设称为B—device。
对话恳求协议(Session Request Protocol,SRP):为了节约功耗,A—device在总线不被运用时答应VBUS总线关断,此刻B设备就会检测到该状况并进入功低耗形式。当外部B—device需求向A—device建议对话时,它会经过SRP向A—device宣布恳求,恳求A—device向VBUS供电并发动一次对话。对话将随VBUS的敞开而开端,随VBUS的封闭而完毕。
主机交流协议(Host Negotiation Protocol,HNP):该协议答应两个直接相连的OTG设备进行主机Host功用的切换,它可以依据电缆的衔接方法来决议初始化人物,然后答应设备在通讯时可以改动操控信号。当用户形式或运用程序下B—device有输入时,HNP将作初始呼应。
OTG两用设备运用新式mini—AB插座,然后使mini—A插头、mini—B插头和mini—AB插座增添了第5个引脚(ID),以用于辨认不同的电缆端点。mini—A插头中的ID引脚接地,mini—B插头中的ID引脚浮空。当OTG设备检测到接地的ID引脚时,表明默许的是A—device(主机);而检测到ID引脚浮着的设备,则认为是B—device(外设)。体系一旦衔接后,OTG的人物还可以替换。A-Device作为默许主机并供给VBUS电源,并在检测到有设备衔接时复位总线、枚举并装备B-device。

2 USB OTG模块硬件计划
为了后期USB OTG驱动规划需求,首要对OTG硬件模块作一些简略的介绍。本文规划的USB OTG模块在硬件上由主控芯片SEP6200以及USB操控芯片USB3343构成。SEP6200是东南大学国家ASIC工程中心自主研制的一款定坐落手持视频播映设备、卫星导航产品的高性能运用处理器,它内部集成了ULPI总线接口,支撑SRP和HNP协议,具有USB2.0 OTG功用。USB操控芯片USB3343是SMSC公司出产的一款高速USB收发器,支撑主机、设备和OTG三种功用,十分合适用于要求低功耗作业和待机作业的便携式设备。SEP6200内部的OTG Controller和USB3343之间经过otg_transceiver接口来完结交互。
在本模块中,SEP6200处理器经过自带的ULPI接口与USB3343进行衔接和通讯,而USB3343收发操控器则是经过外接USB MiniAB插座与外部USB设备进行衔接。其硬件衔接结构图如图1所示。

a.jpg

此硬件渠道以SEP6200处理器为中心,处理器除了ULPI接口的12根总线与USB3343相衔接外,别的别离经过两根GPIO接口线来操控完结OTG的低功耗功用。其间一根(GPIO_RESETB)用来对USB3343进行软件复位,另一根(GPIO_EN)用来操控对VBUS总线供电。当中心板作为device与PC进行衔接时,软件检测到ID信号状况为浮空后将GPIO_EN引脚置0,堵截电源模块,使5 V供电电压与VBUS总线阻隔。相反,当中心板作为Host与U盘等外设进行通讯时,软件检测到ID信号状况为接地,然后将GPIO_EN引脚置位,经过电源使能模块将5 V电压加载到VBUS总线上,完结中心板作为主机对外设进行供电,然后完结对外部设备的检测和枚举等后续操作。

3 USB OTG驱动架构的规划与完结
3.1 OTG设备驱动程序架构
本规划的软件驱动开发依据Linux操作体系渠道。作为开源操作体系,Linux有杰出的兼容性和强壮的USB技能支撑。OTG设备驱动程序首要由USB方针设备软件包和USB主设备软件包构成。OTG驱动经过衔接器中“ID”信号的不同衔接,依据SRP和HNP协议的内部机制,确认运用USB主设备软件包仍是USB方针设备软件包。图2是OTG没备驱动程序架构框图。

b.jpg

当OTG设备以从机方法作业时,USB方针设备功用模块作业。方针设备操控驱动完结USB方针设备软件包与OTG硬件问的数据交流。USB协议层完结USB协议规范,USB方针设备类驱动的功用取决于OTG设备的功用。
当OTG设备以主机方法作业时,USB主设备功用模块丁作。主操控驱动完结USB主设备软件包与OTG硬件间的数据交流,USB总线驱动保存设备的信息。OTG供给通用的主设备类驱动程序,驱动支撑的这些方针主设备包含在方针设备的列表里。
依据以上剖析,驱动软件规划的整体使命首要分为:USB从机设备驱动规划、USB主机操控器驱动规划以及USB OTG驱动规划。其间从机设备驱动模块和主机操控器驱动模块相互独立,OTG驱动依赖于从机设备驱动和主机操控器驱动。
3.2 USB从机设备驱动规划
依据SEP6200的中心板体系在作为USB从机设备时,要应对PC主机的规范恳求,处理USB总线业务和用户功用。因而从机驱动包含3层:UD C驱动程序、Gadget驱动程序和Gadget API。UDC驱动程序担任直接拜访硬件,操控USB设备与主机间的底层通讯,向上层供给与硬件相关操作的回调函数。Gadget驱动程序详细操控USB设备功用的完结。Gadget API则是供给给UDC驱动程序回调函数的简略封装。
Linux内核首要经过musb_init_controller()函数初始化USB设备操控器,OTG驱动供给的状况机依据硬件信息将USB OTG作业形式装备成从机形式。接着内核会初始化Gadget驱动,完结Gadget驱动和UDC驱动的绑定,并装备操控器使其开端作业。然后调用底层GadgetAPI函数来激活端点进行数据传输。USBOTG界说了三个端点;程序中界说端点0在操控传输中应对设备枚举,端点1的功用为向PC机发送数据,端点2的功用为接纳PC机发送的数据。终究,经过中止呼应和中止处理函数来完结中心板作为设备与PC机的通讯操作。内核运用struct musb结构体描绘UCD驱动实例的各种信息。
3.3 USB主机操控器驱动规划
中心板体系的主机驱动分为几个部分:Host controller drive、USB core和Class driver。在本规划中,Hostcontroiler drive与所运用的USB主控芯片USB3343相关,而USB Core和Class driver在Linux内核中供给了相应的支撑。
Linux内核运用usb_hcd结构描绘USB主机操控器驱动Host controller drive。usb_hcd结构描绘了USB主机操控器的硬件信息、状况和操作函数,其界说如下:
c.jpg
软件依据HNP协议履行完一切的HNP状况后,OTG驱动进入USB Host形式。在对底层硬件初始化后,注册Hub和USB存储类设备,随后加载hub_probe对根Hub进行初始化和枚举。当外部USB设备刺进后,体系将对USB类设备进行枚举,查找对应的USB存储类设备驱动,并加载stora ge_probe,然后读取刺进的USB存储类设备的文件体系结构,将该存储设备注册为一个scsidisk。运用mount指令将该设备挂载到相应目录后,即可完结对USB存储设备的读写操作。
3.4 USB OTG驱动规划
OTG驱动维护着一个OTG状况机,然后支撑HNP和SRP协议,转化主机端和设备端功用,上文中硬件状况的检测和驱动形式转化即由此完结。在模块初始化的时分,首要对OTG驱动进行注册,OTG驱动将本身注册为一个char设备。当找到设备时,在注册函数中履行设备操控器驱动对应的probe函数,初始化OTG模块,随后调用中止恳求函数恳求中止,并设置相应的中止处理函数。在本规划中,当有OTG中止发生时,首要履行硬件拜访层的中止处理函数phy3343_hal_isr(),在这个函数中读取中止来历,若判别是OTG中止,则调用OTG驱动的中止处理例程usb_ otg_isr(),发动OTG状况机。
OTG驱动还需求向文件体系供给相应的file operations接口,供上层的application调用,这些接口函数包含:usb_otgdev_open、usb_ otgdev_close、usb_otgdev_ioctl、usb_otgdev_fasync等。usb_otgdev_open函数担任OTGapplication在翻开OTG设备文件时,经过Linux文件体系接口调用该函数,进行OTG驱动本身参数的初始化;usb_otgdev_close函数担任OTG application在封闭OTG设备文件时,经过Linux文件体系接口调用该函数,进行OTG驱动本身参数重启;usb_otgdev_ioctl函数是在OTGapplication调用OTG设备文件的ioctl函数时,Linux文件体系接口调用该函数;usb_otgdev_fasync函数则是当OTG的application设置或许重设异步告诉时,对该函数进行调用,当异步告诉形式设置成功回来值为0,失利时回来负值。
Linux内核中经过界说struet otg_transceiver结构体,供给给开发者一个与USB硬件进行直接交互的接口。在本规划中,即经过该结构体完结了软件与USB主控芯片USB3343的交互通讯功用。

结语
USB OTG技能满意了两个设备之间直接进行数据通讯的要求。在对现有的OTG协议和相关运用进行深入研讨的基础上,本文在国产SoC芯片SEP6200渠道上规划并完结了依据Linux内核的USB OTG模块驱动。整个SEP6200中心板体系可以支撑USB主机形式、USB设备形式,而且可以完结两个形式间的切换。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/295485.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部