MCU任何选择SPI、I²C 或 UART 等通用串行接口

接口/总线/驱动

1139人已加入

描述

  MCU 提供了非常广泛的串行接口选择。串行接口的选择可能与外围组件所需的接口一样简单,但是当您可以选择要使用的接口时,明智的决定会对系统性能产生重大影响。SPI、I²C 或 UART 等通用串行接口可能是最常见的选择,但 CAN 或 SMBus/PMBus 等更专业的接口又如何呢?这些选择什么时候最好?本文将更详细地研究这些串行接口标准,并探索一些常见的实现,以更好地了解它们最适合的应用程序类型。

  通用异步接收器发送器

  也许最熟悉的串行接口是古老的通用异步收发器 (UART)。这个简单的异步协议使用单线传输数据和另一根线接收,使用图 1 顶部所示的简单数据帧。线路从空闲状态开始,高电压电平和低沿定义数据框的开始。随后是多个数据位,低电平或高电平指示数据值。一个可选的第 8 个数据位和一个奇偶校验位可以包含在数据帧的末尾。(第 8 个数据位是可选的这一事实让您知道标准的历史。谁会想到创建一个只有 7 个数据位的现代标准?)一个自由运行的时钟,通常是数据传输频率的几倍,用于捕获起始位之后的数据位。接收器通常可以通过检查数据速率和窗口化起始位和停止位之间的时间来“计算”传输数据速率。UART 的数据速率通常低于其他串行协议的数据速率,但其简单性和普遍性(几乎每个 MCU 都有多个 UART 外设)使其非常适合传感器、简单控制器和子系统通信等低性能应用— 通过电线或通过板对板连接器。

 

uart

 

  图 1:UART 数据格式和 Energy Micro 低能耗 UART 操作。(由能源微提供)

  您可能认为这种类型的接口几乎没有什么创新的可能,但随着对低功耗操作的持续推动,即使是熟悉的 UART 也受到关注。例如,Silicon Labs 的Energy Micro Tiny Gecko MCU 设备,如EMF32TG210包括熟悉的 UART 外设的特殊低能耗实现。低功耗 UART 可以在低功耗 EM2 模式下独立运行(关闭大部分核心功能)。低功耗 UART 还可以在极低功耗模式下等待传入的 UART 帧。当检测到传入帧时,可以唤醒 CPU。或者,可以使用 DMA 控制器在 CPU 干预下将多个帧移动到片上 SRAM,如图 1 底部所示。为了更节能的操作,低能耗 UART 甚至可以阻止数据接收,直到可配置的检测到起始帧。此外,可配置信号帧可用于生成中断,可能指示块传输结束,以唤醒 CPU。低功耗 UART 的数据传输速率限制为 9600 波特,

  通用同步异步收发器 (USART)

  通用 UART 外设的大多数现代 MCU 实现不仅包括异步操作,还包括同步操作。这很常见,因为同步和异步操作之间的许多低级硬件是相似的。同步操作通常支持其他标准,例如 RS-485、Microwire、3-wire、SPI、SmartCards 和/或 IrDA。支持这些额外同步标准所需的附加电路确实需要额外的功率,因此仍有一些实现,例如 Energy Micro 低能耗 UART,至少为单个 UART 通道省去了额外的 USART 开销。

  串行外设接口 (SPI) 和内部集成电路接口 (I²C)

  SPI 和 I²C 串行端口用于非常相似的目的。它们是简单的串行接口,使用最少的信号连接到中速外围设备——通常是传感器、串行存储器,并作为更复杂设备的配置端口(例如,一些 FPGA,可以通过 SPI 接口进行配置)。 STMicroelectronics

  STM32F373xx系列支持 I²C 和 SPI,我们将在此以示例的形式展示这些端口的常用位置。STM32F373的I²C 端口可以在 100 kHz(标准速度)、400 kHz(快速)和 1 MHz(快速+ 速度)下运行,而 SPI 端口可以高达 18 Mbits/s 的速度运行。MCU 通常具有多个 I²C 和 SPI 端口,STM32F373 也不例外,具有三个 SPI 端口和两个 I²C 端口。I²C 和 SPI 端口支持其他类似协议也很常见。在 STM32F373 上,I²C 端口还可以支持 SMBus/PMBus 进行电源配置和控制,SPI 端口还可以支持内部集成声音接口 (I²S)。

  SPI 和 I²C 端口是适用于多种应用的主力串行端口。简单的连接(仅使用几个引脚)和简单的协议,以及在地址匹配期间唤醒 CPU 或通过 DMA 自动传输支持的一些有用的硬件功能,使这些端口成为低速传感、电源控制的首选,配置和简单的通信。只有当您需要更高的性能时,您才需要考虑另一种类型的接口。

  许多串行接口外设都有共同的架构元素,因此仔细研究 SPI 外设的 STM32F373 实现有助于总体了解串行接口外设。如图 2 所示,STM32F373 SPI 端口具有少量 IO(MOSI 和 MISO 串行数据信号、SCK 串行时钟和 NSS 从机选择引脚)。许多串行外设使用单独的数据输入、数据输出和时钟作为低引脚数和高性能之间的平衡。一个单独的时钟需要一个额外的引脚而不是非时钟实现,但允许更高的性能,因为数据不需要像在 UART 协议中那样以数据速率的倍数进行采样。从机选择输入也是其他串行通信实现的通用元素,它允许多个设备使用相同的信号,

 

