嵌入式Linux下高速USB主控制器的设计与实现

发布者:老桃子最新更新时间:2010-04-09 来源: 现代电子技术关键字:Linux  驱动程序  USB  ISP1761 手机看文章 扫描二维码
随时随地手机看文章

  在嵌入式系统的发展历程中,Linux操作系统的源码公开,结构清晰,功能强大,可移植性强等特点使其在嵌入式领域应用越来越广泛。USB接口的热插拔,即插即用,数据传输可靠,扩展方便,成本低等优点使其逐渐成为嵌入式系统的必备接口之一。随着嵌入式系统应用领域的不断扩展,人们对其性能的要求不断提高,特别是USB设备的读写速度受到越来越多的关注。然而。目前多数嵌入式系统仅支持基础的USB低速或全速外设,不能满足人们对高速数据传输的要求。为此,基于AT91RM9200平台完成了高速USB的硬件设计和Linux操作系统下主机端驱动程序的开发。

  1 高速USB硬件接口设计

  目前的嵌入式系统设计中,USB接口的外扩主要采用微处理器芯片自带的USB控制器,一般只支持低速和全速协议,无法实现高速数据传输。该设计采用AT91RM9200处理器外扩ISP1761 USB控制器方案,解决了嵌入式系统下USB设备的传输速度问题。其USB硬件接口部分电路如图1所示。

  AT91RM9200是Atmel公司一款基于ARM920T内核的微型处理器。它有丰富的系统与应用外设及标准接口,时钟频率可达180 MHz,并且具有低功耗、低成本、高性能,在嵌入式系统中应用广泛。ISP1761是Philips公司开发的一款高速USB On The Go(OTG)控制器,芯片内集成了64 KB的高速缓冲,单次处理数据达32 KB,极大地提升了系统的处理性能,并且功耗很低,其内部集成了Slave主机控制器和外设控制器。此外,ISP761还有可配置的32 b/16 b异步CPU接口,该设计ISP1761外部数据总线设置为16 b模式。

  处理器AT91RM9200与外扩USB控制器的连接如图1所示。其中,A[17∶1]为地址线;DATA[15∶0]为数据线;WR_N为读使能;RD_N为写使能;CS_N片选信号采用NCS2;AT9lRM9200的中断源1分配给ISP1761作为其中断信号。处理器和ISP1761之间的数据传输通过中断方式实现,当USB接口有中断产生时,处理器的中断服务程序通过读取ISP1761的中断寄存器判断中断来源,从而执行相应的读/写操作。

  2 高速USB软件驱动实现

  2.1 Linux系统中USB驱动结构

  USB内核模块是Linux系统中USB子系统的核心模块,它为USB驱动(设备和主控制器)提供了一个统一的接口,以访问和控制USB硬件。

  如图2所示,应用程序发出的USB请求块(URB)经过上层的USB设备驱动和USB内核后到达USB主控制器。处于最底层USB主控制器的驱动(HCD)是USB主机直接与硬件交互的软件模块,它将解析URB后,再将数据发送到指定的USB设备上。

  2.2 ISP1761主控制器驱动的实现

  图3为ISP1761与操作系统相连接的接口框图。图3中,ISP1761要完成操作系统与USB设备的通信。驱动部分主要分两个层次:ISP1761硬件抽象层(HAL)和主控制器驱动(HCD)层。前者,通过GPIO接口和操作系统平台的相关函数来完成访问ISP1761硬件的功能;后者,主要实现将数据传输给连接的USB设备,并管理根集中器端口的功能。

  因此,该设计的软件驱动部分主要由以下两个层次来完成USB主机端的驱动功能。

  (1)ISP1761的HAL层。首先初始化设备结构,并添加设备到系统的设备层。其中,初始化部分主要完成ISP1761资源(如内存、中断等)的初始化设置和AT91RM9200处理器的初始化设置,为后期注册驱动程序做准备。如果系统成功添加了设备,在加载和卸载ISP1761主控制器驱动程序到内核时,就会进一步执行平台驱动程序的注册,否则将不能注册驱动程序。一旦注册成功,驱动程序就已经和设备绑定,任何用户态程序要操作此设备都可以通过platform_driver结构所定义的函数进行。下面给出该系统注册的platform_driver结构:

  其中,在设备探测和注销等函数中调用了如下一个重要的结构体isp1761_dev。该结构体主要包含了ISP1761设备驱动的基本信息和中断处理例程指针。

  (2)ISP1761的HCD层。Philips公司的ISP1761主控制器芯片遵循EHCI标准。该层在加载和卸载ISP1761主控制器驱动到内核时被调用,主要负责与连接的USB设备进行数据传输,并管理根集中器端口。具体包括主控制器例程、内存管理、根集中器和中心集中器的管理、数据传输等。

  其中,pehci_hcd_urb_enqueue()函数是该部分所要实现的重点函数,主要用于完成将来自USB core层的urb传输请求转换成EHCI可识别的传输描述结构。然后安排到EHCI的periodic schedule list或者asynchronous schedule list的合适位置。当HC完成urb对应的传输后,EHCI HCD通过urb→cornplete()通知USB core对应的传输结果,最终完成通信过程。该函数的原型如下:

  3 USB驱动的调试使用

  USB驱动的正常使用必须在内核中正确选择配置,除了默认配置之外,还要添加诸如SCSI设备的支持,VFAT文件格式的支持,新添加ISP1761驱动的支持等。ISP1761的驱动采用模块方式编译,系统启动后,逐层插入驱动模块加载USB主控制器驱动程序到内核。此时,系统插入U盘可成功获得分区,如下所示:

  执行挂载命令mount-t vfat/dev/scsi/host0/busO/target0/lun0/partl/mnt/ usb(前提是已经在/mnt目录下建立了USB目录,并且U盘的格式为win-dows下的vfat)便可成功挂载U盘到指定的目录/mnt/usb下。

  拷贝U盘上的文件到嵌入式系统,经多次测试,速度可达到约100~125 Mb/s,相比传统的嵌入式Linux系统下对USB的支持,速度得到了很好的提高,基本满足高速读/写的要求。

  4 结 语

  随着USB接口在嵌入式领域越来越广泛的应用和嵌入式Linux内核的不断扩展,嵌入式Linux内核支持的USB设备和USB主控制器越来越丰富,相应的驱动开发工作也将日益突出。该设计给出了嵌入式Linux系统下高速USB主控制器的硬件设计方案和驱动的实现方法,在提高系统性能的同时,降低了成本,有很好的实际应用价值。同时驱动的模块化结构设计保持了其最大可移植性,对于嵌入式下USB主控制器的驱动开发具有很好的借鉴意义。

