数据面
嵌入式系统中的设备种类繁多,从简单的传感器到复杂的网络控制器,每种设备都有其特定的通信方式。理解设备的物理链路是驱动开发和系统调试的基础,设备如何与 CPU 交换数据、如何触发中断、如何被操作系统管理,这些问题都归结到物理链路的设计。
物理层三层模型
在底层硬件开发中,我们将物理层进一步细分为协议层、电气层和介质层,以实现软硬件解耦。
协议层 (Protocol Layer)
物理层中最靠上的逻辑部分,负责比特流(Bitstream)的组织。不同的总线协议使用不同的组织方式,并且在研究不同的总线协议的时候,内部还会区分更多的逻辑分层。还有不使用总线协议的设备,在 linux 系统中统一划到平台设备总线上处理。
功能:
编码转换:如 8b/10b (PCIe Gen1/2), 128b/130b (PCIe Gen3+)。
数据处理:加扰(Scrambling)、成帧(Framing)、CRC 校验。
实例:PCIe 协议在此定义 Gen3/Gen4 等版本。无论物理接口是 M.2 还是 PCIe x16,其协议层逻辑是一致的。
电气层 (Electrical Layer)
关注信号的物理模拟特性,将上层的比特流转化成物理介质能够传播的形式。
功能:
信号类型:差分信号(Differential Signaling)、单端信号。
物理指标:电压摆幅、频率(如 PCIe 的 100MHz 参考时钟)、时钟恢复 (CDR)。
对比:PCIe 与 M.2 在电气层高度通用;而以太网(RJ45)则完全不同,需经过 PAM4/PAM16 调制,电压标准不兼容。
介质层 (Medium/Connector Layer)
即“介质依赖子层 (PMD)”,决定了接口的物理长相。主要包括线缆的材质和插头的形状。
常见实例:
PCIe 金手指:机箱内大功率、多通道接口。
M.2 (NGFF):紧凑空间设计,引脚密,走 PCIe 协议。
RJ45:带变压器隔离,专为长距离铜缆设计。
USB: type A/B/C
平台设备通信
平台设备是那些无法通过标准总线协议自动发现的设备,它们通常通过内存映射 I/O (MMIO) 或 GPIO 与 CPU 通信。平台设备的通信链路直接、简单,但缺乏标准化。
总线设备通信
总线设备通过标准总线协议与 CPU 通信,如 I2C、SPI、PCIe、USB 等。总线设备的通信链路复杂、层次分明,但具有标准化的接口。
平台设备与总线设备的区别
从内核管理的角度看,平台设备和总线设备有本质区别。平台设备在系统启动时通过设备树或 ACPI 静态注册,总线设备通过总线枚举动态发现。平台设备直接挂载在平台总线上,总线设备挂载在各自的总线类型上。
从通信方式看,平台设备使用 MMIO 或 GPIO 直接通信,总线设备通过总线控制器间接通信。平台设备的地址空间固定,总线设备通过总线地址寻址。平台设备不支持热插拔,总线设备通常支持热插拔。
从驱动开发看,平台设备驱动需要知道设备的寄存器布局和配置细节,总线设备驱动可以使用通用的总线接口。平台设备驱动通常由芯片厂商或板卡厂商提供,总线设备驱动可以跨平台使用。
从性能角度看,平台设备的通信延迟通常低于总线设备,因为没有总线协议的开销。但总线设备的带宽和扩展性更好,适合高速数据传输和多设备场景。
在实际系统中,总线控制器本身就是平台设备。SPI 控制器通过 MMIO 配置,但它管理的 SPI 设备通过 SPI 总线通信。这种分层架构既保证了平台的灵活性,又保持了总线的标准化。