uboot之OHCI (一)

本文介绍了USB Open Host Controller Interface (OHCI) 的驱动框架,包括USB设备驱动、主机控制器驱动与硬件控制器的关系。重点阐述了OHCI的数据结构,如TD(传输描述符)和ED(端点描述符),以及主机控制器的管理、带宽分配和列表管理等职责。此外,还详细描述了ED和TD中的关键字段及其作用。

       AT91SAM9260

       U-BOOT

       OHCI

目录:

一.OHCI驱动框架

二.OHCI的数据结构

三.HCD的初始化

四.OHCI的相关代码

 

The purpose of OpenHCI(Open Host Controller Interface)  is to accelerate the acceptance of USB in the marketplace by promoting the use of a common industry software/hareware interface.

 

一.            OHCI驱动框架

下图说明了USB device driverhost controller driver 与硬件host controller,

usb device 之间的关系

 

<think>好的,用户让我介绍下分析U-Boot USB驱动代码的内容。首先,我需要确定用户的需求是什么。他可能是在进行嵌入式系统开发,需要了解U-Boot中的USB驱动部分,以便进行定制或调试。或者他可能是在学习Bootloader的相关知识,想要深入理解USB驱动的实现机制。 接下来,我应该考虑用户的背景。如果他是嵌入式开发者,可能已经具备定的U-Boot和驱动开发基础,需要更深入的代码分析。如果是学生或刚入门的开发者,可能需要先介绍U-Boot的整体结构,再逐步深入到USB驱动的部分。 用户的问题比较广泛,可能需要个结构化的回答。我应该先介绍U-Boot的整体架构,说明USB驱动在其中的位置,然后分模块详细讲解各个部分,比如控制器驱动、协议栈、设备枚举等。此外,还需要提到分析代码的方法,比如代码位置、配置选项、关键函数和数据结构,以及调试技巧。 需要注意U-Boot的版本差异,不同版本的代码结构可能有所不同,因此要提醒用户注意自己使用的版本。另外,USB协议本身较为复杂,可能需要简要说明相关概念,帮助用户理解代码的逻辑。 还要考虑用户在实际操作中可能遇到的问题,比如如何配置USB驱动,如何调试,常见问题排查等,这些内容可以增强回答的实用性。最后,提供些参考资料或建议,比如查看官方文档、使用调试工具等,帮助用户进步研究。 总结下来,回答的结构应该是:U-Boot概述,USB驱动架构,代码分析步骤,关键代码讲解,调试方法,以及总结建议。这样既全面又有条理,能够满足不同层次用户的需求。</think>好的,我将从U-Boot整体架构和USB驱动实现的角度进行分步说明。分析U-Boot USB驱动代码需要关注以下几个关键层面: #### 、U-Boot整体架构概述 1. **启动流程**:U-Boot的USB驱动初始化发生在`board_init`阶段,通过`initr_usb`函数触发 2. **驱动模型**:采用类似Linux的`device-driver-model`架构,关键数据结构: ```c struct usb_device; // 描述USB设备 struct usb_driver; // 驱动注册结构体 struct usb_interface; // 接口描述 ``` #### 二、USB驱动架构 U-Boot的USB子系统分为三层: ``` Application Layer (e.g. usb storage) ↓ USB Protocol Layer (Mass Storage/HID/etc) ↓ USB Controller Driver (EHCI/OHCI/xHCI) ``` #### 三、代码分析步骤 1. **定位代码位置**: - 控制器驱动:`drivers/usb/host/`(ehci.c, ohci.c等) - 协议层:`drivers/usb/storage/`, `drivers/usb/emul/` - 核心框架:`common/usb.c`, `include/usb.h` 2. **关键配置选项**: ```makefile CONFIG_USB=y CONFIG_USB_EHCI_HCD=y # 启用EHCI控制器 CONFIG_USB_STORAGE=y # 启用大容量存储设备支持 ``` 3. **初始化流程分析**: ```c usb_init() → usb_lowlevel_init() → controller_init() ↓ usb_scan_devices() → usb_get_descriptor()设备枚举 ``` #### 四、关键代码解析(以EHCI为例) 1. **控制器操作结构体**: ```c struct ehci_ops { int (*init)(struct ehci_hccr *hccr, struct ehci_hcor *hcor); int (*reset)(struct ehci_ctrl *ctrl); int (*port_reset)(struct ehci_ctrl *ctrl, int port); }; ``` 2. **传输描述符构建**: ```c // 构建QTD(Queue Element Transfer Descriptor) ehci_submit_async(struct ehci_ctrl *ctrl, struct usb_device *dev, unsigned long pipe, void *buffer, int length) ``` 3. **设备枚举关键路径**: ```c usb_setup_device() → usb_get_configuration() → usb_set_configuration() → usb_find_interface_driver() ``` #### 五、调试技巧 1. **开启调试输出**: ```c #define DEBUG // 或通过环境变量 setenv usb_debug 1 ``` 2. **关键调试宏**: ```c USB_PRINTF(...) // 输出USB协议交互信息 EHCI_DUMP_REGS() // 寄存器状态打印 ``` 3. **常见问题定位**: - 设备无法识别:检查描述符解析代码(`usb_get_descriptor`) - 传输超时:检查TD处理状态(`qh->overlay.status`) - DMA错误:验证物理地址映射(`virt_to_phys()`) #### 六、与Linux驱动对比 | 特性 | U-Boot实现 | Linux实现 | |---------------------|---------------------|-------------------------| | 中断处理 | 轮询方式 | 中断驱动 | | DMA支持 | 有限支持 | 完整DMA映射机制 | | 电源管理 | 无 | 完整PM框架 | | 设备树支持 | 基础支持 | 完整OF解析 | #### 七、演进趋势 1. **向Linux驱动靠拢**:最新版本开始引入类似`usb_core.c`的统核心层 2. **USB 3.0支持**:逐步增加xHCI控制器驱动(`drivers/usb/host/xhci.c`) 3. **USB PD协议**:新增`drivers/usb/pd/`目录支持供电协议 建议分析时结合具体硬件平台(如i.MX6的USB IP核),通过`git grep`命令追踪控制器的寄存器操作流程,同时配合USB协议分析工具(如Bus Hound)进行行为验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值