基于OHCI的嵌入式USB主机控制器接口实现

发布者:Tianyun2021最新更新时间:2012-07-23 来源: 21ic 关键字:OHCI  嵌入式  USB主机控制器 手机看文章 扫描二维码
随时随地手机看文章

1 引言

当前有关 USB 的开发,大多是针对USB 外设或是USB 高层驱动程序开发,少数基于单 片的无OS(operating system)的USB 主机开发大都是由个人完成,其软件的耦合度高、接 口不够清晰、可重用性低。而LINUX 中的USB 主机驱动程序由于其复杂性和对系统的依赖 性,对其在无OS 平台上的移植带来了一定的困难。论文以Compaq、Microsoft 等公开的 USB 主机控制器接口规范为基础,遵循USB 主机的协议规范,开发了独立于操作系统的USB 主机底层驱动程序,并在S3C2410 平台上得到了验证。下面详细论述主机控制器接口规范及 驱动程序实现。

2 USB 体系结构

USB 体系包括一系列的硬件层和软件层,如图1 所示。

 

 

为了实现其可重用性和适合嵌入式系统特性,图 1 借鉴了PC 机上的USB 主机系统结 构,同时对一些在嵌入式系统中不必要的功能进行了取舍。用户程序和USB 设备类驱动通 过加工和分解IRP,构建相应的URB(Universal RequeST Block)并通过HCD(Host Controller Driver)提供的接口传递给主控制器驱动程序HCD。HCD 处理URB 并建立相应的端点ED 和传输数据TD,其基本信息包括:USB 设备地址和端点号、数据传输类型、最大包长度、传输 方向、传输速度和内存缓冲区地址等,细节在下文介绍。然后启动HC(Host CONtroller)进行数 据传输。HCD 还负责主机控制器HC 的管理,通过一组硬件寄存器来控制HC。HC 通过USB 总线与设备相连,在HCD 的控制下处理数据的输入输出。HC 还提供协议引擎、差错处理、 远程唤醒、帧产生等功能。

HC 是USB 主机系统的硬件核心,它位于USB 协议栈中最低层,HC 向上提供一个接口 规范HCI(Host Controller Interface),HCD 是此接口的具体实现。目前USB 的HC 芯片组有三 种,而随之对应的HCI 也有三种:EHCI(Enhanced Host ControllerInterface);OHCI(Open Host Controller Interface);UHCI(Universal Host Controller Interface)。论文将以嵌入式系统中应用较 多的OHCI 为例,介绍接口规范和驱动程序实现细节。

3 HCD 的实现

USB 主机控制器驱动程序(HCD)是USB 软件协议栈最底层一部分。HCD 向上仅对 USBD 提供服务,HCD 提供一个软件接口,即HCDI(HCD Interface),接受USBD 的调用和 管理。HCD 通过HC 的操作寄存器和通信域来管理HC 和实现USB 数据的传输。HCD 具体 实现如下:

3.1 HCD 数据结构的构建

HCD 主要构建的数据结构有端点描述符ED(Endpoint Descriptor)、传输描述符TD(Transfer Descriptor)。

3.1.1 ED(Endpoint Descriptor)

在OHCI 上,每个ED 对应一个USB 设备端点,不同的设备端点拥有不同的ED。同种 传输类型的ED 组成一链表,OHCI 有三种ED 链表:控制传输数据链表、批量传输数据链 表和周期性数据链表(中断数据传输和等时数据传输同属此类),HC 通过相应的操作寄存 器访问各个链表。每个ED 是4 个32 位数组成的结构。如下表:

 

 

程序中的ED 数据结构定义如下:

