把 I2C 拆到「一根线什么时候是 0、什么时候是释放」这一层来写,你才会真正理解 ACK 是怎么来的、总线为什么会卡死、以及为什么 9 个时钟就能把从设备从死锁里救出来。本文用一个带从设备状态机的虚拟开漏总线做实测,不依赖任何硬件。
CAN 的可靠性不是「协议写得稳」,而是硬性地做在了比特层:每个位都靠差分电平和 5 位填充防止失步,15 位 CRC 保证检错,ID 越小优先级越高的仲裁让高优先级帧几乎不排队,错误计数到 128 / 256 就自动降级甚至下线,坏节点没法拖垮总线。本文把这一切用纯软件实现并实测。