今天花10分钟,来分析USB(universal serial bus)的名字:通用,串行,总线
1 通用
指物理层和数据链路层上,可以通过USB接口来跑很多种应用层协议
2 串行
底层通讯的关键因素是:
- 通信时钟速率
- bit同步
- 帧同步
- 数据线数量
- bit层编码协议
根据数据线的数量不同,可以分为串行和并行
串行在一个时钟驱动下,能传输一个bit信号;并行能同时传输多个bit信号
通信速率
并行数据线在跑高速信号时,对环境条件要求比较高,容易因为布线,阻抗,ESD干扰等,导致多条数据线路到达终端的时间不一致,这就是数据时间窗口的问题,从而限制了通信时钟最大的速率
串行总线因为只需要同步采样一路数据线的电信号,就没有了时间窗口的问题,所以串行速率会有几个数量级的提升。同时可以采用差分线来增加抗干扰能力,采用NRZI编码来省掉一个时钟线,更能提高传输速率
bit 同步
底层通讯时,必须考虑bit同步问题,也就是在通讯过程中,怎么区分数据线上的各个bit
- SPI,I2C这类,采用增加时钟线的方式来同步,一个时钟跳变沿,就是一个采样同步信号
- UART这类,靠时间片的方式来同步,每个时间片都是nUs,时间一到,就读取数据线信号。但这种方式,容易有时间积累效应,导致漂移和误差,从而采样错位。因此UART也会有一个帧同步的机制,来定时复位采样时间电路,从而将误差限制在可控范围内
- 红外,1-wire这种单线制信号,是采用脉宽和特定模式,来一起解决bit同步和帧同步问题
- USB这种呢,则是将利用数据信号的跳变过程来同步,所以没有单独的时钟线,叫NRZI。但这种机制,本质上还是和UART的时间片方式一样,所以对于一连相同的特定数字信号,仍然会出现漂移,错位的现象,所以USB协议通关强制插入反转序列的方式,来给SIE状态机一个时钟同步信号。这样的效果就是可以显著提高通行速率。
理论上来说,同步反转信号插入的越多,通讯同步误差就会越小,通讯速率越高,但是会导致有效带宽使用率下降的问题,所以要适当的权衡。 - 还有一种,对于射频信号,会采用频率调制,用特定的频率来表示0,1
帧同步
很多同学,可能不知道这个概念,其实,很简单
bit同步用于保证系统能识别一连串的010101,但是我们把这些01分组呢?
帧同步就是干的这事
另一个名字,帧开始,帧结束,可能各位比较熟悉一些,
UART会用数据线第一个下降沿来表示帧传输开始,上升沿表示帧结束
SPI就是默认的8个,16个,32个clock表示一个帧,挨个数就行了
其它通讯总线的方式,也类似
当初USB设计的初衷就是为了高速应用,所以选择了串行,差分,NRZI编码通讯方式
3 总线
USB采用层次化总线拓扑方式,就是多叉树形结构
涉及到总线,就会提及几个关键点
- 寻址方式
- 应答机制
- 通讯协议
时间不够,就不展开了,明天聊
每日推荐
- Sparkfun上,关于串行通讯的入门介绍
- Northeastern University的数据链路层资料
- CSDN博客文章-串行通信比并行通信的速度更高
PS:可能某些资料需要翻墙才能查看,如需帮助,请告诉我
2015-12-13
-----分割线-----
注意事项
本订阅号(微信搜 McuProgramming )主要发布一些嵌入式相关的知识和技巧,涉及到软件,硬件,射频,协议栈等;如果您有感兴趣的领域,请通过回复订阅号告诉我
本订阅号主要是简单文字为主,内含少量代码段,但绝不会发布大量的代码。
因为根据自己的体会,在手机微信端看代码的体验非常糟糕,一方面屏幕比较小,显示效果不好;另一方面,玩手机时,精力不会集中,更不会有大量时间。
cedar-renjun.github.io 个人博客会发一些技术细节的东西,感兴趣的,可以深入研究这里的博文微信的编辑功能比较弱,不能贴链接,代码啥的,,,所有文章均发表在个人博客,可以通过点击原文来查看,原文有代码语法高亮,显示图片,带链接等效果