关键字:Linux  驱动程序  USB  ISP1761 引用地址:嵌入式Linux下高速USB主控制器的设计与实现

上一篇:基于Intel PXA270的WinCE操作系统移植
下一篇:μc/Os-Ⅱ就绪表算法在ARM架构上的改动

推荐阅读最新更新时间:2024-05-02 21:02

USB3.0测试系统搭建和介绍
1 测试背景 USB总线自面世第一代开始,就对电气性能的要求特别高,特别是信号完整性。随着USB总线的不断升级,速率也是成倍的增长,从当年USB1.0的1.5Mbps,到后来的USB1.1的12Mbps,USB2.0的速率达到了480Mbps,USB3.0 Super Speed规范发布的时候已经高达5Gbps,在2015年,USB-IF协会更是发布了速率为10Gbps的USB3.1版本。如此高的速率对于设计中任何一点的瑕疵都是难以接受的,比如电源干扰、布线过长、线缆、连接器品质不好等等。USB版本的升级,不仅仅是信号速率的提升,原本只有一组信号线,也在USB3.0之后也增加到了三组信号线,信号的幅值也变得更低。这些综合在一起因素
[测试测量]
<font color='red'>USB</font>3.0测试系统搭建和介绍
iPad Pro支持USB鼠标?
今日有最新消息迹象显示,苹果可能会在 iOS 13 操作系统中加入鼠标或触控板功能,这一功能将会让 iPad系列生产力如虎添翼,更能够直接地与笔记本电脑形成竞争。大家都知道,苹果对于iPad系列的定位已经不仅仅局限于手机和笔记本电脑之间的一条产品线了,在iPad Pro上更加有野心地想以之来取代笔记本。 说实在的,目前iPad Pro 无法取代电脑的理由太多了,最多人提及的一点就在于iOS缺乏对鼠标的支持,不能像电脑那样快速执行很多细微、精确的操作。现在,苹果可能将会在iOS 13操作系统中增加对鼠标外设的支持,而事实的真假则可能将会在 6 月 3 日的全球开发者大会上揭晓。 这个消息最先来源于外媒编辑Federico Vitic
[手机便携]
iPad Pro支持<font color='red'>USB</font>鼠标?
具有成本效益的可靠的USB3.0系统设计
     USB是当今最成功的PC接口,安装数量超过60亿,在PC和接口设备上的普及率接近100%。虽然高速USB的480Mbps数据传输速度可满足许多消费者现有的需求,但是与日俱增需求(如高清视频和更快速的数码影音文件的下载)推动了SuperSpeed USB(3.0)的发展。   一般接口的新一代规格,其数据传输速度通常要增加两倍,而USB3.0的带宽却增加了十倍。此外,USB3.0规格不再使用简单的主从式、封包广播式的数据传输架构,而是使用更加复杂的双向封包交换架构。   USB3.0系统设计师面临的最主要挑战是解决5Gbps信号传输速度所带来的问题,设计师必须解决包括系统对信号衰减和抖动增加的敏感度等问题。此外,U
