应对嵌入式系统设计中的接口不兼容性
自上世纪 60 年代初 IBM 推出具备 8 位 ASCII 代码存储的计算机,以及 Gordon Bell 设计出可让 PDP 系列计算机在 MCU 和外设之间传输数据的通用异步收发器 (UART) 以来,数字通信协议的数量就在不断增长。UART 的主要特点是简单易用,标准通用,使用寿命长,而且通过编程选项可以提供多通道的灵活性。UART 通过内置的故障检查机制来管理通信通道,而且通过 FIFO 在发送/接收前后对数据进行缓冲, 从而减轻 MCU的工作负载。 随后,出现了被认为与 UART 具有兄弟关系的 I2C 和 SPI 标准,二者自 1980 年以来都很受青睐。都便于进行设计和故障调试、测试非常迅速、因为信号线较少,因而占用的 PCB 面积也较小。不过由于二者在功能和实施方案方面比较相似,所以在用于特定应用时,工程师们常常不知道如何在这两种通用且高效的接口中做出选择。 以下,我们就不同应用要求给出一些可资借鉴的小窍门: - SPI 与 I2C 不一样,不限于 8 位接口,因此能发送具有任意内容和用途的各类消息。相对于 I2C 而言,SPI 还能支持较高的数据传输速率,而这主要归功于其双工功能。
- SPI 接口不需要上拉电阻,因而可降低功耗。
- I2C 的线路较少,更加简单,因此桥接到 IC 所需的引脚较少。而与此形成对比的是,SPI 需要 4 条线。
- I2C 不需要片选信号线来进行从机确认,具有支持带内寻址的优势。利用 SPI,主机可不用向任何一方发送数据且无需确认。
系统管理总线 (SMBus) 和电源管理总线 (PMBus) 是上世纪 90 年代中期开发的 I2C总线的两种常见衍生标准。二者的数据传输速率、超时和最小时钟速度、电压电平、上拉电阻值和电流大小等都不尽相同。SMBus 为系统和电源管理相关任务提供了控制总线。采用 SMBus 的系统在器件间发送消息,而非断开单条控制线路;而 PMBus 器件则必须使用实施于业界标准 SMBus 串行接口之上的 SMBus Version 1.1。PMBus 协议有助于符合标准的功率转换产品的编程、控制和实时监控。
接下来出现的就是我们都颇为熟悉的通用串行总线 (USB) 标准了,自 1995 年以来该标准就取代陈旧的 RS-232 接口而不断受到设计工程师的青睐。这是一种简单而精致的通信技术,能实现多达 126 个互联设备的通信,其采用的协议定义完善,可确保通过统一的标准化接口插槽连接多个外设。此外,它还通过热拔插支持即插即用功能。USB 为四线电缆接口,无需另外的电源线(USB 电缆本身即可供电)。
设计挑战
几乎任何嵌入式系统(如医疗设备、电信设备、销售点系统及其他不同种类应用)的设计都会采用上述各种接口中的一种或多种。此外,每种接口标准都在不断发展,带来更多可供设计人员应用的衍生接口。例如,此前必须的时钟拉伸特性现在已经成为可选特性了,从而可让主从机的 SCL 线保持在低电平,以阻止总线上的数据事务处理(也就是说没有 SCL 驱动器的从机不能拉伸时钟)。再如,大多数微处理器生成的 RS-232 信号电压为 0 至 5 伏特之间的 TTL 水平,这通常需要电平转换器芯片(如 MAX232)将 0 至 5 伏特的电压转换到标准的 RS-232 电压水平(-15V 至 +15V)。如前所述,UART 在 I2C、SPI 和 USB 出现之前一直在串行数据事务处理接口领域占据着主导地位,由于设计人员已经很熟悉 UART 且习惯于以这种标准进行设计工作,从而导致了许多系统只支持 UART 这一种接口。因此,我们现在需要确保 UART 能与其他数据协议相互兼容,这样才能让这种系统与其他系统桥接起来。
设计人员面临的挑战是如何在不改变目前的 CPU 或 ASIC 的情况下解决传统系统和新系统之间的不兼容性问题(比如,这些系统采用了不同的接口)。例如,I2C 和 SPI 之间的桥接问题。I2C 接口的数据控制 (SDA) 和时钟 (SCL) 信号通过桥接到两个专门的 GPIO 引脚提供给外部I2C接口。通过轮询和中断实现固件同步。SPI 主机可通过 Tx 缓冲、Rx 缓冲实施。SPIM 硬件从主出从入 (MOSI) 信号上的主 SPI 器件发送数据,并同时从主入从出 (MISO) 信号上选定的从 SPI 器件接收数据。同样的 SCLK 信号还用于主从数据的发送和接收。I2C 与 SPI 桥接时将I2C 作为从机,将 SPI 作为主机,其从I2C主机接收命令,并根据接收到的命令向 SPI 从机写入或读取数据。
还有一个突出的例子就是 SPI 到 UART 的桥接。UART 接口通过 Rx 线路接收数据。数据通过 SPI 接口发送到 SPI 从机。从 SPI 从机接收到的数据通过 UART 的 Tx 线路发送回 “UART 主机”。
不同接口之间的桥接可通过作为微处理器的分立或集成组件的可编程逻辑加以实施。在带有可编程逻辑的微处理器上实施时,我们可根据应用需要嵌入一些智能逻辑,分析接收到的数据并根据接收到的命令执行操作。也可将其他的数字和模拟块配置为 PWM、计时器、计数器、ADC、DAC、比较器或其他的通信外设(如 IrDA 和I2C)。此外还可将多个 SPI 器件连接到桥接器上,从而让单一的 UART 与多个 SPI 从器件进行通信。
在简单的桥接实施方案中,器件固件通过寄存器的读取和写入与I2C 块互动。SPI 信号可通过不同的行和全局互联路由到任何 GPIO。SPI 块可选择两种中断源:TX Reg Empty(默认)中断与 SPI Complete 中断。I2C 从中断也可通过设置寄存器中的位启用或禁用。
在微处理器上实施桥接还能使设计人员根据特定的应用修改接口以创建定制接口。片上资源可分配用于调节不同通信协议的数量和变异性。上述资源还可根据需要进行再配置,以实施不同的接口,使器件适应于需要与之通信的其他器件。此外,特别是在需要降低成本的环境中,可再配置资源的可用性使得工程师能重用桥接资源,实施电容感应和/或电压/电流监控功能等其他功能。
不同厂商制定的数据事务处理速率也很重要,因为接口 IC 通常作为无源组件用于以高速处理器为中心的系统中。实施具有先进先出 (FIFO) 特性的桥接器使设计人员能在数据事务处理期间根据时间和优先级组织和处理数据,以提高高速串行通信的可靠性并提高系统吞吐量。
右图显示的是外部组件集成的一个突出实例。如果在 TTL 电压电平(0 至 5 伏特)上生成 RS-232 信号,通常需要一个电平转换器芯片(如 MAX232)将 0 至 5 伏特的电压转换为标准的 RS-232 电压(-15V 至 +15V)。用户在系统中植入接口 IC,即可让现有的处理器与处于 TTL 电平级别的桥接器进行通信,而桥接器则能以 USB 电平将数据发送给 PC,从而不再需要 MAX232 芯片,且降低了设计的物料清单 (BOM) 成本。
桥接还能确保设计方案满足今后接口发展的要求。由于在设计初期阶段就使用桥接器,设计人员能确保在不替换主微控制器的情况下实现接口之间的兼容性。这对某些接口持续变动的更专业的应用而言尤其重要,例如大量涌现的用于音频的 I2S(Inter-IC Sound)接口、用于感应器的 I/O 链接以及用于机动车辆的 CAN(控制器局域网)等专门接口。从降低系统级成本和提高功效的角度考虑,能灵活集成上述接口的微控制器必然有助于用户根据不同应用要求以能使设计人员从中长期受益的方式定制通信协议。
|