输入输出基础知识,第二部分:理解协议
Arduino 101 板卡与 UNO 板卡在物理形状和引脚布局上相同,可以兼容许多适用于其前代产品的扩展板;您也可以在两个板卡之间互换外壳和固定件。
获取新的 Intel® 物联网开发套件,这是一个完整的硬件和软件解决方案,使开发者能够使用 Intel® Galileo 和 Intel® Edison 板卡创建激动人心的新解决方案。请访问 Intel® 物联网开发者专区。
Arduino 101*/Genuino 101* 板卡是首款由 Intel® Curie™ 技术驱动的开发板。它拥有与 Arduino* UNO 板卡相同的外设列表和控制器。Arduino 101 板卡与 UNO 板卡在物理形状和引脚布局上相同,可以兼容许多适用于其前代产品的扩展板;您也可以在两个板卡之间互换外壳和固定件。
该 Arduino 板卡配备双核 x86 32 位 Intel® Quark™ 处理器,支持多线程应用程序,并能使用 UNO 板卡不支持的强大外设。板卡的操作系统电压为 3.3 V 输入/输出 (I/O),具有 5 V 耐受能力,这意味着您也可以连接 5 V 元件。它拥有 20 个通用 I/O (GPIO) 引脚:14 个数字 I/O 引脚和 6 个用于模数转换 (ADC) 的引脚。板载四个脉冲宽度调制 (PWM) 引脚和三个连接到 GPIO 引脚的通道逻辑转换器。Arduino 101 板卡配有串行外设接口 (SPI) 信号的片上串行编程头,可用于访问微控制器和 I2C 专用引脚。内置六轴加速度计、陀螺仪和蓝牙* 低功耗 (Bluetooth* LE),您可以轻松创建物联网 (IoT) 应用,让您能够使用智能手机控制您的板卡(图 1)。
ADC 和 PWM
那么,这一切意味着什么?要理解 ADC 和 PWM,您首先需要仔细了解模拟信号和数字信号。为了让元件能够通信,它们必须发送信号——可以将其视为消息——这些消息反映了在给定时间内的状态变化。在电子学中,被测量的是电压。变化如何发生是区分这两种信号的关键。您可以在图表中表示信号(电压随时间的变化):模拟信号显示为平滑、连续的波形,因为电压的过渡是平缓的;而数字信号则表示为方波,只有“开”(5 V) 或“关”(0 V) 状态(图 2)。
集成电路之间的通信大多数是数字的,而 ADC 允许微控制器读取模拟设备发出的信号。反之,数模转换允许微控制器生成模拟信号并与模拟接口通信。当您想控制数字信号中的时间变量时,PWM 就派上用场了,它允许延长“开”或“关”状态的时间。信号处于“开”状态 (5 V) 的时间称为占空比。
图 3 展示了不同占空比的图形表示。您可以更改时间单位,使“开”状态的时间更长或更短。占空比百分比越大,LED 点亮的时间就越长,从而减少 LED 熄灭 (0 V) 的时间。PWM 可以通过 LED 来演示;一个常见的例子是渐变效果,通过非常快速地切换“开”和“关”状态,可以模拟模拟行为。
请记住,在模拟波形中,“开”和“关”之间的过渡更平滑;因此,在观察者看来,LED 会显得逐渐变亮或变暗。在数字设置中,变化更 abrupt,您只会看到 LED 在“开”和“关”之间快速切换。PWM 允许 LED 通过让它看起来像在渐变,即使在使用数字信号时也能欺骗您的眼睛。对于 RGB LED(由一个红色、一个绿色和一个蓝色 LED 组成),每种颜色都可以表示为不同的百分比,这会影响光的整体颜色。如果您让绿色和蓝色 LED 的占空比均为 50%(数量相等),而红色 LED 的占空比为 0%,则产生的颜色将是青色。
串行通信:集成电路间通信、SPI 和通用异步收发器
Arduino 101 板卡在其微控制器和外设之间使用串行通信。在串行系统中,一次只能发送 1 位数据,而在并行通信中,可以发送多位数据。您可以将串行通信想象成一条单车道公路,而并行通信则像一条多车道高速公路。SPI 和集成电路间通信 (I2C) 是通过数字信号进行通信的串行总线。您可以将总线想象成数据传输的道路:它的目的是允许多个主-从芯片之间进行通信,其中一个设备充当控制器(主设备),而其他设备被控制(从设备;参见图 4)。该板卡使用 I2C 与较慢的、偶尔访问的板载外设进行通信。它只需要 2 根线就可以连接多达 127 个设备,每个设备都有一个唯一的标识符,主设备使用该标识符来识别其从设备。I2C 可以读取和写入多个传感器的数据。同步系统需要时钟来确保数据在正确的时间节拍下写入和读取。主设备决定哪个设备执行哪个操作(读/写)。串行时钟 (SCL) 线提供主设备生成的时钟信号,该信号同步 I2C 总线上设备之间的数据传输。串行数据 (SDA) 是第二根线,它承载着总线上的数据流。由于其简单性和低带宽协议的特性,它是访问不频繁设备的绝佳选择,但比 SPI 慢。
SPI 允许一个主设备和使用四种信号类型的一个或多个从设备。您可以将它们想象成主设备和从设备之间四条通信通道(线路)。
- 主发送从接收 (MOSI)。 将数据从主设备传输到从设备(数据线)。
- 主接收从发送 (MISO)。 将数据从从设备传输到主设备(数据线)。
- 串行时钟 (SCLK)。 同步系统的时钟信号。
- 从选择线 (SS_)。 用于选择和启用总线上的从设备;通知从设备唤醒并发送或接收数据。
您可以设置两种 SPI 模式。如果所有从设备共享同一根从选择线,SPI 最少需要四根线(MOSI、MISO、SCLK、SS_)。另一种选择是为每个从设备提供自己的 SS_ 线连接到主设备;在这种情况下,每个从设备都需要额外的线。图 5 总结了这两种设置。
在比较 I2C 和 SPI 时,您还应该理解全双工和半双工的概念。全双工通信是指双方(在此情境下为从设备和主设备)可以同时发送数据。在半双工通信中,一方必须等待另一方发送完数据。仔细观察,由于 SPI 是全双工的,它比半双工的 I2C 多一条数据线,而 I2C 只有一条数据线,不能同时发送和接收数据(图 6)。
在异步系统中,没有时钟来指示何时发送信息。相反,发送方和接收方必须就信息通信的速度(比特率)达成一致。如果发送方发送速度更快,接收方将无法理解发送的数据,因为它会以较低的节拍处理。因此,建立比特率对于有效使用异步通信至关重要。通用异步收发器 (UART) 是一个现在普遍包含在微控制器中的异步单元,它充当并行接口和串行接口之间的中介。它用于连接两个设备,其中发送器的输出(标记为 *Tx*)通过单向数据线连接到接收器(*Rx* 输入;图 7)。这样,一个 UART 将字节数据(1 字节 = 8 位)分解成每个独立的位,并通过 Tx 线传输到接收 UART(Rx 线)。在接收端,UART 会重新组装这些位,生成原始发送的字节。
摘要
Arduino 101 板卡配备了各种各样的引脚、芯片和其他设备,它们使用同步和异步方法进行通信。已经设计了复杂、对时间敏感的解决方案,以确保数据正确发送、接收和处理。本文探讨了 PWM、ADC、I2C、SPI 和 UART 如何协同工作,实现微控制器与外设之间的通信,帮助您的物联网项目变为现实。
更多信息
- 请查看教程“模拟与数字”:https://learn.sparkfun.com/tutorials/analog-vs-digital
- 请查看教程“PWM”:https://www.arduino.cc/en/Tutorial/PWM
- David Kalinsky 和 Roee Kalinsky 在 http://www.embedded.com/electronics-blogs/beginner-s-corner/4023816/Introduction-to-I2C 提供了一个关于 I2C 的良好介绍。
其他阅读
- 学习输入和输出 - 第一部分
- 了解更多关于 Intel® Curie™ 模块和 Arduino 101 的信息。
- 访问 Intel Developer Zone 网站,了解更多关于 Intel 物联网技术的信息。
登录以下方区域发表评论。如果您尚未注册,请前往 Intel® Developer Zone 进行注册。