Day 7 USB 咬文嚼字

今天花10分钟,来分析USB(universal serial bus)的名字:通用,串行,总线

1 通用

指物理层和数据链路层上,可以通过USB接口来跑很多种应用层协议

2 串行

底层通讯的关键因素是:

  1. 通信时钟速率
  2. bit同步
  3. 帧同步
  4. 数据线数量
  5. bit层编码协议

根据数据线的数量不同,可以分为串行和并行
串行在一个时钟驱动下,能传输一个bit信号;并行能同时传输多个bit信号

通信速率
并行数据线在跑高速信号时,对环境条件要求比较高,容易因为布线,阻抗,ESD干扰等,导致多条数据线路到达终端的时间不一致,这就是数据时间窗口的问题,从而限制了通信时钟最大的速率

串行总线因为只需要同步采样一路数据线的电信号,就没有了时间窗口的问题,所以串行速率会有几个数量级的提升。同时可以采用差分线来增加抗干扰能力,采用NRZI编码来省掉一个时钟线,更能提高传输速率

bit 同步
底层通讯时,必须考虑bit同步问题,也就是在通讯过程中,怎么区分数据线上的各个bit

  1. SPI,I2C这类,采用增加时钟线的方式来同步,一个时钟跳变沿,就是一个采样同步信号
  2. UART这类,靠时间片的方式来同步,每个时间片都是nUs,时间一到,就读取数据线信号。但这种方式,容易有时间积累效应,导致漂移和误差,从而采样错位。因此UART也会有一个帧同步的机制,来定时复位采样时间电路,从而将误差限制在可控范围内
  3. 红外,1-wire这种单线制信号,是采用脉宽和特定模式,来一起解决bit同步和帧同步问题
  4. USB这种呢,则是将利用数据信号的跳变过程来同步,所以没有单独的时钟线,叫NRZI。但这种机制,本质上还是和UART的时间片方式一样,所以对于一连相同的特定数字信号,仍然会出现漂移,错位的现象,所以USB协议通关强制插入反转序列的方式,来给SIE状态机一个时钟同步信号。这样的效果就是可以显著提高通行速率。
    理论上来说,同步反转信号插入的越多,通讯同步误差就会越小,通讯速率越高,但是会导致有效带宽使用率下降的问题,所以要适当的权衡。
  5. 还有一种,对于射频信号,会采用频率调制,用特定的频率来表示0,1

帧同步

很多同学,可能不知道这个概念,其实,很简单
bit同步用于保证系统能识别一连串的010101,但是我们把这些01分组呢?
帧同步就是干的这事

另一个名字,帧开始,帧结束,可能各位比较熟悉一些,

UART会用数据线第一个下降沿来表示帧传输开始,上升沿表示帧结束
SPI就是默认的8个,16个,32个clock表示一个帧,挨个数就行了
其它通讯总线的方式,也类似

当初USB设计的初衷就是为了高速应用,所以选择了串行,差分,NRZI编码通讯方式

3 总线

USB采用层次化总线拓扑方式,就是多叉树形结构
涉及到总线,就会提及几个关键点

  1. 寻址方式
  2. 应答机制
  3. 通讯协议

时间不够,就不展开了,明天聊

每日推荐

  1. Sparkfun上,关于串行通讯的入门介绍
  2. Northeastern University的数据链路层资料
  3. CSDN博客文章-串行通信比并行通信的速度更高

PS:可能某些资料需要翻墙才能查看,如需帮助,请告诉我

2015-12-13

-----分割线-----
注意事项

  1. 本订阅号(微信搜 McuProgramming )主要发布一些嵌入式相关的知识和技巧,涉及到软件,硬件,射频,协议栈等;如果您有感兴趣的领域,请通过回复订阅号告诉我

  2. 本订阅号主要是简单文字为主,内含少量代码段,但绝不会发布大量的代码。
    因为根据自己的体会,在手机微信端看代码的体验非常糟糕,一方面屏幕比较小,显示效果不好;另一方面,玩手机时,精力不会集中,更不会有大量时间。
    cedar-renjun.github.io 个人博客会发一些技术细节的东西,感兴趣的,可以深入研究这里的博文

  3. 微信的编辑功能比较弱,不能贴链接,代码啥的,,,所有文章均发表在个人博客,可以通过点击原文来查看,原文有代码语法高亮,显示图片,带链接等效果