有大量的线路编码方案可以处理不同的特殊情况。我只说最简单的。
根本上,不要像软件一样考虑它:“我们会不断检查它以查看它是否发生变化”。电子设备更像是一个弹簧,当发生事件(例如电压超过特定水平)时会脱钩。或者把东西从桌子上推下来:它不会“不断检查”它下面是否有东西:有一种力阻止它向下移动。当力被移除时,它会下降。
常用的最简单的线路编码是 NRZ(“不归零”,这个名称在您已经理解之前没有多大帮助。)它用于 RS-232 和许多其他东西。线路处于某个电压,例如 5V。当它低于 1V 时,我们启动一个计时器。假设这些位将是每秒一个:我们启动一个半秒的计时器——我们应该位于 here-comes-a-byte “起始位”的中间。半秒后,我们再等一秒:现在我们处于第一位:我们只是检查电压。再等一会儿,检查电压,我们有第二位。这样做八次,直到我们有一个字节。
您将看到该流程由三种机制构成:
- 等待事件发生(电压低于某个值)
- 等待固定的时间(一半或整个位时间)
- 在给定时刻对线进行采样
该过程通常发生在硬件中,但有时发生在固件中。所有细节都不同:电压、速度、高电压是 1 还是 0、第一位是低值位还是高值位。有关更多信息,请参阅维基百科。
确实,其中的第一个(等到信号变低)可以通过处理器高速采样来完成。但更常见的是由在事件发生后执行操作的电路来完成,可能是通过将信号馈送到锁存器中,该锁存器将某个定时器芯片保持在复位状态。
一旦我们有了字节,就会有一些获得成帧的方案,其中最简单的是 SLIP(串行线路协议),本质上,特定的字节值表示帧的开始。没有什么比阅读定义互联网的真正 RFC 更合适的了,而定义互联网的RFC1055尤其简单。
还有很多其他的成帧方案,例如“长时间无信号”(用于 DMX)或“根本没有电压意味着不在框架内”(用于同轴以太网)。
以太网类似于所描述的机制,但要复杂得多。尤其是更快的种类,它们要复杂得多。目前使用最简单的是 10baseT,它使用“曼彻斯特编码”(以开发它的大学命名)。基本思想是一样的:等待特定类型的转换,然后等待一段时间,取样,重复。但每个细节都不一样。 维基百科有一篇很好的文章。
正如评论中所说,关于编码主题的整本书:整个博士。
高性能成帧和编码方案都是关于
- 错误 ——当噪声或其他问题意味着接收到的信号与预期不符时会发生什么
- 带宽——如何在信道中获得最多的比特
- 钱——如何用最便宜的材料做到这一点
- 可靠性——如何使用不会损坏的部件
说真的:如果您了解 RS-232、NRZ、SLIP,并且正确的联网要复杂得多,那么您对联网人员的了解就足够了。了解哪种网络具有链接检测功能比了解它们如何工作的细节重要得多。
如果您想了解有关电路如何工作的更多详细信息,electronics.stackexchange.com 可能比这里更好,但我们擅长处理帧和 CRC 错误等类似问题。