接口/总线/驱动
随着串行端口从台式机和笔记本电脑中消失,通用串行总线 (USB) 现在是各种需要连接到 PC 的外围设备的通用接口,无论是作为开发平台还是商业产品。在这个由两部分组成的系列的第一部分中,我们快速回顾了 USB 接口标准及其在嵌入式系统中不断发展的作用。在这篇结论性文章中,我们将仔细研究在集成和独立 USB 解决方案之间进行选择,并研究 MCU 制造商在其 USB 连接中添加的一些创新功能,以帮助您的产品在具有挑战性的应用中竞争。我们将总结一些设计技术,您可以使用这些技术使 USB 连接更符合嵌入式设计的要求。
决定何时整合
正如我们在第一部分中简要讨论的那样,有几个因素会影响最好是使用具有片上 USB 功能的 MCU 实现 USB 连接还是使用单独的 USB 控制器。在许多需要简单 USB 连接的情况下,Atmel 的ATmega8U、Microchip Technology 的8 位PIC18F13K50或Silicon Labs 的 C8051F系列(图 1)等集成解决方案几乎是不费吹灰之力。
图 1:具有集成 USB 收发器的简单 8 位 MCU,例如 Silicon Labs 的 C8051 系列,是实现许多嵌入式设计的便捷且经济高效的方式。(由 Silicon Labs 提供。)
在需要支持特定 USB 协议类(例如 UART-to-USB 或 USB-to-SPI)的应用中,选择变得更加细致入微。例如,如果项目涉及使用 RS-232 接口更新现有产品以支持 USB,则使用单独的 USB-UART 桥接器,例如 Microchips 的MCP2200 Silicon Labs 的CP2104或Texas Instruments 的 TUSB3410提供更短的开发周期和更少的制造供应链中断。如果原始设计基于速度较慢、功能较弱的 MCU,独立控制器也可能特别有用,MCU 可能没有额外的处理能力(或存储空间)来支持协议/格式转换所涉及的附加任务。
应用优化的 USB 芯片有助于微调您的设计
曾几何时,设计具有一个或多个 USB 端口的嵌入式系统非常简单,因为大多数设备(及其各自的驱动程序软件)都非常相似,因此设计人员除了遵循参考设计外几乎无能为力。不再。许多现代 MCU 上的 USB 连接背后的芯片已经发展并适应了复杂的嵌入式系统环境的需求。MCU 制造商现在提供各种支持 USB 的产品,这些产品具有各种级别的硬件加速,以满足各种应用的价格和性能目标。
也许最大的创新领域是 MCU 如何执行与 USB 协议相关的请求、确认、错误检查和其他功能。在不经常使用 MCU 的 USB 接口或传输小块数据的应用中,使用软件执行协议的例行信令和握手、数据包检查和错误检测任务可能没问题。但是,如果您的应用程序需要频繁和/或大量 USB 事务,它们可能会对 MCU 有限的处理资源造成过重的负担。
直到最近,唯一的解决方案是使用独立的 USB 外围控制器,例如 Cypress Semiconductor 的CY7C63801或 Microchip 的USB3300-EZK. 现在,一些制造商提供具有集成 USB 控制器内核和其他功能的 MCU,可以处理几乎所有与 USB 相关的任务。
例如,爱特梅尔的AVR XMEGA系列 8/16 位 MCU 具有全速 USB 控制器内核,除了卸载常规协议功能外,还使用乒乓缓冲器来减少或消除重新发送丢包 (NACK) 的需要,从而提高效率转移。这种组合允许接口以或接近 USB 全速率规范支持的最大 11 Mbps 运行(有效数据速率高达 8.72 Mbits/s),同时仅消耗 CPU 处理能力的 7%。许多 Atmel MCU 还支持专有的多数据包传输模式,该模式使用硬件逻辑通过将大多数大容量存储设备使用的 512 字节数据块分解为块传输协议支持的 64 字节数据包来提高 USB 块传输的效率。
在硅食物链的更上游,Energy Micro在其基于EFM32 32 位 Cortex-M3 的 Gecko MCU 系列的许多变体上的 USB 端口中构建了多项性能增强功能。大多数外围功能的活动,包括串行通信和 USB 端口,由单独的低功耗反射总线协调(图 2)。除了防止数据传输占用任何主系统总线的带宽外,来自一个外设的事件和信号还可用作输入信号或其他外设的触发器,从而确保时序关键操作并减少软件开销。此外,内置的 3.3 V 稳压器还允许用户使用 USB 链路提供的电源运行 MCU。
图 2:Energy Micro 的 EFM32 MCU 架构包括外设反射系统,这是一种独立的外设总线,允许智能外设(包括 USB 端口)在几乎没有 CPU 干预或影响主处理器总线的情况下执行数据传输。(由能源微公司提供。)
MCU 制造商还提供了 USB 技术的改进,这对嵌入式和更传统的应用都有好处。例如,现在有几个 MCU 提供片上计时电路,从而消除了与传统上用于 USB 接口计时时钟的参考晶体(及其相关无源元件)相关的成本和 PCB 空间。直到最近,为了保持 USB 收发器每 1 毫秒 (±0.0005 毫秒) 执行的帧起始信号交换所需的 0.05% 精度,还需要一个基于晶体的定时源。Silicon Labs 推出了C8051F38x、C8051T62x和C8051T32x其 C8051 系列 8 位 MCU 包括一个片上时钟调谐电路,该电路从传入的 USB 数据包中恢复其时序信息。该功能还于 2012 年初在其“Precision 32” SiM3U1xx系列中引入,这是业界首创的 32 位处理器。
Atmel 的 XMEGA 系列 8/16 位 MCU 还提供无晶体操作,Microchip 将在其PIC16系列中引入许多新的微控制器(例如最近宣布的“未来产品”8 位 PIC16F1459)内部振荡器或自时钟调谐电路,可从传入的 USB 数据包中恢复其时序信息。
权力很重要
在嵌入式系统中,USB 收发器的功耗可能占总功耗预算的很大一部分,因此了解控制它的因素非常重要。尽管图 3 中的公式最初是为 Microchip 的 USB PIC 微控制器的数据表使用而开发的,但它们为计算 MCU 的嵌入式 USB 收发器使用的电流提供了有用的方法。从整个方程中 PZERO(逻辑“0”的百分比)和 PIN(输入流量的百分比)项之间的关系,很快就可以看出,功耗取决于应用,因为它会根据传输的数据。
图 3:USB 收发器消耗的功率可以使用一个相对简单的公式来计算,该公式描述了收发器的特性、它正在发送和接收的数据以及它所连接的电缆的长度。(由 Microchip Technologies 提供。)
在这些示例中要注意的另一个有趣的事情是,IN 流量的百分比为零会影响从总线汲取的电流量。许多设计人员使用逻辑“0”作为数据变量的默认值,但需要注意的是,与使用“1”相比,这实际上可能会略微增加系统电流。另请注意,这只是对 IN 流量的考虑,即从 USB 外设到 USB 主机的流量。
许多类别的 USB 外设现在使用 USB 作为实际电源,用于需要 100 mA 或更少电流的应用。对于需要小于 500 mA 的应用,决定变得有点困难,因为自供电集线器不太常见,而且许多设计人员仍然选择使用单独的总线电源。
对于需要超过 500 mA 的应用,USB 规范包括一项电池充电规定,允许从系统中汲取高达 1.5A 的电流。不幸的是,由于支持电池充电规范的主机系统相对较少,外围设备制造商不愿生产可以利用它的设备。您将在某些基于 USB 的手机或平板电脑充电器中看到此电池充电规范。电池充电规范包括一种廉价(尽管效率低下)的方式来实现充电器电路,只需通过电阻器(《 200 Ω)短接 USB 连接的 D+ 和 D- 引线,您将在最便宜的基于 USB 的手机中遇到这种技术/平板电脑充电器。
从信号的角度来看,为主机实现电池充电规范 v1.2 相当简单。所需要的只是一个介于 0.5 和 0.7V 之间的电压源,该电压源可以在该范围内提供 250µA 电流,但不会将 1.5k 上拉电阻拉至低于 2.2V 的 3.0V(图 4)。此电压源应连接到 D- 并在设备分离时启用,并在设备连接时禁用。图 4 是一个简单的原理图,它将通过一个运算放大器、一个二极管、两个电阻器和一个控制线来实现。
图 4:允许 USB 主机使用其可选的高功率电池充电模式的简单电路。(由 Microchip Technologies 提供。)
在外设上实现 BCv1.2 规范要复杂一些。它需要两个这样的电压源电路、两个恒定电流吸收器,以及在 USB 外设上的更多代码实现,但它仍然在普通嵌入式设计人员的掌握范围内。
然而,制造商不愿投资于支持其主机系统中的大功率充电选项所需的额外单位成本,这导致了行业内的“鸡与蛋僵局”。幸运的是,如果 PC 制造商和其他 USB 主机设备制造商决定提供能够支持平板电脑和其他与资源紧密集成的移动外围设备更高功率要求的桌面产品,这种情况可能会在未来几年内改变他们的主机系统。
USB 功能通过支持与各种 USB 设备的通信以及添加可在单根电缆中提供高达 500 mA 电流的电源选项,为系统增加了便利性和灵活性。正如我们所指出的,通过添加集成 MCU 或独立 USB 解决方案,可以将 USB 通信设计到嵌入式系统中。将 USB 集成到嵌入式设计中的主要考虑因素包括 USB 事务的大小和频率、USB 收发器的功耗以及是否涉及 USB 电池充电规范 (v1.2)。我们提供并讨论了集成 USB MCU 和独立控制器的示例。
全部0条评论
快来发表一下你的评论吧 !