没有合适的资源?快使用搜索试试~ 我知道了~
详细介绍了USB驱动的开发,是一篇不错的文章.
资源推荐
资源详情
资源评论
1、USB 设备
物理特征:4 条电缆,电源线、地线、数据线、脉冲线;
速 度:低速 1.5Mbps,全速 12Mbps,高速 480Mbps;
规范版本:1998 年 USB1.1,2000 年 USB2.0;
连 接:PCI 总线<->USB 控制器(OHCI/UHCI/EHCI)<->USB 设备;
单个 USB 控制器最大连接个数:127;
距离限制:USB 单条线缆长度不能超过 5m,通过 hub 可延长至 30m。
重要概念:主机-USB 设备采用 master-slave 方式分工,所有通信都是主机发起的;在某一
时刻,只有一个设备与主机通信。
一个 USB 物理设备可以抽象为一个或多个逻辑设备。
USB 逻辑设备层次:逻辑设备 ->配置(configuration)->接口(interface)->端点(end
point);
端点是一个地址标识,是驱动和设备数据交换的一个终点,类似于网络编程中的客户短套
接字或者服务器端套接字。在 USBD client 和特定的设备 endpoint 之间的通道被称作管道
(pipe),一个从驱动到设备的数据传输管道包括以下几个要素:
1)设备的端点(通过读取/设置配置、接口得到);
2)设备号(设备动态插入后由 USBD 分配);
3)传输方向(从设备到主机、或从主机到设备);
4)带宽要求;
5)延迟要求。
6)主机与 USB 间有 4 种传输方式:
A.控制(小批量数据、保证到达);
B.同步(大批量数据、定时传输、不能保证到达);
C.批量(大批量数据、保证到达);
D.中断(小批量数据、不定时产生、保证到达);
控制用于读取/设置 USB 设备,所有 USB 设备的端口 0 默认(或者说强制)给控制管
道使用;
同步主要用于视频设备如摄像头定时产生的批量数据,允许在带宽不足的情况下丢弃
部分数据包;
批量用于一次性的大批量数据传输;
中断用于异步数据如键盘(或鼠标)按下事件发生等。
系统为不同传输类型分配不同的可使用带宽。因此,控制管道必须占有 10%的可用带宽,
而批量管道不能达到 USB 的理想速率,实际中 USB 设备与主机的传输速率比理想速率低
很多。
2、VxWorsk 下 USB 协议栈
下图提供了一个 USB 主驱动栈结构的简单概括,共四层。
数据发送路线及格式:客户驱动(USB_IRP 包)->USBD(URB 包)->HCD(HRB 包)。
>>>>在栈最底层的是硬件:USB 主控制器(USB host controller),USB 主控制器在嵌入式主
机系统中控制 USB,实现 USB 主机功能。目前,USB 控制器主要有 3 类:
(1)(UHCI,universal host controller interface)通用的主控制器,由 Intel 最先设计并制定相应
规范;
(2)(OHCI,open host controller interface)开放的主控制器,由 Microsoft,Compaq 和 National
Semicondtlctor 最先设计并制定相应规范;
(3)(EHCI,enhanced host controller interface)增强的主控制器,该控制器支持 USB2.0.
>>>>每一主控制器在其上都有相对应的主控制器驱动程序(HCD),这些设备驱动程序与底
层的硬件相关,为上层提供统一的功能接口。相应的驱动分别在 usbHcdOhciLib.c 和
usbHcdUhciLib.c 中定义。
USB 主机驱动(USBD)与底层硬件无关,通过 HCD 与底层控制器通信。USBD 管理连接到
主机上的每一个 USB 连接,并提供高层与 USB 设备通信的通道。除此之外,USBD 还自
动对 USB 设备进行电源管理和分配带宽。在 USB 系统中,集线器(HUB)对 USB 系统的正
常操作起到关键性作用,因此 USBD 直接对集线器进行控制。这就意味着 USBD 还具有控
制 USB 设备和集线器动态插拔的能力。(USBD)是客户驱动和 HCD 之间的中介,接受客
户 发 送 来 命 令 , 发 送 给 HCD , HCD 在 驱 动 硬 件 接 受 。 USBD 入 口 函 数
usbdCoreEntry(pURB_HEADER pUrb) , 所 有 请 求 函 数 都 先 进 入 此 函 数 , 根 据 pUrb-
>function 的值调用相应函数。
在协议栈的最顶层是 USB 设备驱动程序。设备驱动程序依赖 USBD 提供的通信通道,驱动
连接到 USB 系统中的 USB 设备。
下图 2 显示了 USB 主驱动栈的各模块之间的功能联系。
通过图 1/2 的结构,可以看出 USB 主机栈的设计关键是 USB 主机驱动(USBD)的设计,
USBD 为 USB 设备驱动程序提供标准的 USBD API;为主机控制器驱动提供 HCDAPI。
一个用户设置 interface 例子(仅仅说明在执行一个操作的过程中 Stack 的数据流):
A:usbdInterfaceSet() 生成 URB_INTERFACE_GET_SET 结构的变量 Urb,结构中第一个
变量是 URB_HEADER;
B:调用 urbExecBlock(&Urb.header) USB 消息队列;
C:调用 usbdCoreEntry(pUrb) 进行消息派发;
D 由 于 pUrb->function=USBD_FNC_INTERFACE_SET , 调 用 fncInterfaceSet(pUrb)-
>(USBD);
E:调用 controlRequest()->(USBD)生成 USB_IRP,USB_SETUP 包;
F:调用 usbdTransfer()->(USBD)生成 URB_TRANSFER 结构的变量 Urb;
G:调用 urbExecBlock(&Urb.header)->usbdCoreEntry(pUrb);
H : 由 于 pUrb->function=USBD_FNC_TRANSFER , 调 用 fncTransfer()->(USBD) 生 成
USB_IRP 包;
剩余14页未读,继续阅读
资源评论
- zhaolianyun2017-12-04网上拷贝的内容,不建议下载,没有什么太大意义。
夏天的味道ing
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- TestBank.java
- js-leetcode题解之146-lru-cache.js
- js-leetcode题解之145-binary-tree-postorder-traversal.js
- js-leetcode题解之144-binary-tree-preorder-traversal.js
- js-leetcode题解之143-reorder-list.js
- js-leetcode题解之142-linked-list-cycle-ii.js
- js-leetcode题解之141-linked-list-cycle.js
- js-leetcode题解之140-word-break-ii.js
- js-leetcode题解之139-word-break.js
- js-leetcode题解之138-copy-list-with-random-pointer.js
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功