3、USB协议学习:USB的NRZI信号格式

目录

🍅点击这里查看所有博文

  随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。

  想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。

  很多时候我们遇到了问题,一般情况下都是选择在搜索引擎检索相关内容,这样来的也更快一点,除非真的找不到才会去选择翻书。后来就想到了写博客,博客作为自己的一个笔记平台倒是挺合适的。随时可以查阅,不用随身携带。

  同时由于写博客是对外的,既然是对外的就不能随便写,任何人都可以看到。经验对于我来说那就只是经验而已,公布出来说不一定我的一些经验可以帮助到其他的人。遇到和我相同问题时可以少走一些弯路。

  既然决定了要写博客,那就只能认真去写。不管写的好不好,尽力就行。千里之行始于足下,一步一个脚印,慢慢来 ,写的多了慢慢也会变好的。权当是记录自己的成长的一个过程,等到以后再往回看时,就会发现自己以前原来这么菜😂。

  本系列博客所述资料均来自互联网,并不是本人原创(只有博客是自己写的)。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,没有为自己谋取私利的想法。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。

  在USB总线上,通过D+和D-两个数据信号线来传输,而并没有像I2C总线那样会有一根SCL时钟线来同步,那么USB总线是如何来进行同步两端信号传输呢?此时我们得来了解一些编码方式,以便处理因USB线缆所产生的信号延迟及误差等问题。

方法/步骤

1、RZ 编码(Return-to-zero Code),也叫归零编码。

  在该编码试工中,正电平代表逻辑1,负电平代码逻辑0,并且每次传输完一位数据,信号都会回到零电平。这样,在信号线上会产生3种电平:正电平、负电平、零电平,相应的信号图例如下:

输入图片说明

  从上图中可看出,每们数据传输中都有一个归零的过程,这样接收端只需要在归零后进行新的采样,这样就不需要单独的时钟信号,这实际上相当于把时钟信号用归零处理在传输的数据中,这种信号叫自同步(self-clocking)信号。

  这虽然节省了信号线,不过还是有它固有的缺点,由于RZ编码信号中有大部分数据带宽被用于传输“归零”信号而浪费掉了。除了省去这个步骤,NRZ编码就产生了,相对于RZ编码,NRZ编码就是不需要“归零”。

2、NRZ 编码(Non-return-to-zero Code),也叫不归零编码。

  下图是NRZ编码的信号图例:

输入图片说明

  从上图可以看到,每一位信号都不需要“归零”了,被浪费的带宽收回了,但又失去了应有的自同步特性,让我们感觉又回到了起点,那么先继续了解NRZI编码吧。

3、NRZI 编码(Non-Return-to-Zero Inverted Code),也叫反向不归零编码。

  NRZI编码与NRZ编码的区别就是NRZI用翻转来表示一个逻辑,而信号保持不变来表示另一个逻辑。而在USB传输的编码中采用的是NRZI格式,电平翻转代表逻辑0,电平不变代表1。

  下图是NRZI与NRZ的对比图例:

输入图片说明

  对于翻转信号,可以将其当作一种通知机制,当把NRZI的波形完全翻转后,其所表示的数据序列仍然是一样的,对于使用差分信号线来传输的USB尤为方便。

  从上面的了解,NRZ和NRZI都失去了自同步特性,不过还是可以通过一些技巧来处理。

  在USB中,每个数据包的最开始处都有一个同步域(SYNC),其值为00000001,在经过NRZI编码后,就是一串方波,接收方可能过这个同步头来计算发送方的频率,以便用这个频率来继续采样数据信号。

  由于USB所采用的NRZI编码中,每当逻辑0时就会进行电平翻转,那么接收方可通过这个不断翻转的信号来调整同步的频率,保证数据的正确传输。但这仍然存在问题,一旦电平长时间保持不变时,我们无法知道到时发送的是100个逻辑1,还是1000个逻辑1,即使传输的是100个逻辑1,但接收方与发送方的频率相差了100分之1,那么也还是存在可能把数据采集成为99或者101。而USB中采用了Bit-Stuffing位填充处理,即在连续发送6个1后面会插入1个0,强制使发送信号进行翻转,从而让接收方调整频率,同步接收。而接收方在接收时只要接收到连续的6个1后,直接将后面的0删除即可恢复数据的原貌。

  下图是原始数据、位填充数据、NRZI编码数据的一个图例:

输入图片说明

  而接收方只需要将上面接受到的NRZI编码数据进行译码,再进行位反填充即可还原为原始数据了。

  此种编码方式除了在USB上使用,还有在CD光盘以及使用光纤传输的100BASE-FX(Fast Ethernet)等产品、领域。

  那么本篇博客就到此结束了,这里只是记录了一些我个人的学习笔记,其中存在大量我自己的理解。文中所述不一定是完全正确的,可能有的地方我自己也理解错了。如果有些错的地方,欢迎大家批评指正。如有问题直接在对应的博客评论区指出即可,不需要私聊我。我们交流的内容留下来也有助于其他人查看,说不一定也有其他人遇到了同样的问题呢😂。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇雪长安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值