uart

 

  图 2:在 STM32F373 上实现 SPI 外设。(意法半导体提供)

  STM32F373 具有独立的发送和接收 FIFO,有助于减轻 CPU 的低级通信管理负担。移位寄存器在串行通信实现中无处不在,用于保存外设发送或接收的数据。用于确定时钟速率的集成波特率发生器和用于从 CPU 卸载任何低级错误检查的硬件 CRC 模块是受欢迎的硬件元素,并且对于许多串行外设实现来说也是常见的。最后,需要从外设到系统其余部分的总线接口,许多实现包括总线矩阵和 DMA 控制,以优先考虑数据传输并进一步提高效率。

  STMicroelectronics 为 STM32F3 微控制器提供了一个探索套件,有助于工程师利用和应用这些 MCU。

  SMBus/PMBus

  SMBus 是 I²C 总线的简化版本(只有时钟和数据),最初被定义为将 ON/OFF 指令传送到电源——通常是板载模块或稳压器。大多数 MCU I²C 外设可用于控制 SMBus,但也有例外,因此请仔细检查您的设计中是否需要 SMBus。PMBus 是一种稍微复杂的实现,但仍然很容易得到大多数 MCU I²C 端口的支持,它更清楚地定义了兼容设备的一些属性(而不是像 SMBus 那样主要定义通信协议)。PMBus 与 SMBus 的选择主要取决于电源控制系统,因为 MCU 支持通常很容易获得。

  控制器局域网 (CAN)

  CAN 协议的主要设计目的是用作车辆串行数据总线,以满足车辆嘈杂环境中实时处理和可靠运行的特定要求。所需带宽的成本效益也是一个关键目标。CAN 也被更广泛地用于存在类似实时和可靠性要求的电机控制和工业自动化。

  尽管 CAN 仅使用单数据发送信号和单数据接收信号,但它是比我们之前讨论的协议复杂得多的协议。幸运的是,外设自动支持许多低级细节,用户可以主要关注设计的高级方面。作为一个示例实现,飞思卡尔Kinetis K30 MCU 设备(如MK30DX256)具有非常灵活的 CAN 协议实现,如图 3 所示,有助于说明在使用更复杂的协议进行设计时的一些关键考虑因素。

  

 

uart

 

  图 3:飞思卡尔 Kinetis MK30DX256 MCU CAN 控制器。(由飞思卡尔提供)

  Freescale Kinetis MK30DX256 上的 FlexCAN 模块是 CAN 协议规范 2.0 B 版的完整实现。最好将其视为协议控制器,而不仅仅是一个简单的接口,因为它隐藏了设计的许多低级元素用户。(CAN 物理层的细节实际上很有趣,在很多方面都让人想起以太网,但超出了本文的范围。如果您有兴趣了解更多信息,请参阅 CAN 规范¹。) 两线制通信接口由控制器处理,生成的消息存储在本地消息缓冲区 RAM 中。

  在 Freescale Kinetis MK30DX256 实施中,CAN 协议引擎 (PE) 子模块管理 CAN 总线上的串行通信,请求 RAM 访问以接收和发送消息帧,验证接收到的消息并执行错误处理。控制器主机接口 (CHI) 子模块处理接收和发送的消息缓冲区选择,负责仲裁和 ID 匹配算法。总线接口单元 (BIU) 子模块控制对内部接口总线的访问,以建立与 CPU 和其他模块的连接。与 FlexCAN 控制器相关的灵活性是通过控制各种操作模式、掩码寄存器、错误计数器、中断寄存器和 FIFO 控制的大量配置寄存器(31 个 32 位寄存器)来实现的。

  虽然 CAN 主要针对汽车应用,但它也可用于许多工业应用。例如,电机控制是一种应用,CAN 的抗噪声能力(以电磁干扰或 EMI 的形式)可以带来很大的好处。对稳健运行、运行冗余和低速要求有重大要求的工厂车间可能会发现 CAN 比不太稳健的串行接口或更复杂的解决方案(如工业以太网)更好。现在越来越多的低成本 MCU 支持 CAN,以及 CAN 驱动程序和协议栈的更好可用性,CAN 可能值得在您的下一个工业控制项目中进行更深入的研究。

  软件支持是关键

  在这些类型的更复杂的外设中,大量的配置寄存器可能令人望而生畏,正确设置每个配置位可能是令人沮丧的根源。幸运的是,MCU 制造商已经意识到了这一点,并且通常会提供一种工具来轻松设置常见操作场景所需的各种配置位。例如,飞思卡尔提供了 Processor Expert 工具²,它可以生成 C 代码来创建、配置、优化、迁移和交付软件组件,例如外围驱动程序,作为您软件开发过程的起点。Processor Expert 使用简单的图形用户界面从库中选择组件,使用可消除错误和冲突的引导过程配置它们(在“手动”执行此任务时很常见),然后将它们安装到您的软件项目中,供 IDE 在软件开发期间使用。在设计复杂的外围设备以避免代价高昂的错误和配置冲突时,这种类型的工具几乎是一项硬性要求。一个简短的视频 3 提供了此过程的快速概览。

  总结

  在许多应用中,众所周知的低带宽 UART 可能是最熟悉的选择,但现在 MCU 提供了广泛的其他中低带宽串行接口解决方案,如 SPI、I²C、PMBus 和 CAN it对于查看其他选项也很有用。使用有助于向用户“隐藏”许多详细的低级硬件功能的软件工具,您不仅会获得更高的接口性能,而且还会减少您的开发时间。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分