[导读]Linux2.6环境下USB设备的驱动实现
0 引言
嵌入式linux系统环境以其易于移植裁减、内核小、效率高、完整、原代码开放及性能优异等特点,在嵌入式领域得到了非常广泛的应用。Linux的USB设备端的源代码中主要有USB device的海量存储设备、串口设备、网络设备等设备驱动程序及各种USB device控制器芯片的驱动程序。市场上USB设备控制器芯片种类繁多,大多数用户需要针对特定应用来开发相关的USB设备控制器驱动程序,才能使设备正常工作在linux操作系统下。
1 USB设备端驱动系统
Linux Gadget子系统主要分为三层:第一层为芯片驱动层,负责将各种USB device控制器抽象为统一的函数接口,以供上层驱动程序调用;第二层主要是对操作函数的简单封装;第三层为设备驱动层,可根据系统的需求实现所对应的功能。图1所示是Linux Gadget子系统的驱动层次。Linux Gadget子系统的设备驱动层主要根据各个类别的规范及协议实现各种设备的驱动,本设计需要使一个嵌入式设备拥有移动硬盘的功能,所以,可以根据海量存储类的规范及协议来实现该功能。
1.1 UDC驱动的基本构架
图2所示是UDC驱动的基本构架图。在控制器驱动程序中,首先应注册platform驱动,调用其probe函数搜索设备,并在probe函数内初始化usb_ep和usb_gadget等结构,然后注册设备,并申请中断,接着等待中断进入中断服务子程序,最后声明和实现usb_gadget_register_driver注册函数并输出给上层驱动。在该过程中,联系它们的纽带是一些全局结构体变量。
1.2 Gadget API
Gadget API为Gadget系统定义了统一的数据结构和接口函数,它和主机端的USB Core地位类似,但功能仅限于提供编程接口,如用结构体usb_gadget_ops和usb_ep_ops对设备控制器驱动操作函数和端点操作函数进行重新封装。比较特殊的是Gadget驱动程序注册函数usb_gadget_register_driver,它们是由设备控制器(UDC)驱动直接提供的,用于将UDC绑定到gadget driver。这增加了Gadget Driver和UDC之间的依赖性。
在设备端,Gadget系统虽然类似主机驱动系统分了三层结构,但Gadget API只定义了一些数据结构、宏和功能函数,并对UDC驱动程序进行了简单包装,而没有驱动管理等功能。
1.3设备应用驱动程序
设备端应用程序(Gadget Driver)用于控制USB设备功能的实现,使设备表现出“网络连接”、“打印机”或“大容量存储设备”等特性。本文以大容量移动存储设备为例来实现移动硬盘的功能。
BULK ONLY传输指的是主机和大容量存储设备之间的一种数据传输方式。
2设备端驱动调度
在嵌入式Linux操作系统中,Gadget driver和Gadget API可完成部分USB协议处理、BULK ONLY等传输协议以及指令的解析处理,用户只需要在设备控制器驱动程序中完成部分USB协议处理和Gadget API的衔接工作。
图3所示的流程图给出了USB设备端驱动程序的基本调度思想。该方案的主要思路是被动的接受主机端的传输命令(任何类型的通信都由USB主机发起,USB设备间不能直接通信),然后通过中断触发的方式完成主机端的数据传输。当产生设备端中断时,设备控制器驱动程序首先判断中断类型。当其为批量传输端点IN中断时,驱动程序会将该EP下链接的REQ中的数据依次写入USB2.0 OTG IP的设备控制器的内存区;当其为批量传输OUT中断时,驱动程序会将设备控制器内存区的数据读入REQ中的buffer中;当其为端点0的控制传输中断时,驱动程序将读取端点缓冲区的数据,并解析当前的设备请求。如果主机传输给设备的设备请求为USB REO SEDRESS(设置设备地址)、USB_REQ_GET_STATUS(获取设备状态)、USB_REQ_SET_FEATURE(设置设备特性),设备控制器驱动程序会自行响应请求。但是,如果是其它设备请求,如GET_DESCRIPTOR(获取设备描述符)时,设备控制器驱动便会将该请求提交给Gadget Driver,然后由Gadget Driver排队将该设备请求提交给端点,以等待下次控制端点中断。
控制传输比较复杂,它需要完成建立阶段、数据传输阶段和状态阶段。整个控制端点中断的处理可通过四个状态实现,分别是:端点0空闲(EP0_IDLE)、 数据IN传输(EP0 IN DATA_PHASE)、数据OUT传输(EP0 OUT DATA_PHASE)和状态阶段(EPO_STATUS)。
EP0_IDLE状态主要处理建立阶段的setup令牌,并根据获得的设备请求处理能够处理的设备请求,同时把不能处理的设备请求(如获取设备描述符,配置描述符等)提交给上层Gadget Driver;EP0_OUT_DATA_PHASE状态主要处理数据阶段的OUT传输;EP0_OUT_DATA_PHASE状态主要处理数据阶段的IN传输;EP0_STATUS状态则主要完成控制传输过程中的状态阶段。
在图3所示的流程图中,EP0为控制传输端点,EP1、EP2、EP3为批量传输端点,它们主要包括端点传输类型、端点缓冲区大小等信息。REQ为Gadget Driver提交的端点请求,主要包含传输的数据长度和地址。[!--empirenews.page--]
3 UDC的设计与实现
设备控制器驱动主要分为Gadget Driver接口模块、Gadget API函数模块、中断处理模块、数据结构定义、初始化模块、硬件读写模块等,各模块可以单独进行设计。
3.1 数据结构定义
根据Gadget API提供的数据结构,可以定义自己的数据结构(如设备数据结构otg_udc,端点数据结构otg_udc_ep等)来描述该USB设备控制器。
定义完特定的设备控制器驱动的数据结构后,再进行相应的映射(static struct otg_ip_udcmemory),以便将具体的设备控制器、设备端点和Gadget的抽象数据结构联系起来。
3.2 Gadget Driver接口模块
UDC驱动提供有usb_gadget_driver_register模块,该模块可实usb_gadget_register_driver等绑定函数的功能,以绑定UDC和Gadget Driver。
3.3 Gadget API函数模块
Linux USB gadget driver API定义了一个通用的gadget driver的接口,利用gadget driver可通过API与底层USB controller driver进行通信。该API屏蔽了底层硬件的不同,故可使gadget driver只注重功能的实现,而尽量与硬件无关。其代码如下:
该模块主要实现Gadget API定义的函数功能,如结构体usb_ep_ops和usb_gadget_ops中的函数,以及usb_gadget_register_driver注册函数等。这些函数可供Gadget Driver调用。
3.4 中断处理模块
由于设备是被动的接受主机的控制,设备的所有行为都是基于设备中断的触发,因此,函数主要处理Reset中断、Resume中断、Suspend中断、EP0中断以及其他端口中断。
3.5 初始化模块
初始化主要是打开中断、打开并设置端点、设置最大总线转向时间(此时问即包间最大等待时间),还要设置最大缓冲区长度等。
3.6 硬件读写模块
和主机控制器驱动程序类似,设备控制器的读写方式分为PIO读写和DMA读写两种模式,读写内容也分为寄存器读写和端点缓冲区读写。在读写过程中,所有读写地址都必须是双字节对齐模式。
4 驱动测试结果
本文研究的HCD已经应用于实际的工程中,驱动测试的硬件环境如图4所示。
本系统的硬件平台是Realview EB,这是一个高度集成的开发板,其母板上的硬件资源包括:一个FPGA (Xilinx Virtex-II XC2V6000)、静态和动态内存、集成外围设备和两个用于Core Tiles连接的tile连接器。设计时可通过增加一个额外的Core Tile(ARM926EJS CORE)来创建一个微处理系统。Logic Tile(Xilinx XC2V6000)中包含有一块具有主机控制器功能的芯片otg_ip,otg_ip可通过片内总线AHB挂载在母板EB上。在该开发板上运行Linux系统时,可通过交叉编译调试环境将开发报与一台PC机相连,这样,调试信息就可以通过串口打印在该主机的终端上。otg_ip可通过ULPI接口连接PHY芯片,并与USB设备相连。
设备控制器驱动模块otg_ip_udc.ko和g_filestorage.ko成功加载后,再将其作为移动优盘插入电脑主机的USB接口,驱动即可成功识别。图5所示是内核打印的信息结果。
5 结束语
USB通用串行总线具有传输速率高、功耗低、可热插拔和发展快速等优点,而Linus操作系统则具有易于移植和裁减、内核小、效率高、原代码开放等特点,本文通过将其结合而给出的Linux环境下的USB设备驱动方法,可以快速地实现大容量的存储功能,实验表明:该系统的数据读写速度可以达到681 kB/s,而且效果良好。
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
USB-C接口全称为USB Type-C,属于USB 3.0下一代接口,其亮点在于更加纤薄的设计、更快的传输速度(最高可达10Gbps)、更强的电力传输(最高100W),此外USB-C接口还支持双面插入,正反面随便插,相...
关键字:
iPhone 15
Lightning
USB
借助 Adyen 的支付业务能力,SHOPLINE 能够简化并整合运营,轻松扩展业务,并提供宝贵的消费者洞察。 新加坡2022年9月28日 /美通社/ -- 服务众多领先企业的全球金融科技平台 Adyen(AMS:...
关键字:
智能电
AD
新加坡
PLATFORMS
新泽西州皮斯卡托威 2022年9月23日 /美通社/ -- 致力于推动技术进步、造福人类的全球最大专业技术组织IEEE今天宣布,Sophia Muirhead将成为...
关键字:
IEEE
UI
AD
TE
GRL东莞实验室将与上海和台北实验室一同,提供Windows Host认证服务 加利福尼亚州圣克拉拉市2022年9月22日 /美通社/ -- 高速信号和充电技术测...
关键字:
Windows
THUNDERBOLT
USB
OS
接下来测试烧写功能,本次采用串口和USB烧写方式。使用ISP串口烧写这是51单片机常用的方案,本次测试比较顺利,没有遇到什么问题。但是USB烧写没有测试成功,USB烧写方式不需要任何的驱动和硬件支持,直接将USB线和ST...
关键字:
PCB控制板
USB
串口
仓储机器人领域的领先企业率先实现这一行业里程碑 马萨诸塞州威尔明顿2022年9月16日 /美通社/ -- 仓储处理自主移动机器人(AMR)市场领先企业Locus Robot...
关键字:
ROBOTICS
AMR
USB
移动机器人
北京2022年9月14日 /美通社/ -- 在刚刚结束的2022年中国国际服务贸易交易会(简称"服贸会")上,一大批高科技企业展示了他们的数字技术和产品,数字服务贸易创新发展迎来先机。 Visito...
关键字:
机器人
SERVICES
CHINA
AD
北京2022年9月9日 /美通社/ -- 2022年9月9日,正值新学期开学季和世界特应性皮炎日(World AD Day)前夕,由辉瑞主办的"全程守护,净享灿烂明天——特应性皮炎高峰论坛"...
关键字:
AD
控制
大众
BSP
–研究结果表明,开发用于治疗与过敏性和炎症性皮肤疾病(包括特应性皮炎)相关瘙痒症的CBP-174具有良好的安全性和耐受性 – 美国圣地亚哥和中国苏州太仓2022年9月1日 /美通社/ -- 康乃德生...
关键字:
BSP
SE
AD
动力学
北京2022年8月31日 /美通社/ -- 全球营销衡量与体验管理平台 AppsFlyer 携手 Facebook Gaming,共同发布《游戏App:隐私时代下的制胜指南》, "解码" 游戏 App...
关键字:
FACEBOOK
GAMING
APPS
AD
(全球TMT2022年8月26日讯)运输和物流提供商GEODIS和用于营运仓库的自主移动机器人(AMR)企业Locus Robotics宣布了一项新的扩展协议,将在未来24个月内在GEODIS的全球仓库网点总共部署10...
关键字:
USB
GE
AMR
ROBOTICS
GEODIS与Locus Robotics签署扩展协议,在全球仓库网点部署1000个LocusBot 田纳星州纳什维尔和马萨诸塞州威明顿2022年8月25日 /美通社/ -- 全球领先的运输和物流提供商GEODIS和用...
关键字:
USB
ROBOTICS
GE
AMR
以下内容中,小编将对路由器的相关内容进行着重介绍和阐述,希望本文能帮您增进对路由器的了解,和小编一起来看看吧。
关键字:
路由器
USB
处理器
这档西班牙语版网络系列节目每周播出,旨在帮助零售交易者应对不断变化的金融市场行情。 澳大利亚墨尔本2022年8月23日 /美通社/ -- 对投资者和交易者来说,过去几年上演...
关键字:
ST
RS
AD
FOR
北京2022年8月22日 /美通社/ -- 随着蜜桃产业的繁荣发展,中国东部的山东省蒙阴县的当地农民在夏季不仅享受着蜜桃的芬芳,还获得可观的收入。 图为山东省蒙阴县两个果农收获蒙阴蜜桃。[照片提供给新华丝路] 蒙阴拥...
关键字:
AD
BSP
COM
HTML
速度比TMS320LF2407A有了质的飞跃,从最高40M跃升到TMS320F2812的150M,处理数据位数也从16位定点跃升到32位定点。
关键字:
dsp2812
AD
CAN
从亚太地区选定五家初创公司合作,试点新技术,重点关注标签和包装行业的价值链效率,供应链弹性及可持续性和材料创新 上海2022年8月22日 /美通社/ -- 全球...
关键字:
ETC
加速器
ST
AD
继进军硬件设计领域之后,Ayden首次推出NYC1 和 AMS1两款新型终端机。 这两款终端机有利于大企业客户和平台型公司简化线下支付流程,具备灵活性和更高性价比。 阿姆斯特丹2022年8月18日 /美通...
关键字:
终端设备
AD
终端机
AMS