创建者:Scott Schmit,最后修改者:Robert Nelson,最后修改日期:2021年2月5日
本页旨在解答关于嵌入式系统设计的常见问题。一些问题为宽泛或概念性问题。另一些问题则更加具体,可能涉及单片机内的单个外围设备。浏览完各主题后,请花点时间访问DigiKey电子百科的各个部分。你可以找到一些包含下述主题的实际示例。
什么是嵌入式系统?
嵌入式系统由具有专用功能的硬件和软件组成,属于更大系统中的一部分。它通常包括一个或多个用于监管系统功能的微处理器或单片机。嵌入式系统包含某种能够在上电时自动启动的软件。许多时候,软件会自主运行。不过,嵌入式系统也常常包含用于外部控制和监控的某种用户界面(按钮、开关、LED、LCD等)。
什么是微处理器?
微处理器负责执行中央处理单元的所有功能,并被制造成小型集成电路。它需要解释并执行程序指令,因此可以被视为嵌入式系统的“大脑”。微处理器包括以特定顺序执行指令的数字逻辑,并使用主时钟来持续按顺序执行指令。主时钟内部通常被内部划分成单个时钟信号,用于触发专门的硬件部分。
什么是单片机?
单片机将CPU与存储器和用于特定目的的硬件外围电路相集成。
就存储器而言,单片机包括某种可以在运行时变为只读的非易失性可编程存储器。该存储器就是用户编程应用代码的地方,这些代码用于按照特定顺序执行指令以实现系统的整体目的。单片机通常具有易失性随机存取存储器,可以在运行时用于操作变量和存储结果。有时,单片机还会包括额外的非易失性存储器,用于在掉电时存储信息。
专用的硬件外围设备因单片机的不同而有所变化。一些常见的硬件外围设备包括计时器、串行通信块、模数转换器、数模转换器、模拟比较器,以及通用输入和输出引脚。
并行通信和串行通信有什么区别?
当两个器件相互通信时,意味着它们正在交换数据。将由系统架构来定义每个数据字由多少位组成,最常见的是8位、16位和32位数据字。并行通信使用专用线路来传输数据字中的每一位。而串行通信则将所有位按某种预定义的顺序移位到单一数据线上。通常,串行通信使用单一数据线,并按顺序依次(以最高有效位(msb)或最低有效位(lsb)为优先)移动每个位。但一些串行协议也会以非顺序的方式重新排列位,以减轻电场效应(直流偏置、电磁干扰等)对板的其余部分的影响。
使用并行通信的主要优势在于,在传输相同数量的数据的情况下,它需要的时钟周期数要少于串行通信。例如,如果使用8条独立线路传输一个8位数据字,那么整个数据字将在单个时钟周期内传输完毕。而使用单一数据线的串行通信协议则需要8个时钟周期来传输相同的数据字。
使用串行通信的主要优势在于,它大大减少了器件上的引脚数量和布线所需的板空间。因此,我们可以将引脚用于其他用途,并且这通常减少了所需的板空间和/或电缆尺寸。
此外,还有融合了二者优势的混合通信协议。例如,双和四I/O SPI协议使用多个串行数据引脚来增加总体带宽。不过,这最终还是取决于设计师的理解权衡,从而确定特定应用所需/可接受的方案。
同步通信和异步通信有什么区别?
同步通信意味着交换数据的两个(或更多)器件共享一个公共时钟线。一个器件(通常称为主机)将驱动时钟信号作为输出,而另一个器件(通常称为从机)将读取时钟信号作为输入。顾名思义,这样可以保持器件的同步,并确保数据在正确的时间进行设置和采样。同步通信的主要优势在于可靠性。你不必费心在每个器件上设置准确的参考时钟,以达到适当的波特率,并且温度对数据可靠性几乎没有或完全没有影响。缺点在于它需要额外的引脚,并且通常会增加所需的板空间/电缆尺寸。在板上运行时钟信号也可能增加电磁干扰效应。
异步通信表示两个器件不共享专用时钟信号……每个器件上都有一个唯一的时钟。因此,各器件必须提前设置相匹配的比特率以及在给定通信步骤中预期的位数。异步通信的优势在于它可以少用一个引脚,从而节省了板空间/电缆尺寸,并支持设计师将该引脚用于其他用途。从板上移除时钟线还有助于减少电磁干扰。使用异步通信的缺点是较难实现可靠的通信。用于生成比特率的参考时钟必须在相应的温度下维持一定的准确性和稳定性,否则时间可能会出错。整数除法下降也可能在比特率中引入错误。当你尝试实现不是参考时钟的精确整数倍的波特率时,就会发生这种情况。换句话说,即使有完美的参考时钟,所需的波特率也可能无法在一定量的误差下实现。误差量可能在/不在可以接受的范围内。
什么是 I2C ?
集成电路总线(I2C)协议是一种普遍用于嵌入式系统的同步串行通信协议,这是因为所需的引脚数量少,并且可以连接大量设备到单个总线上。I2C主机和从机之间只需要一条数据线(SDA)和一条时钟线(SCL)再加上共地即可。下图(可参考I2C百度百科词条)显示了I2C通信步骤的简化时序图。第一个黄色框用于指示启动信号。启动条件是SDA线在时钟线为高电平时转换为低电平的唯一时刻。在通信步骤期间,SDA转换在SCL处于低电平(蓝色)时进行,且SDA在SCL处于高电平(绿色)时被采样。第二个黄色框用于指示停止信号。停止条件是SDA线在时钟线为高电平时转换为高电平的唯一时刻。数据和时钟线使用具有外部上拉电阻的开漏输出。当器件停止主动驱动总线时,外部电阻将拉高每条线的电平。
I2C 时序示例
I2C是基于地址的协议,这意味着每个从设备都有唯一的I2C地址。I2C支持在单个总线上的多个主机和多个从机。器件的规格书将指定其I2C从机地址。通常,器件会使用7位I2C从机地址,尽管I2C协议的一些变体版本也支持10位和16位寻址模式。典型的I2C通信步骤将从主机发出启动信号开始,然后是包含从机7位地址和单个读写位的单个字节。在从机地址字节之后,消息格式因器件而异。在单个通信步骤中传输的字节数量没有限制。但是,在发送下一个字节之前,每个字节都必须获得接收器件的确认。在接收到最后一个字节和确认后,主机将发出停止信号以结束通信步骤。对于支持更大寻址方案的器件而言,初始字节格式也可能有所变化。特定器件的规格书将描述所需的I2C消息格式。100kbps是标准的I2C数据速率,而最近的I2C变体则支持400kbps快速模式 ,1Mbps快速模式 +和3.4Mbps高速模式 。
什么是 SPI ?
串行外围设备接口(SPI)协议是嵌入式设计中另一种常见的同步串行通信协议。SPI通信涉及使用共享总线的一个或多个主设备和一个或多个从设备。全双工或4线SPI使用2条数据线、1条共享时钟线和1条从设备选择线。半双工或3线SPI使用共享数据线。
引脚说明
- MISO:主设备输入,从设备输出 - 数据从从设备移出并进入此线上的主设备。
- MOSI:主设备输出,从设备输入 - 数据从主设备移出并进入此线上的从设备。
- SCLK:时钟 - 时钟总是由主设备驱动。时钟在数据加载到主设备的发射器中时即刻启动,并在最后一个位被移出时停止。
- SS:从设备选择 - 用于寻址不同的从设备的专用从设备选择(或芯片选择)线。只有当从设备的SS引脚变为有效(低电平有效)时,从设备才会接收数据。
SPI 时序
下图取自Atmel Xmega-A3U手册,其中展示了SPI的4种操作模式。所有SPI器件的4种模式都非常相似。
- 模式0:SCLK空闲时低电平。数据在SCLK的下降沿设置。数据在SCLK的上升沿采样。
- 模式1:SCLK空闲时低电平。数据在SCLK的上升沿设置。数据在SCLK的下降沿采样。
- 模式2:SCLK空闲时高电平。数据在SCLK的上升沿设置。数据在SCLK的下降沿采样。
- 模式3:SCLK空闲时高电平。数据在SCLK的下降沿设置。数据在SCLK的上升沿采样。
一般操作
主设备始终启动传输。从设备只需等待其SS线变为有效且SCLK出现,或使用其他I/O提示主设备。当SCLK激活时,数据将同时开始在MOSI线上移出,在MISO线上移入。数据逐位移入/移出,直到所有位都已移动。通常,单片机具有内置的SPI寄存器,可在所有数据位都被移出时设置标记。
优点:
- 低负担 - SPI协议为每个从设备使用专用的从设备选择线。因此无需通过数据线发送地址,从而减轻了负担。
- 可靠 - 专用的时钟线解决了异步协议(如UART)中常见的波特率不匹配问题。
- 快速 - 双数据线增加了总体吞吐量,低负担提高了总体比特率。
- 共享总线 - 专用的从设备选择线支持多个设备共享相同的数据/时钟线。如果SS线未启用,设备只需忽略数据即可。
缺点:
- 引脚数多 - 与其他常见的串行通信协议相比,SPI使用的引脚相当多。对于多主机设置,每个从设备和主设备都需要一个额外的引脚(SS)。
- 错误检查 - 没有默认的CRC检查或总线争用指示。
- 传输启动 - 主设备必须启动所有传输。如果从设备有数据要发送到主设备,则必须等待主设备启动传输,或使用外部信号中断主设备。
什么是 UART ?
通用异步接收/发送器(UART)是嵌入式设计中使用的一种非常简单的串行通信方法。UART通信在全双工模式下使用一个引脚进行发送(TX)和一个引脚进行接收(RX)。半双工则使用一个共享的引脚执行TX和RX(通常称为单线UART或单总线通信)。这两个版本都需要共地才能正常运作,因为TX和RX都是单端信号。
由于没有共享的时钟线,因此需要在通信链路的两端预先设置数据速率和帧格式。常见的长度为7位、8位和9位数据帧,其中8位是最普遍的。数据线在传输之间将保持空闲时高电平。UART协议中没有主从关系,因此任何设备都可以启动传输。这是通过将传输引脚驱动为低电平一个比特周期(视为启动信号)来实现的。随后将传输指定数量的数据位,通常先传输最低有效位。你可以使用可选的奇偶校验位进行基本的错误检查。奇偶校验位用于使数据位的“总和”为偶数或奇数,并与数据一起传输。接收器将重新计算数据位和奇偶校验位的总和,并与预期的奇偶校验进行比较,以此作为数据完整性的简单检查。通过将线路驱动为高电平指定数量的比特周期(停止位)来结束帧。各端的接收器使用过采样来读取传入数据的每个位。过采样率取决于所使用的期望波特率。
下图取自Atmel ATmega256RFR2规格书(第23.4节)。其中显示了UART通信的帧格式。
有时我们会使用单独的流量控制信号“清除发送”(CTS)和“请求发送”(RTS),以便在以不同速度运行的设备之间实现更有效的通信步骤。这一情况尤其常见于电力系统和机械系统的混合应用(例如桌面打印机)。电力信号只需极少的时间即可完成。但电机或电磁阀的机械运动将需要更长的时间才能完成一个过程。这两种设备很可能以信号交换的方式使用CTS和RTS信号,以确保在适当的时间传输数据。
什么是 USART ?
通用同步/异步接收/发送器(USART)是一些单片机的专用硬件外围设备。USART外围设备为用户提供使用同步或异步通信的选择。它可以用作上述UART,即,仅使用数据线,或者也可以在同步模式下使用,这时需要增加时钟线。同步模式通常允许突发通信步骤(在单个通信步骤中发送多个字节),而异步模式通常一次只发送一个字节。大多数包含USART的单片机支持用户执行SPI协议(在同步模式下)。但应注意的是,大多数支持USART SPI模式的单片机通常在USART上不支持SPI从设备模式,而只支持SPI主设备模式。基本上,USART可帮助你实现UART或SPI,而不会限制为其中之一。
什么是 ADC ?
模数转换器(ADC)是单片机中最常见外围设备之一。ADC可在单一时间点将连续的模拟电压转换为可以被数字器件(如单片机)解释的数字值。模拟信号的采样频率由设计师决定。但每个ADC都具有采样率上限。
分辨率是另一个重要的ADC规格,它定义了在给定时间点用于描述模拟信号的位数。较为便宜的单片机中通常采用的ADC分辨率为8位、10位和12位。一些特殊用途的ADC的分辨率甚至高达32位。分辨率越高,定义模拟信号的精细程度就越高。例如,分辨率为10位的ADC支持使用2^10(即1024)个可能的数字值来描述模拟信号。而分辨率为16位的ADC支持使用2^16(即65,536)个单个数字值来表示模拟信号。
ADC的模拟输入范围是另一个需要考虑的重要因素。对于单端测量(相对于地的测量),模拟输入范围通常从0V到定义的参考电压。通常,设计师在选择参考电压时可以选择相关选项。差分测量会对两个不同的模拟信号进行采样,并计算两者之间的差值。这在消除同时出现在两个信号上的外部噪声(称为共模噪声)时非常有用。
什么是 DAC ?
数模转换器(DAC)可将数字信号转换为连续的模拟信号。DAC通常用于音频应用,以驱动扬声器或放大器。与ADC类似,DAC也有操作速度上限,以及和ADC一样的固定的分辨率。分辨率越高,对模拟输出的控制就越精细。
DAC将接受数字输入,并创建达到指定模拟值的单个脉冲。如果向DAC输入一串数字值,你随后将得到模拟输出脉冲。输出脉冲之间的间隔将由过滤器进行插补值,以实现连续信号。如前所述,DAC通常用于音频应用。因此,数字输入通常以恒定时间间隔应用,并相应地更新模拟输出。
什么是脉冲宽度调制?
脉冲宽度调制(PWM)是一种通过改变信号的全开和全关状态并精确控制在每种状态下花费的时间来控制电压或电流的方法。脉冲列以恒定频率进行切换,且信号的平均值与开/关时间比值成正比。这种开/关时间比值被称为占空比。占空比可以让我们按百分比而非单个时间单位来思考。我们来看一个简单的例子。
下图显示的是占空比为50%的PWM信号,这意味着信号有50%的时间处于开启状态,有50%的时间处于关闭状态。假设信号在0和5V之间切换,则以下PWM信号的平均值将是2.5V。
在下一张图中,占空比增加到75%,这意味着信号有75%的时间处于开启状态,有25%的时间处于关闭状态。这会将电压从2.5V增加到3.75V(5V的75%)。
应注意的是,PWM信号的周期(频率)保持不变。我们可以看到,两张图中的黑线间隔均匀,信号的下降沿总是在定义的时间发生。上升沿,也就是脉冲宽度,是我们需要进行调整以精确控制平均值的部分。所需的切换频率将特定于应用。
PWM广泛应用于嵌入式设计中。电机控制、LED强度控制和DC/DC电源转换都是脉冲宽度调制的典型应用。
什么是 DMA ?
直接存储器访问(DMA)支持器件(如单片机)在无需使用CPU的情况下执行某些任务。DMA控制器可以监督任务并在存储器的不同区域之间传输数据。这样一来,CPU就可以在等待速度较慢的函数完成时执行其他任务,从而提高了吞吐量和整体程序执行效率。
问题 / 评论
如有任何疑问或评论,请访问DigiKey的技术论坛