struct ed {

U32 hwINFO;//ED 的配置位图

U32 hwTailP;//指向该ED 相关TD 链的最后一个TD

U32 hwHeadP;//指向该ED 相关TD 链的首TD

U32 hwNextED;//指向下个ED

//以下部分只是供HCD 使用

struct ed *ed_prev;//指向前个ED

U8 state;//ED 的状态(ed_new,ed_unlink,ed_oper,ed_del,ed_urb_del)

U8 type;//传输类型(pipe_control,pipe_bulk,pipe_interupt,pipe_iso)

struct ed *ed_rm_list;//指向移除的ED 链

struct usb_device *usb_dev;//对应的USB 设备

void *purb;//指向相应的urb

//以下用于处理周期性链表

U8 int_branch;

U8 int_load;

U8 int_interval;

U16 last_iso;

};

3.1.2 TD(Transfer Descriptor)

TD 是个定长数据结构,HC 通过访问TD 来获取相关的数据传输缓冲区和一些标志信 息等。传输描述符TD 包括两种:通用TD(General TD)和等时TD(Isochronous TD),GTD 用来支持USB 的中断、批量、控制三种数据传输方式,ITD 用来支持USB 等时数据传输。 GTD 是个有4 个32 位数组成的数据区,而ITD 则是有8 个32 位数组成的数据区。由于篇 幅限制程序中的TD 结构就不多叙。

3.2 HCD 与USBD 接口的实现

HCD 向USBD 提供了以下三个接口函数,USBD 通过这些接口函数访问主机控制器。定 义如下:

U32 get_frame_number(struct usb_device*usb_dev);//读取主机控制器帧数目

U32 ohci_submit_urb (struct urb *urb);//提交一个urb 给HCD

U32 ohci_unlink_urb (struct urb *urb)//从HCD 上取消一个已提交的urb

当USBD对来自上层的IRP 请求包处理并建立URB后,通过接口函数ohci_submit_urb( ) 向HCD 传递URB。ohci_submit_urb()先获得或分配相应的ED 并做一些与ED 相关的配置处 理,分配所需数目的TD。然后调用td_submit_urb()处理与TD 相关的操作,最后将由HC 执行相应的传输处理。

3.3 HCD 的数据管理

HCD 的主要功能是完成对HC 的驱动,包括对主机控制器的硬件初始化和控制管理, 并与HC 合作完成USB 各种事务处理。它将各种要传输的数据TD 链入相应的ED 并启动 HC 进行传输,HC 把接收的数据存入相应的TD,HCD 则将这些结果返回给USBD 层,此 外HCD 还完成对HC 的配置和驱动等操作。由于对可重用性考虑和便于对HC 的管理,首 先定义了一个OHCI 的数据结构,通过这个数据结构来对主机控制器和各种传输类型的数据 进行管理。该结构体具体如下:[page]

typedef struct ohci{

struct root_hub rh;//根集线器的结构体

struct ohci_hcca *hcca;//HCCA 结构体

struct ohci_regs *regs;//OHCI 操作寄存器结构体

struct usb_device *dev;//USB 设备

U32 hc_control;//控制寄存器的copy

int ohci_int_load[32]; //32 个中断链使用

ed_t *ed_rm_list[2]; //指向移除的ED 链

ed_t *ed_bulktail; //批量传输ED 的链尾

ed_t *ed_controltail; //控制传输ED 的链尾

U32 status;//HC 工作状态

}ohci_t;

OHCI 规范中定义了4 个链表:控制传输数据链表,批量传输数据链表,完成数据链表 和周期性数据链表,其中除了完成数据链表是一维链表外,其他的链表都是二维链表(如图 2 所示),主要由数据结构TD 和ED 组成。主机控制器硬件通过寄存器访问每个链表来得到相关的USB 数据包,并将其发送到USB 总线上。主机控制器驱动程序则根据实际的数据传 输需要,构建相应的ED 并将要传输的数据转为TD 格式,所有的同类型ED 被连接在一起, 而TD 表述才是最终要在USB 总线上传输的数据包,同时属于同一个USB 设备端点的TD 被链接在一起,并挂在相应的ED 上。

 

 

当主机控制器完成链接在相关链表上的TD 后,会将该TD 从相应的链表上取下,并链 接到完成数据链表上。主机控制器驱动程序则通过对该链表的访问来获得已经传输完成的数 据包。此时HCD 可以将这些返回的数据放入到相应的URB 中,由USBD 向上层传输。

