当前位置: 首页 > news >正文

usb学习有感

1,usb技术成功的几个因素
1.1 易用性优势以及强的可扩展性
1), hotplug & plug and play

2), 提供电源

3),几乎支持各类应用(四种传输类型几乎可满足各类应用要求)
本质上usb技术只是给出了一种近距离有线方式的主从通信手段,usb协议
规定了4种通信类型:control,bulk,interrupt和isochronous, 其中control和
bulk类型为异步传输类型, interrupt和isochronous类型为同步传输类型. 同步
传输适用于对传输的响应时间要求较高的场合,interrupt类型一般数据量小些(
比如usb HID class), isochronous类型一般数据量很大,适合支持av stream 传输(
像usb video class and usb audio class等典型使用场合); 异步传输对传输的响
应时间没有要求,control 类型一般传输数据量小一些,适合实现对设备的控制和状态
查询, bulk 类型传输数据量大,像usb mass storage class.

usb 将四种类型的transfer分为transaction, 每个transfer可对应1个或多个
transaction. 在时间上,usb 基于frame 或者 uframe安排transaction的调度,并在每
个frame或者uframe优先调度同步传输对应的transaction,usb1.1和usb2.0对同步传输
分别可最大使用90%的frame 和 80%的uFrame,以这种机制保证同步传输的响应时间,同步
传输完成后的剩余时间安排给异步传输对应的transaction.

当然,对于每一种具体usb 设备,可以支持多种传输类型,实际上usb device 中的
endpoint具体负责和host的通信,每个endpoint只能属于四种类型的一种,除过默认的
endpoint 0(control in/out)外,其他endpoint的传输方向也要么为in,要么为out.一
般的usb device controller支持endpoint的可配置,但某个时刻只能属于一个类型和
传输方向. 像一些usb ethernet interface和usb uart会组合interrupt endpoint和
bulk endpoint来实现对应的应用.

一般来说,合理组合四种类型的endpoint,可以做出相对应的usb device, usb host
通信软件驱动不需要任何修改,只需要添加对应的function driver就可以支持新的usb
设备.

1.2 成本优势(复杂软件, 简单连接方式以及简单ic实现的策略)
从IC成本角度看一下. 分析controller ic的成本,主要看这个ic
做了哪些事情即可,ic做了什么事情,可以从ic的driver和ic间的接口来看出.

1),先看看host controller ic做了哪些事情:
1.1给出了host 会按照4种传输类型来做schdule(也就是说,host侧的类型体现在
调度方式上),实际上这部分工作都由软件完成,以uhci/ehci为例,软件(hcd)需要在内
存种组织好数据结构,排列好同步传输和异步传输,然后把相应的地址告诉HC,HC就会和
usb device来通信了. transfer会划分为一系列的transaction,transaction包括以
下几种packet:
token(setup/in/out、sof)
data(data0/data1/data2/mdata)
handshake(ack/nak/stall/nyet)
special(PRE/ERR/SPLIT/PING/Reserved)
一般来说,一个transaction是几种类型的packet的组合,比如in token+data0+ack
就对应了一个transaction. hcd调度transaction时候已经通过transaction descriptor
给出了排列.也就是说HC需要根据transaction descriptor生成对应packet以及发送出去,
包括SIE以及真正从phy上发送出去,同时需要从线上译码出接收的packet,并组织成和cpu间
互相认识的格式,同时将数据内容传输给transaction指定的地址(DMA方式). 这几个功能
(packet构造以及串行化, phy功能, dma)应该是hc ic最基本的功能。
其次,hc 需要生成sof帧;
另外,hc ic需要支持root hub和port相关功能。

2),device controller ic
同样,也需要packet 构造以及串行化,phy功能。

从以上来看,hcd软件做了相当多的事情,hc实现的功能可以较少(uhci spec说大概10000
gates左右可以实现uhci),成本也就低了.

1.3 开发优势
1), 与ethernet的相似之处基于广播技术
通过抓包软件可以监控总线的数据包通信情况,这样易于开发和调试.

2),4线连接
硬件连接简单,硬件调试非常简单.

3),一些通用实现规范的提出
ohci/uhci/ehci统一的接口定义,利于usb hcd的重用. 当然,也有一些专有接口的
嵌入式hc的推出.

2,一些实现中问题(侧重host 实现)

2.1 hcd和hc间的接口比较复杂
如果使用标准的实现(ohci/uhci/ehci),那么还有现成linux driver可供使用.
如果是其他的实现,那么这个层面的接口定义需要较深的功底才可以定义的很好.

2.2 usb host性能
.中断频率的控制
许多专有的实现以transaction完成来中断cpu,会导致中断非常频繁,对系统性能影响较大;
(尤其是支持usb2.0,问题会更严重)
ehci/uhci中支持以transfer结束来中断cpu,会降低中断频率.

.智能的DMA controller
ehci/uhci肯定实现了一个智能的DMA,将usb packet的构造发送/接收和dma传输结合起来.

相关文章:

  • LoadImage()的使用
  • linux下删除.svn命令
  • 嵌入式开发资料集锦
  • Cassandra的事务支持及数据一致性解决方案
  • 表变量和临时表
  • 常见排序算法时间复杂度
  • 老子《道德经》第二十五章
  • SVN
  • sql自定义函数及C#中调用
  • json-lib codehuas copyright
  • 周记 2015.1.17
  • UGUI自适应
  • read 系统调用剖析
  • Android系统之Broadcom GPS 移植
  • 寒假汇编语言作业(4)
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【Linux系统编程】快速查找errno错误码信息
  • gf框架之分页模块(五) - 自定义分页
  • HashMap剖析之内部结构
  • JS字符串转数字方法总结
  • mysql innodb 索引使用指南
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • vagrant 添加本地 box 安装 laravel homestead
  • windows-nginx-https-本地配置
  • 分布式事物理论与实践
  • 七牛云假注销小指南
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 小程序01:wepy框架整合iview webapp UI
  • 小试R空间处理新库sf
  • 一份游戏开发学习路线
  • 再次简单明了总结flex布局,一看就懂...
  • #数学建模# 线性规划问题的Matlab求解
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (06)金属布线——为半导体注入生命的连接
  • (2022 CVPR) Unbiased Teacher v2
  • (C语言)二分查找 超详细
  • (LeetCode) T14. Longest Common Prefix
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (pytorch进阶之路)扩散概率模型
  • (第61天)多租户架构(CDB/PDB)
  • (独孤九剑)--文件系统
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (蓝桥杯每日一题)love
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转) ns2/nam与nam实现相关的文件
  • . NET自动找可写目录
  • ./configure,make,make install的作用(转)
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Apio2012]dispatching 左偏树
  • [C/C++]数据结构 栈和队列()