1.前言
我们从物理层到信号层,到协议层,他们分别在不同的层面完成不同的功能。
总结一下:
物理层实现了高低电平的检测。
信号层更进一步,通过一些方法,实现了二进制的传输。
协议层,因为可以二进制传输了,就自然可以实现一些协议方面的事情了。
但是我们会发现,信号层可能会发生异常,比如干扰导致信号错误,我们通过技术手段可以检测出来,但是应该怎么处理呢?
协议层也会出现异常,比如我数据包发过去了,对方没有空接收等等,那又应该怎么处理呢?
PID和CRC校验异常
在信号传输层,也只能出现这两种错误,协议规定怎么处理呢?
PID错误:静默丢弃,依赖超时重传;
CRC错误:按传输类型选择重传或丢弃;
说人话就是,接收端发现错误,直接忽视即可!
协议层异常
协议层的异常,一部分是因为信号传输层的数据错误忽视掉引起的,一部分是设备端的状态引起的,
比如上面讲的PID和CRC校验错误,主机发送给设备,主机发现发送了没反应,大概率是传输出问题了,我等等看,重发一下,重复几次发现还是不行,可能你的U盘就提示传输错误了。
如果设备发送给主机握手包发生校验错误,主机直接忽略,当做没有。
总结一下:我们在协议层的角度来看,我们发出去的数据是有可能丢失的,我们接收到的数据也有一些是垃圾数据,主机的策略是,只要我发出的数据没有有效回复,我就重新发送,错误的东西直接忽略(当然和各种传输方式有关系,就看有没有握手包了)
站在设备端的角度来看更简单了,收到有效数据我回复,没有效扔到。
这个逻辑就非常简单了,主机完全占据主动,设备配合就好了,跟着主机的节奏来。