4 试验实例

由USBD 层初始化URB 结构,并通过HCD 的接口函数ohci_submit_urb()传递给HCD 层。通过在S3C2410 实验平台上的实验表明主机控制器驱动程序能够很好的向USBD 层提 供服务并管理HC。

5 结束语

主机控制器是USB 主机系统的硬件核心,主机控制器驱动则是USB 系统软件的最底层实 现。依据在USB 协议底层的主机开发的实践,详细介绍了基于OHCI 的主机控制器的接口规 范,列举了所构建的数据结构以及接口函数,实现了独立于操作系统的HCD。

本文作者创新点:实现了嵌入式系统中OHCI 的主机控制器驱动,对整个USB 协议栈采 用模块化分层设计,开发的HCD 独立于操作系统,适合于无系统的单片USB 主机。

关键字:OHCI  嵌入式  USB主机控制器 引用地址:基于OHCI的嵌入式USB主机控制器接口实现

上一篇:S1D13506显示控制器与AT91RM9200的接口设计
下一篇:S3C44B0X微处理器内置LCD控制器方案设计

推荐阅读最新更新时间:2024-03-16 13:04

开幕在即 : 6万㎡解锁未来6G/AIoT/智车/快充/封装/嵌入式技术
2021年9月27-29日,一场面向中国电子工程师和嵌入式开发者的狂欢嘉年华即将掀起!由博闻创意主办的ELEXCON深圳国际电子展暨嵌入式系统展即将在深圳国际会展中心(宝安新馆)3/5/7号馆盛大举行!60,000 ㎡专业大展,600+全球优质展商,20+技术研讨会,200+重磅专家演讲人,预计将吸引专业观众逾4万,一站式打通智能设计-嵌入式系统-SiP系统级封装-供应链升级-AIoT生态圈! ELEXCON2021紧跟前沿技术热点及应用创新趋势,在今年展会上将有什么亮点?现场哪些活动将“一位难求”?小编在此带您提前看!展会即将开幕,还没领门票的小伙伴,赶紧扫码预登记,入场快人一步~ “万物智联“系列黑科技高能来袭!5G/
[其他]
开幕在即 : 6万㎡解锁未来6G/AIoT/智车/快充/封装/<font color='red'>嵌入式</font>技术
本土化、国际范的瑞萨电子,确实有那么点不一样了
2023年5月19日,瑞萨电子在2023年投资者日上,公布了公司的2030愿景:届时公司总营收将突破200亿美元,并期望成为前三大嵌入式芯片供应商,同时市值要增长至2022年的六倍。这一系列积极目标的背后,是瑞萨对于全球未来市场的乐观预估,包括AI、可持续发展以及电动汽车等市场的需求还将持续火热。 近日,在上海国际嵌入式展期间,瑞萨为中国工程师带来了各种先进的解决方案,比如业界首款基于Arm Cortex M85内核的嵌入式AI MCU产品等。 首款基于Cortex-M85的嵌入式AI MCU 另外值得注意的是,此次大会期间,瑞萨中国各部门主要负责人都来到了现场,并接受媒体的采访。这是瑞萨中国首次在投资者日后统一会见媒
[半导体设计/制造]
本土化、国际范的瑞萨电子,确实有那么点不一样了
嵌入式数字摄像机配置系统设计
0 引 言 本文以BASLER A202k面阵CCD摄像机的配置为目标设计嵌入式摄像机配置系统。BASLER公司提供了2种摄像机配置方案:一是利用该公司提供的摄像机配置软件CCT+(Camera Configuration Tool Plus),二是利用该公司提供的二进制配置命令,由用户编程实现。本文采用二进制配置命令,通过设计的嵌入式系统配置摄像机。该摄像机的二进制配置命令帧格式如下:  起始字 描述字 数据段 BCC 结束字  BCC是块检查字(Block Check Character),需要由用户计算。主要的配置命令及其二进制帧格式如表1所示。  表中02h是起始字;03h是结束字。此外还有测试图像命令
[嵌入式]
格芯和 Microchip 宣布Microchip 28纳米SuperFlash® 嵌入式闪存 解决方案投产
广泛部署的非易失性存储器 (NVM)解决方案针对单片机(MCU)、智能卡和物联网芯片进行了优化 格芯(GlobalFoundries)与Microchip Technology Inc.(美国微芯科技公司)及其旗下子公司Silicon Storage Technology® (SST®)今日宣布,采用 GF 28SLPe 制程的SST ESF3第三代嵌入式SuperFlash技术NVM 解决方案即将投产。 在实施SST广泛部署的ESF3 SuperFlash技术方面,格芯确立了新的行业基准。该实施方案具有以下功能和优势: • 成本最低的28纳米HKMG ESF3解决方案,仅增加了10个掩模,包括真正的5V IO
[嵌入式]
格芯和 Microchip 宣布Microchip 28纳米SuperFlash® <font color='red'>嵌入式</font>闪存  解决方案投产
基于ARM的嵌入式文件系统YAFFS的移植
1引言 目前,嵌入式系统大多采用用JAFFS和YAFFS文件系统,但JAFFS文件系统主要用于NOR FLASH,由于NOR FLASH 内部结构的局限性,只适合于小容量的存储,并且NOR FLASH读写速度慢,不能满足系统实时性的需要,在我的测试过程中,在NAND FLASH上挂载的JFFS2文件系统很不稳定,经常有CRC错误产生。特别是进行写操作的时候,每次复位都会产生CRC错误,可以说支持NAND FLASH的 JFFS2文件系统目前还不成熟。YAFFS(Yet Another Flash File System)类似于JFFS/JFFS2,是专门为 NAND闪存设计的嵌入式文件系统,适用于大容量的存储设备.YAFFS内部
[单片机]
嵌入式-stm32学习:位带操作
// GPIO 位操作 #include stm32f4xx.h // 这里只定义了GPIO ODR和IDR这两个寄存器的位带别名区地址,其他寄存器没有定义 //SRAM 位带区: 0X2000 0000~0X200F 0000 //SRAM 位带别名区: 0X2200 0000~0X23FF FFFF //外设位带区: 0X4000 0000~0X400F FFFF //外设位带别名区: 0X4200 0000~0X43FF FFFF // 把“位带地址+位序号”转换成别名地址的宏 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000
[单片机]
TI推出医疗成像专用嵌入式处理器和模拟器件
日前,德州仪器 (TI) 宣布推出超过 15 款专用嵌入式处理器产品系列,能帮助医生与临床医师获得更快、更准确的诊断结果,同时还可帮助医疗成像设备制造商开发出新型医疗技术,提升现有产品的小型化与便携性。这些处理器主要面向各种医疗成像应用,其中包括超声波、 CT 、正电子发射断层成像 (PET) 、核磁共振 (MRI) 、数字 X 光、光学相干断层扫描 (OCT) 以及其它新近开发的医疗技术。这些处理器协同 TI 全系列通用与专用模拟产品不仅可实现完整的信号链解决方案,而且还可改善全球成百上千万人得到诊治速度与有效性。 更快捷、更准确的医疗服务 嵌入式数字信号处理器是灵活的可编程器件,可通过更新软件与算法实
[单片机]
Atmel新款闪存MCU满足USB嵌入式应用需求
Atmel Corporation日前推出四款带有USB控制器的全新AVR闪存微控制器(Flash MCU)。AT90USB微控制器设计用于满足在主机和功能模式中需要USB连接的嵌入式应用的各种不同要求。 目前正在使用的USB设备数量超过10亿;在占领计算机和外围设备领域之后,USB在消费产品和工业设备领域也正在迅猛发展。数据存储、数据传输、产品配置和固件更新是推动这一趋势的关键应用。AT90USB1286和AT90USB646具有USB口,用于需要与USB主机相连的应用。AT90USB1287和AT90USB647符合USB On-The-Go(OTG)标准,在应用中作为两用设备(Dual Role Device, DRD),
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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