[嵌入式]
米尔芯驰D9超强国产CPU,能跑安卓、Linux、RTOS
米尔能跑安卓、Linux、RTOS的国产核心板开发板 你还记得缺芯、涨价的那段日子吗?近几年,因为贸易战、技术打压,芯片国产化已成为趋势。 今天给大家推荐一款能跑安卓、Linux、RTOS的开发板,而且是车规级工业超强国产CPU。那就是米尔电子今年新推出的,基于芯驰D9系列核心板及开发板。 芯驰D9有什么特点? 1、D9处理器D9处理器是国产厂商芯驰推出的专为新一代电力智能设备、工业互联网设备、工业控制设备、工业机器人、工程机械、轨道交通等先进工业应用设计的高可靠、高安全、高实时、高性能芯片。 D9处理器特点:  采用Cortex-A55 + R5组合架构  台积电16nm FinFET 制程工
[嵌入式]
米尔芯驰D9超强国产CPU,能跑安卓、<font color='red'>Linux</font>、RTOS
S3C2440 字符设备驱动程序之LED驱动程序_测试改进(三)
在加载驱动之前,先来看一下/proc/devices,里面是现在内核所支持的设备。 第一列是主设备号,对应的是内核数组chrdevs的下标,第二列是它的名字。 加载驱动的命令: insmod first_drv.ko at /proc/devices 写个测试驱动程序来测试它。 mknod /dev/xxx c 主设备号 次设备号 register_chrdev(111, first_drv ,&first_drv_fops); 怎么确定这设备号111? 1、先cat /proc/devices,有哪一个空缺项,然后选取那个空缺项。(1~255)。 2、也可以写为0,系统会自动给我们分配一个
[单片机]
基于CY7C68013A芯片的USB键盘的设计
  USB接口具有传输速率高,体积小,可向外供电等特点,因此使得计算机与外部硬件设备之间的连接和使用都十分方便。目前,计算机的外围设备中,例如鼠标、键盘、打印机都开始采用USB接口实现。本文中,将介绍Cypress公司的USB接口芯片--CY7C68013A,并介绍基于CY 7C68013A实现的USB键盘。   1 CY7C68013A芯片简介   一个典型的USB应用系统由USB设备、USB主机和USB电缆组成,USB主机一般指具有USB接口的计算机,连接到主机USB端口的外部设备一般称为USB设备。   Cypress的EZ-USB FX2系列芯片是世界上第一款集成了USB2.0协议的微处理器,EZ-USB FX2LP
[嵌入式]
用于便携式USB 装置的单片USB电源管理器、理想二极管控制器和电池充电器
   凌特公司( Linear Technology Corporation )推出用于便携式 USB 装置的单片自主电源管理器、理想二极管控制器和独立电池充电器 LTC4085 。该器件具有电源通路( PowerPath TM )控制功能,可为 USB 外围设备提供电源,并从 USB V BUS 或墙上适配器电源为该外围设备的单节锂离子电池充电。为了满足 USB 限流规格要求,当系统负载电流提高时, LTC4085 自动降低电池充电电流。为确保总线连接时完全充电的电池仍然保持满电量,该集成电路通过 USB 总线直接向负载供电而不是从电池吸取功率。一旦去掉电源,电流就通过内部 200m
[新品]
龙芯2号低价电脑将上市 阻击100美元笔记本
  新浪科技讯 北京时间4月25日消息,据国外媒体报道,一家中国公司正在推广一款基于Linux系统的低价计算机,希望籍此消除“数字鸿沟”。这家名为“黄羊谷”的公司推出的低价计算机名为“Municator”,售价仅为150美元,目前已经形成正式产品。即使考虑到三个月的生产周期,它也将在“100美元笔记本”之前上市。   100美元笔记本计划最早由麻省理工学院媒体实验室创始人尼古拉斯·尼葛洛庞帝(Ni cholas Negroponte)提出,目标是让全球每一位儿童都用上笔记本。去年12月“每个孩子一台笔记本”计划组织选定中国台湾厂商广达计算机为100美元笔记本的原始设计制造商(ODM)。但到目前为止,100美元笔
[焦点新闻]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved