嵌入式硬件基础

  • 1,存储器
    • 1.1 概念
    • 1.2,存储器结构模型
    • 1.3,存储器性能指标
    • 1.4,嵌入式存储器类型
      • 1.4.1,只读存储器
      • 1.4.2,随机存储器
      • 1.4.3,双端口RAM
      • 1.4.4,混合存储器
        • 1.4.4.1 **Flash** ★ ★ ★ ★ ★
        • 1.4.4.2 FRAM 铁电存储器
        • 1.4.4.3 系统配置数据存储器
    • 1.5,总结
  • 2,最小系统,电源与外围电路
    • 2.1,外围电路1:供电电路
    • 2.2,外围电路2:时钟电路
      • 2.2.1,构建时钟电路的方式一
      • 2.2.2,构建时钟电路的方式二
      • 2.2.3,多时钟管理
    • 2.3,延伸:电源管理与低功耗设计
  • 3,复位电路与看门狗逻辑
    • 3.1.,上电复位(POR)
    • 3.2,阻容式复位电路
    • 3.3,手动复位
    • 3.4,专用复位电路
    • 3.5,看门狗复位电路(WatchDog,WD)
    • 3.6,内部复位
    • 3.7,软件复位
  • 4,I/O接口与总线
    • 4.1,SPI串行总线
      • 4.1.1,SPI基本功能
      • 4.1.2,SPI的通信原理
      • 4.1.3,SPI连接方式
      • 4.1.4,SPI接口操作
      • 4.1.5,软件设计
    • 4.2,I^2^C串行总线
      • 4.2.1,概念
      • 4.2.2,基本通信过程
      • 4.2.3,I^2^C串行总线仲裁原理
      • 4.2.4,桥接SPI与I^2^C:
      • 4.2.5,总结
    • 4.3,UART与USART接口
      • 4.3.1,UART(通用异步通信收发器/SCI串行通讯接口)
      • 4.3.2,USART(通用同步/异步收发器)
    • 4.4,GPIO与GPIB
      • 4.4.1,GPIO(General Purpose Input Output,通用IO)
      • 4.4.2,GPIB
      • 4.4.3,总结
    • 4.5,本章小结
  • 5,Boot Loader
    • 5.1,示例:一个Boot Loader的运行过程
      • 5.1.1,单阶段运行模式
      • 5.1.2,多阶段模式
    • 5.2,常见Boot Loader比较 ★ ★ ★
  • 6,板级支持包BSP
    • 6.1,概要
    • 6.2,BSP基本功能
    • 6.3,BSP开发
    • 6.4,总结
  • 7,嵌入式虚拟化技术
    • 7.1,嵌入式虚拟化技术的约束与限制
    • 7.2,示例:Wind River虚拟机

工作知识学习及总结系列文档
本文主要记录学习嵌入式软硬件编程过程中的一些硬件基础知识


嵌入式微控制器MCU ,又称单片机,一般以某微处理器内核为核心,芯片集成多种部件,功能和外设,如8051系列。其最大的特点是单片化,体积大大减小,功耗和成本下降,可靠性提高,计算能力较为有限,主要用于控制等领域,因此成为微控制器。代表的有51系列,STM32,多种RAM芯片等。接下来将从几个方面来详细介绍MCU

1,存储器

1.1 概念

存储系统是计算装置中用于存放数据和程序的记忆性子系统,用以满足计算装置不同类型数据的临时/永久存储需要。
⚫ 分级的存储体系
 不同类型数据存储、访问要求具有差异,数据访问在时间、空间和顺序上的局部性原理
 通用计算机采用了Cache、主存储器(RAM,内存)、外部存储器组成的三级存储体系;
 多级存储体系的计算装置主要围绕主存储器来组织和运行;
 对于体积、重量、功耗、可靠性以及成本等方面有特定要求的各类嵌入式系统而言,存储子系统的设计具有定制和多元的特征与要求。

两种典型存储体系:
1,以CPU为核心的、片内和片外存储资源相融合的存储体系;
2,与通用计算机相似的存储体系;

其中,嵌入式系统存储体系如下图所示:

1.2,存储器结构模型

⚫ “存储体 + I/O接口电路 + 信号线”的基本结构;
 存储体:用于存储的介质;
 I/O接口电路:用于访问存储体;
 信号线(对外构成访问接口):地址线、数据线、控制线(读、写)、片选线、辅助线(时钟、复位等)

1.3,存储器性能指标

⚫ 只读性
 若存储器中写入数据后,只能被读出,但不能用通常的办法重写或改写,这种存储器为只读存储器,即ROM;
 若存储器在写入数据后,既可对它进行读出,又可再对它写入,为可读/写存储器, 或随机访问存储器。

⚫ 易失性
 若存储器在断电之后,仍能保存其中的内容,则称为非易失性存储器;否则,为易失性存储器;
 只读存储器(ROM)是非易失性的,随机存储器(RAM)是易失性的。

⚫ 位容量
 存储能力;
 不同地址线、数据线宽度的存储器,位容量可能相同。

⚫ 速度、功耗、价格等

1.4,嵌入式存储器类型

嵌入式系统多使用半导体类型的存储器;

1.4.1,只读存储器

可分为掩模ROM,PROM, EPROM(可擦除可编程ROM),EEPROM(电子可擦除可编程存储器)

按照向其中写入新数据的方法及其可以重写的次数来划分。反映了ROM从掩膜到一次性可编程,再到可擦写可编程的演化过程。

1.4.2,随机存储器

随机存储器可被随机读/写,与磁盘不同,允许以任意次序读/写;
可分为两大类,主要差别为所存储数据的寿命
 SRAM:只要芯片有电,内容存在,掉电后内容丢失;
 DRAM:数据寿命短,通常不超过0.25s,即使连续供电;

特点比较
 SRAM比DRAM快;
 工作时,SRAM比DRAM耗电多;
 DRAM的存储密度大于SRAM,在一个芯片上可以置放更多的DRAM;
 DRAM需要周期性刷新,需要使用专用的DRAM控制器(嵌入式处理器通常集成了DRAM控制器)。

1.4.3,双端口RAM

双端口RAM(Dual-Port RAM, DPRAM)为 一套存储体与两套独立访问端口构成的存储器;其容量可以由几十Kb到几十Mb等,额定电压一般为1.8V、3.2V、5V或5.5V;两个主设备(如嵌入式处理器)可以分别接在两个不同的端口上,快速通信,且编程需要考虑DPRAM存储器的管理问题,同步与互斥。


按照双端口操作特性可以分为:
 伪双端口RAM:一个为只读端口,另一个为只写端口;
 双端口RAM:两个端口均可进行读和写。

按照存储体类型可以分为:
 SRAM型、DRAM型和SDRAM型。

双端口RAM逻辑如下图所示:


双端口RAM的典型工作方式可分为:中断方式,忙逻辑方式和信号量方式。

中断方式如下图所示:

忙逻辑方式:
一个处理器想访问双端口RAM时,先去看忙逻辑busy线,如果为低电平,则置为高电平。之后其余处理器想访问时,检测到高电平则不能访问。

信号量:

左侧访问时,先获取信号量,之后就占用信号量。右侧访问时,发现信号量被占用,则访问被阻塞。

访问时序举例:

1.4.4,混合存储器

既具有RAM快速读写访问的特性,又具有非易失性,介于RAM和ROM之间;
特点
 通电和RAM一样,“快速”访问;
 断电后和ROM一样,保持内容;
 速度提升
 容量不断增大
 价格持续降低

用途
 存储系统数据、配置数据等;
 要求高速度的应用

1.4.4.1 Flash ★ ★ ★ ★ ★

 又称为单电压的EEPROM,在其安装的电路板上直接擦除和重新编程,且Flash设备一次能擦除一个扇区,而不是逐个字节擦除;
 结合了目前为止所有存储器件的优点,具有高密度、低价格、非易失性、快速(读取,而不是写入)以及电可重编程等特点;
 一块1M位的闪速存储芯片的擦除、重写时间小于5μs,比EEPROM快得多,具备RAM的功能以及高速编程的特点
 允许某些块被保护,将引导代码放进保护块而允许更新设备上其他的存储器块,被称为引导块闪存

与传统存储器相比,Flash的主要优势
 非易失:不像SRAM(静态随机存储器),Flash无须后备电源来保证数据不变;
 易更新:相对于EPROM的紫外线擦除工艺,Flash的电擦除功能为开发者节省了时间,也为用户更新存储器内容提供了可能。而与EEPROM相比较,Flash的成本更低,密度和可靠性更高;
 一般可重复写1~10万次,甚至上百万次(反复向浮栅注入电荷和抽离电荷导致物理特性变化,如下图所示)
 数据保持期通常可超过十年(但这受编程次数的影响)。

主要分为两类:NOR和NAND型 ,区别是:
 内部存储体的架构;
 接口不同:NOR是属于SRAM型接口,NAND属于I/O接口;
 随机读取速度不同:NOR可以取代E2PROM,多用于BOOT ROM; NAND由于其高密度,多用于大量数据的存储。

NOR Flash于上世纪八十年代末问世,是Intel设计的一个主要的Flash规格标准。NOR Flash以EEPROM为基础,存储单元由NMOS构成,可随机读取任意单元内容;其适合程序代码的并行读写,常用于BIOS存储器和微控制器内部存储器等

NAND Flash是使用复杂I/O接口来串行存取数据的存储器件,共用一套总线作为地址总线和数据总线。NAND Flash将几个N-MOS单元用同一根线连接,可以按顺序读取存储单元内容; 适合数据或文件的串行读写存储;成批量访问

Flash写操作特点
 每一个存储位置必须在重写操作之前被擦除,否则写结果将可能是新、旧值的某个逻辑组合,产生错误;
 一次擦除一个扇区块,不可能只擦除单个字节;扇区大小随具体器件变化,通常是KB量级;
 擦除和写入数据的过程取决于器件特性,较复杂,设计Flash驱动程序能提供较好支持。

1.4.4.2 FRAM 铁电存储器

铁电存储器的核心技术是铁电晶体材料—锆钛酸铅(PZT)主要利用了铁电晶体材料的铁电性和铁电效应。

 拥有随机存取存储器和非易失性存储产品的特性;
 铁电效应:是指在铁电晶体上施加一定电场时,晶体中心原子在电场的作用下运动并达到一种位置上的稳定状态,这个位置就用来表示“0”和“1”。
 电场消失后,中心原子会一直保持在原来的位置,并在常温、没有电场情况下保持这一状态达一百年以上。
 整个物理过程中没有任何原子碰撞,FRAM拥有高速读写、超低功耗和无限次写入等超级特性;
 使工程师有更大的发挥空间去选择实时记录最新的配置参数,免去是否能在掉电时及时写入的顾虑。

1.4.4.3 系统配置数据存储器

 系统配置数据(常数)描述了系统的参数,这些参数包括软件参数和硬件参数,就像个人计算机中存储器的硬盘参数一样。
要求:
非易失性:掉电时数据不丢失
快速访问:应该像RAM一样方便快速。

方案
Flash、EEPROM写入不方便或效率不高;
NVRAM、FRAM读写方便,但是成本高;
外部电池备份等。

BBSRAM
在 早 期 技 术 发 展 过 程 中 , NVRAM 主 要 是 指 有 后 备 电 池 供 电 的 SRAM(BBSRAM),其既保持了RAM的随机、快速访问特性,同时通过后备电源解决了系统掉电后的SRAM供电问题。

nvSRAM
是一种同时采用了“SRAM+非易失性存储元E2PROM” 的复合式新型NVRAM;
一个非易失性E2PROM存储元对应一个SRAM存储元;
E2PROM通常采用基于氮化硅的存储技术SONOS,用厚度更薄的氮化硅层来代替之前的多晶硅浮栅层➔该E2PROM的擦写次数约为50万次,系统掉电后数据可保持20年左右;
SRAM模式下,该存储器就是一个普通的静态RAM;非易失模式下,数据并行地从SRAM存储到E2PROM或者从E2PROM恢复到SRAM。

1.5,总结

2,最小系统,电源与外围电路

嵌入式系统硬件是以处理器与存储器为核心,以电子线路连接所有电子元件和接口所形成的器件网络。

◆最小系统是指一个仅具有进入正确执行模式所需最少资源的系统。从硬件角度,最小嵌入式系统硬件包括了嵌入式处理器、片上/片外存储器以及电源供电、复 位、时钟等外围辅助电路。
◆通过设计和验证最小系统硬件,可以掌握以特定处理器为核心的嵌入式硬件设计方法,并为进一步的功能、接口、总线扩展奠定基础 。

最小系统的外围电路包括:芯片、器件正常工作所需要的电路以及供电电路、复位电路、时钟电路等

2.1,外围电路1:供电电路

供电电路计算硬件的基本组成,为系统提供一种或多种负载能力的电压输出, 其稳定性对整个系统硬件的安全、可靠运行具有重要影响

嵌入式系统中大都采用直流稳压电源电路;

⚫ 供电电路设计
 包括下图中的全部,或者后端部分;
 可采用元件搭建,也可以直接采用电源器件。

2.2,外围电路2:时钟电路

⚫ 时钟节拍是处理器、存储器、I/O等正常工作的必备条件;
⚫ 时钟电路是计算装置中用于产生并发出原始“嘀嗒”节拍信号的、必不可少的信号源电路,常常被视为计算装置的心脏

⚫ 背景知识
信号源:振荡电路原理,包括正弦波振荡电路RC、LC正弦波振荡电路


2.2.1,构建时钟电路的方式一

石英晶体谐振器 (无源晶振、晶振,常记为Xtal)
 基于压电效应特性并采用特定切割方式和晶片尺寸,在石英晶片加上电极和外壳封装所制造的不同频率谐振元件;
 可用于稳定频率和选择频率。

• 石英晶体是具有两个引脚的无极性器件;
• 使用时,为谐振器连接特定激励电平的外部电路,接入一定负载电容(约30pF)以快速地起振和稳定频率。


2.2.2,构建时钟电路的方式二

石英晶体振荡器(晶体振荡器、有源晶振)
采用石英谐振器作为选频网络,经扩展放大电路、整形电路等可进一步设计、形成完整的反馈振荡器;
 一般具有4个引脚:电源、接地、振荡信号输出以及空引脚或控制引脚;
 接通电源后就可直接输出频率稳定度和精确度都非常高的振荡信号;
 据其工作特性,可将石英晶体振荡器分为普通(SPXO)、温度补偿型(TCXO)、恒温型(OCXO)以及电压控制型(VCXO)等。

2.2.3,多时钟管理

1, 多时钟电路
 不同类型的总线、接口、外部组件以及功耗管理等可能需要不同的时钟;
 嵌入式系统内的时钟源、时钟类型、时钟频率日益多样化,其功能也从基本的工作时钟向复位控制、电源管理、低功耗模式控制等方面不断延伸;
 为了保证所有时钟同相以尽量避免产生干扰,无需为每个时钟输入提供单独的时钟电路,例如:同相时钟 或者 锁相环(PLL)、分频器(FreqDiv)

例子:

2,处理器内部时钟树
 在基本时钟基础上,通过扩展锁相环、分频器等电路就可以将几个输入时钟转换为多种类型和用途的时钟;
 提供了可由软件操作的、用于配置时钟的一组寄存器。

2.3,延伸:电源管理与低功耗设计

 功耗与电路中器件的工作状态相关
1,电压越高功耗越大
2, 频率越高功耗越大
3, 工作态器件的数量越多功耗越大
 通过对电源电压的动态调节和管理,可进一步使电子器件运行于不同的工作模式;
1, 开启或关闭某些组件的电源
2,全速运行或睡眠、待机等低功耗状态
 (智能)电源控制和管理逻辑单元,可以为片内逻辑提供多种电源供给方案和运行模式。

多种供电电源是嵌入式处理器的基本特征之一,用以满足处理器内处理器核、I/O接口、时钟电路等数字逻辑以ADC/DAC、传感器、锁相环等模拟组件的供电要求。

低功耗是现代嵌入式系统设计中需要考虑的重要方面

3,复位电路与看门狗逻辑

⚫ 用途:在系统电源建立过程中,为CPU或某些接口电路提供一个几十毫秒至数百毫秒的复位脉冲(高或低),利用这段时间(大于芯片最小复位时间要求),系统振荡器启动并稳定下来,CPU复位内部寄存器及指针,为程序运行做准备;
⚫ 复位电路的形式
 阻容复位电路
 手动复位
 watchdog复位
 专用复位电路
 内部复位
 软件复位

3.1.,上电复位(POR)

上电复位是集成电路芯片的重要组成部分;

⚫ 功能
 当电源电压达到可以正常工作的阈值电压时,集成电路内部的状态机便开始初始化器件,使整个芯片在上电后的一段时间内进入已知状态;
 在完成初始化之前忽略除复位引脚(如有)之外的任何外部信号;

3.2,阻容式复位电路

⚫ 利用电容电压不能突变而是按指数规律上升、下降的特性,配合反相器的输入电平翻转门限产生所需复位脉冲;

复位脉冲宽度取决于电容、电阻的参数;
复位脉冲宽度与电源电压、复位电平门限电压、电容、电阻的值密切相关,约为0.7R1C1~ R1C1毫秒。

例子:
8051 MCU要求复位信号长度至少为两个机器周期,即24个时钟周期以上,那么在RST(或RST)端出现复位信号后的第二个机器周期,片内复位电路检测复位信号并进行内部复位,
直至该信号恢复。

 以8051 MCU为例,假设采用6MHz振荡器且电源建立时间不超过10ms、振荡器建立时间不超过30ms时,那么复位脉冲宽度应不小于tRST=(10ms+30ms+2×2μs),此时理论上要求的R1C1值不小于(tRST/0.7)=57.15ms。

优点:简单、成本低,大部分时间正常工作
缺点:在电源瞬时跌落和恢复过程中,电容充放电的指数特性导致电容未完成放电时便又开始充电,从而无法产生合格宽度的复位脉冲。
改进

二极管电阻低,通过二极管放电很迅速。

3.3,手动复位

⚫通常配合自动复位电路工作,开关接在电容两端
⚫ 手动复位开关产生的复位信号接在复位电路上,而不直接接在处理器复位信号输入端上,可以消除开关抖动;
⚫ 抖动产生的原因:普遍意义上包括了人为抖动、接触不良、电磁干扰等

3.4,专用复位电路

⚫ 是一种专用的集成电路,输出复位信号;
⚫ 可支持多种复位信号;
⚫ 所产生的复位信号质量较高;

例子:


如图所示,尽管掉电信号A点是时间不等的毛刺,但是经过专用复位电路后,E点产生的复位信号是稳定的,有一个完整的224ms的复位信号(尽管在复位信号前有毛刺,掉电时间长为大毛刺,掉电时间短为小毛刺,但是毛刺后都有稳定的复位信号,这一点很重要!)

3.5,看门狗复位电路(WatchDog,WD)

当计算装置发生死机等运行故障时,我们可以设计一个状态监控电路,监测控制运行状态来解决这一问题。

在嵌入式系统领域,这种具有系统逻辑监控功能和故障时自动复位能力的电路称之为 看门狗复位电路。具体的,是可以监控嵌入式系统运行状态,并在故障时向RST(#RST)端输出复位信号的专用电路。

看门狗计时器WDT一直在计数,当WDI有信号输入时,定时器清零,如果长时间没有信号输入,定时器会溢出,溢出则产生一个输出信号CLR,复位电路。左侧称为喂狗。

1,如何使用看门狗电路?
 软硬件配合;
 嵌入式系统程序,正常逻辑,每个确定的时间必然运行其中的某部分代码,完成看门狗复位操作;
 如果在一个特定最大的时间内没有运行该类代码,则认为系统故障,看门狗电路产生复位信号,使处理器强制复位,系统从复位向量处重新运行。

2,提高可靠性
 环境恶劣时,嵌入式处理器运行过程中可能出现死机和跑飞的情况,此时需要使用特定电路使处理器强制复位;
 实现嵌入式系统的自动状态监测和恢复,提高故障恢复能力和可靠性。

例子:

看门狗复位电路,通过处理器的通用I/O引脚GPIO,向处
理器监控电路发出复位脉冲,使监控集成电路避免溢出。否则,WDO输出低电平,MR产生复位信号,RST端使得系统复位。当SW1手动开关时,MR也会产生复位信号。

此外,

3.6,内部复位

⚫ 工作原理
 利用watchdog复位方式,是看门狗复位的延申;
 上电时,程序没有复位watchdog,watchdog timer溢出,完成复位;
 微控制器不需要reset引脚;

⚫ 例:philips 的P87LPC76x系列
 配置成内部复位的时候,reset引脚可以作为普通的I/O使用,节省了引脚;

3.7,软件复位

⚫ 方法
 软件复位的方法是通过软件设置一个特殊功能寄存器的位完成控制器的复位,复位结果如同硬件复位一样;

⚫ 注意
 软件复位与程序从复位向量处开始运行不同;其中,软件复位指的是使处理器恢复初始状态,程序从头开始重新执行。
 从复位向量处开始运行程序,处理器/控制器的状态不会回到复位状态,只是从start处开始运行程序。(处理器在当前状态下,程序重新执行)

4,I/O接口与总线

I/O子系统模型
➢ 总线连接
➢ 通过寄存器组实现访问

4.1,SPI串行总线

SPI(Serial Peripheral Interface,串行外设接口
Motorola,处理器与外设间的简单串行通信接口;
➢ 全双工、一主多从式通信;
➢ 两条数据线用于收发数据,时钟线用于同步;
➢ 通信速度可达每秒数十Mb。

SPI是近距离连接嵌入式处理器与外设的主从式、全双工串行总线;

 应用
➢ 连接嵌入式处理器与Flash、SD卡、LCD、ADC、传感器、WiFi、蓝牙模块等I/O设备。

左边主设备,右边从设备
MISO:指的是如果这个设备是主设备MASTER,那么该口为输入,为从设备的话,该口为输出。

4.1.1,SPI基本功能

➢ 用端口中的4个引脚实现数据传送
⚫ 串行时钟SPSCK/PD3
⚫ 主接收从发送 MISO/PD1
⚫ 主发送从接收 MOSI/PD2
⚫ 低有效从机片选SS*/PD0;
⚫ 不用 SPI功能时,这些引脚被配置成通用I/O;

➢ 主机模式中:发出时钟➔写数据到数据寄存器➔移位寄存器➔移位完成后状态位自动置位;
➢ 从机模式中:等待SS*拉低,通过SPSCK与主机同步;

4.1.2,SPI的通信原理

➢ 通过移位或者循环移位完成主从设备间的通信;

 数据流动
➢ MOSI:主发送从接收 端口
➢ MISO:主接收从发送 端口


通过移位寄存器,主机和从机交换数据。

上图中上跳沿发送或者接收数据,下跳沿可以采样数据。

 仅主发送从接收时,也需要提供同样的时钟信号,消耗同样的时间节拍。

4.1.3,SPI连接方式

4.1.4,SPI接口操作

➢ 基本规范定义了映射到存储模块的一组8位寄存器
⚫ SPI控制寄存器SPICR1和SPICR2
⚫可读写的波特率寄存器SPIBR
⚫只读的SPI状态寄存器SPISR
⚫可读写的数据寄存器SPIDR

SPI控制寄存器SPCR1
➢ 只能在复位初始化SPI时写一次
➢ SPIE是中断允许位,“1”为使能,“0”为禁止;
➢ SPE是SPI使能位,“1”为使能,“0”为禁止,在完成SPI配置之前该位应置“0”;
➢ SPTIE是SPI传输中断允许位,“1”表示允许SPTE中断,“0”表示禁止;
➢ MSTR为SPI主从模式设置位,“1”为主设备,“0”为从设备;
➢ CPOL是时钟极性位,“0”为正脉冲,“1”为负脉冲;
➢ CPHA为时钟相位,是数据采样和有效的时刻,“0”表示第一个跳沿采样、第二个跳沿输出, “1”表示第一个跳沿输出、第二个跳沿采样;
➢ SSOE是选择从设备的输出使能位;
➢ LSBFE用以指定数据位的传输顺序,“1”为低位优先,“0”为高位优先。



其余寄存器详见课本。

4.1.5,软件设计

➢ 采用标准SPI控制器
⚫ 通常都提供了相应的驱动和API,如SPIRead(Addr, *Value)、SPIWrite(Addr,Value)等→无需关注上述SPI协议的具体细节;

➢ 也可采用处理器自带的GPIO来模拟SPI主设备的接口

参考程序:

/*GPIO_SPI发送函数示例*/
int GPIO_SPI_Send ( unsigned char Data) {unsigned char temdata;
int count = 0;
temdata= Data;
if (1 == (1 & ( temdata >>(7-count))) ) {//输出命令字高位
SET GPIO_DO;
}else
CLR GPIO_DO;
SET GPIO_SCKL; //第一个时钟拉高,上跳沿,通知从设备采样
while (count < 8) {count++;
if (1 == (1 & (temdata >>(7-count))) ) { //输出命令字(7-count)位
SET GPIO_DO;
}else
CLR GPIO_DO;
CLR GPIO_SCKL; //时钟拉低,下跳沿,主设备输出
Nop; //空指令延时
SET GPIO_SCKL; //时钟拉高,上跳沿,通知从设备采样
}
CLR GPIO_SCKL; //时钟拉低
}

4.2,I2C串行总线

4.2.1,概念

I2C(Inter-Integrated Circuit Bus,集成电路总线)

 Philips公司研制,主从式、可寻址、2线制近距离串行通信总线,连接微控制器和外围器件的主从式串行通信总线。

 两条双向线:Serial Data Line (SDA) 和Serial Clock (SCL);均为OD门
➢ SCL:上升沿、下降沿传输数据;(边沿触发)
➢ SDA:双向数据线。

 通信速度
➢ 100kbps(普通模式)、400kbps(快速模式)、1kbps(增强快速模式)、3.4kbps(高速模式);
➢ 单工传输的超高速模式(UFm),其位速率可达5Mbps;

 一般情况下,通信距离为几米到十几米;低传输速率时,通信距离可达数十米乃至数百米。

多主的主从式通信总线,2线制
➢ 所有外围器件都具有一个7位或10位的“从器件专用地址码”;
➢ 主控器件通过地址码建立多机通信的机制,无需片选线(SPI需要片选);
基于总线仲裁机制,同一时刻只能有一个主端

SDA、SCL为漏极开路结构(OD)
→必须接上拉电阻才能正常工作,阻值通常可为约1.8kΩ, 4.7kΩ和10kΩ 。(漏极开路,输出有时候为浮动状态)
电阻越大,总线速率越慢

基于I2C总线的器件连接逻辑 示例

4.2.2,基本通信过程

➢ 主机发出开始信号(S);
➢ 主机接着送出1字节的从机地址信息,其中最低位为读写控制码(1为读、0为 写),高7位为从机器件地址代码;
➢ 从机发出应答信号;
➢ 主机开始发送数据,每发完一字节后,从机发应答信号给主机;
➢ 主机发出停止信号。

4.2.3,I2C串行总线仲裁原理

 多个设备同时发送数据时,总线上会产生冲突!
哪个设备先发现自己的数据和总线不一致,则先退出总线竞争。如下图中,设备1 先退出。

注意
➢ 完成读/写操作或总线收发异常时,主设备发送重启动信号,重新设定从设备地址和读/写信号,继续如上所述的应答式数据通信过程;
➢ 当SCL被某些未知因素或事件限定在低电平之后,需要触发硬件复位信号;
➢ 若I2C设备没有硬件复位输入,那么就需要关闭总线电源进行上电复位。

4.2.4,桥接SPI与I2C:

SPI与I2C属于不同主线,不可直接互连。所以可以通过桥接设备连接,桥接设备左边为SPI的带时钟的同步的协议和电气特性,右边为 I2C 的电气特性和协议,中间的桥设备进行逻辑转换。

4.2.5,总结

I2C 是近距离连接嵌入式处理器与外设的可寻址、主从式串行总线;具有上拉电阻设计,总线仲裁机制;

4.3,UART与USART接口

4.3.1,UART(通用异步通信收发器/SCI串行通讯接口)

用于异步通信,可实现全双工收发;
 两个器件无需共享同一个时钟信号就能进行通信;
 数据收发单位是帧;
 工作模式:中断方式和DMA工作方式。

数据通信设备和终端设备连接如右边的图所示,除了RX和TX,还需要连接信号线

 UART重要的研究对象为一组寄存器

UART: 收发双方要设定相同的数据格式 ★
根据不同要求来设定数据位长度,如7位、8位的ASCII码以及9位的多站通信数据。在多站/多机通信系统中,8位数据位之后的奇偶校验位被用于区分所传输的是地址还是数据,“1”表示从机地址,“0”为数据。

UART: 收发双方要设定相同的数据速率 ★
 接收方必须设置与发送方一致的波特率→匹配的传输速度。

在第9个时钟信号的上跳沿对Rx上的信号进行采样。也可以在第8、9、10个时钟信号的上跳沿进行采样,根据三个采样数据中的多数状态来判断逻辑高低,这是一种更为可靠、但开销较大的方式。

 UART与EIA RS-232、RS-422、RS-485
➢ UART规范主要定义了TTL电平的可配置通信数据格式以及通信速率、异步采样机制;
➢ 根据不同类型和距离的外设连接需求,还可以对物理层进行定制和扩展,典型的如RS-232、RS-422、RS-485等。
RS-232是一种由美国电子工业联盟(EIA)发布的单端传输的串行数据通信接口标准,RS是推荐标准的英文缩写。

RS-232优点:可以简单地实现与外部设备的串行双工通信;缺点非常明显:由于采用单端通信模式,接口信号电平高、线路抗干扰能力差,只适合于近距离、较低速度的数据通信。

EIA/TIA-422是EIA/TIA的“平衡电压数字接口电路的电气特性”标准
 EIA/TIA-422串行通信兼容UART的数据帧标准;
 定义了差分信号电气特性;
 支持一主多从的多站通信模式。

补充概念:差分信号与差分传输
差分传输是一种信号传输的技术,在两根线上都传输同一信号;这两个信号的振幅相同,相位相反;也称平衡传输方式
在这两根线上的传输的信号就是差分信号
信号接收端比较这两个电压的差值来判断发送端发送的是逻辑0还是逻辑1;
设计电路时,差分走线必须是等长、等宽、紧密靠近且在同一层面的两根线。


正负信号相减可以消去噪声信号。

上图中Rt即为接收端终端电阻。加终端电阻后可以吸收掉信号多余的能量,避免在线路上反射造成噪声。信号特性比没加前好很多,由下图可以看出。

RS-485是“用于平衡数字多点系统的发送器、接收器电气特性”标准
 RS-485定义了物理层电气信号特性,与RS-422的逻辑表示形式相似;
 RS-485的电气信号特性涵盖了RS-422,因此RS-485设备可用于大多数RS-422系统中;

不同点
➢ RS-485的信号电压范围更小,线路两端都要接与介质特征阻抗匹配的终端电阻,驱动器能力更强,可以驱动至少32个接收器;
➢ 采用2根差分信号线以AA、BB的方式来连接两个RS-485设备,是半双工通信方式;


4.3.2,USART(通用同步/异步收发器)

 在UART基础上增加了同步机制的、一种可被设置为同步、异步通信模式的全双工串行通信接口;
 同步模式下,发送器时钟引脚SCLK输出与SPI主模式相似的数据传输时钟,相位和极性可通过寄存器来设置。

 USART与UART的区别
➢ 位流同步机制不同:同步与异步
➢ 可支持的协议数量不同
⚫ USART则更为复杂,不但兼容UART,还可以传输多种不同协议的数据,如IrDA、LIN总线、智能卡、Modbus等。
➢ 支持的外设能力有所不同
⚫ USART常用于系统正常运行、高功耗时的串行数据通信;
⚫ 当系统进入休眠等低功耗模式时则采用基于UART的低速通信接口。

4.4,GPIO与GPIB

4.4.1,GPIO(General Purpose Input Output,通用IO)

 嵌入式处理器除采集、传输、处理数据外,还需进行大量开关型外部组件控制,如LED、继电器开关;
→专用I/O可以满足要求,但限制了处理器的功能和使用范围;
→灵活性差,且接口多时芯片引脚增加;
→ 应尽量增强I/O接口的通用性!
 GPIO,区别于其他专用I/O的、可适用多种输入/输出要求的I/O接口;
 允许用户根据不同的功能需求,通过寄存器组,进行I/O功能和特性的动态配置和管理。

 如何学习GPIO
➢ 掌握各个I/O端口的特性及其寄存器组;
➢ 就输入、输出特性而言,GPIO的引脚可以有浮空、上拉输入、下拉输入、模拟输入以及开漏输出、可配置的上拉/下拉推挽输出等模式可供选择;
➢ 接口至少会提供 GPIO控制寄存器 和GPIO数据寄存器 ,控制寄存器用以控制数据寄存器中各位为输入、输出或其他功能状态;
➢ 功能强大的嵌入式处理器一般还会提供 置位/复位寄存器、上拉/下拉电阻配置寄存器以及 锁存寄存器等,使电路设计更为灵活和方便。

GPIO接口示例:
 STM32 L1系列 STM32L162ZD嵌入式处理器
➢ 在AHB系统总线上提供了115个GPIO引脚;
➢ GPIOH对应的PH接口共3位,GPIOA~GPIOG对应的 PA-PG 七个接口都为16位;
➢ 每个GPIO引脚都可以通过软件配置为特定模式,如推挽或开漏输出、使用上拉或下拉的输入、不使用上拉和下拉的输入以及外设复用功能等;
➢ 大多数GPIO引脚共享实现数字、模拟的复用

注意:不同的芯片,不同的GPIO的特性都是有所区别的,都必须了解特定的GPIO再去使用。

 扩展方法
➢ 若处理器提供的GPIO数量不够用,还可以采用TI的TCA6418E(I2C接口,18路GPIO)等器件进行扩展;
➢ 可采用MAX7319~ MAX7329等8端口/16端口IO集成电路器件以及驱动器等对系统电路的IO接口进行扩展;
➢ 不同处理器的GPIO实现和特性存在差异,同一处理器的GPIO特性也可能不同。

4.4.2,GPIB

GPIB(General-Purpose Interface Bus,通用接口总线)
 设备和计算装置间的短程通信总线规范,IEEE-488标准;
➢ 1960年代末期,为了把计算机自动控制技术融入电子测量之中而创建,最初为HP-IB(Hewlett-Packard Interface Bus)规范;

 大多数台式仪器是通过GPIB总线以及GPIB接口与计算机相连;
➢ 一条总线互相连接不超过15台装置,组成一个自动测试系统;
➢ 采用并行比特(位)、串行字节(位组)双向异步数据传输方式;
➢ 总线上传输的消息采用负逻辑:低电平(≤+0.8V)为逻辑“1”,高电平(≥+2.0V)为逻辑“0”;
➢ 地址容量
单字节地址:31个发送地址,31个接收地址;
双字节地址:961个发送地址,961个接收地址。

 部分GPIB程控设备

4.4.3,总结

 GPIO的优势在于灵活的可配置性,提高了芯片引脚的通用性!

4.5,本章小结

5,Boot Loader

 驻留在嵌入式处理器的片上ROM或板上Flash存储区保留分区中的、与具体处理器和硬件特性密切相关的一段可启动代码;
 应具有最小功能要求,即:至少驱动一个外部的数据通信接口,且应该提供至少一种读、写、擦除Flash的方法;
 不含应用功能,但具备与外界的通信能力,可以支持UART、I2C、SPI、Ethernet或CAN等通信接口和协议;
 应非常清楚系统内存的映射模型。

→由特定I/O驱动、通信协议或协议栈、文件系统、用户交互接口、内存映射配置表以及操作系统引导组件等构成。

5.1,示例:一个Boot Loader的运行过程

5.1.1,单阶段运行模式

在对Boot Loader寻址或将其搬移到 SRAM 特 定 位 置 之 后 , BootLoader将完成上述所有功能,并引导操作系统或用户应用程序执行;
鉴于SRAM的存储容量非常有限,单阶段Boot Loader的代码量通常较小,其功能也就比较简单。

启动代码:初始化硬件+装载复杂软件+更好驱动硬件+装载更复杂软件

5.1.2,多阶段模式

第一阶段代码,为下一段启动代码准备环境,并加载、调度该代码执行;
第二阶段代码,为下一段代码准备环境并加载、调度执行,以此类推,直至操作系统或用户程序被启动。
常见“Stage1+Stage2”模式。

启动过程

  1. 预启动:通常是指片上ROM的执行阶段,为Boot Loader运行做准备;
  2. 第一启动阶段(Stage1):Boot Loader执行基本的初始化代码,初始化堆栈、准备RAM空间并将下一阶段代码拷贝到RAM特定位置后,跳转至下一阶段的代码入口点执行;
  3. 第二启动阶段(Stage2):Stage2的代码在内存中运行,由于不再有内存容量限制,因而允许设计更为复杂的功能。

5.2,常见Boot Loader比较 ★ ★ ★

6,板级支持包BSP

6.1,概要

BSP为一个系统级的功能软件包
系统上电时对硬件进行初始化;
为操作系统提供访问硬件所需的驱动程序、中断服务程序;
集成的硬件相关/无关的操作系统所需的引导模块。

6.2,BSP基本功能

a. Boot Monitor,描述可用的系统启动资源及方法,如Ethernet、UART、SCSI、ROM等组件;
b. 提供用于网络启动的相关支持,如BOOTP、Proxy-ARP等;
c. 默认的RAM大小,可配置的内存映射参数;
d. Cache功能支持;
e. Flash和ROM存储器配置,包括ROM的创建和安装方式,Flash是否可以固化、如何固化;
f. 系统时钟与定时器支持,描述CPU速度和定时器的比例关系;
g. 设备支持,芯片驱动、板级设备驱动及其可支持的其他选项;
h. 内存映射配置,提供详细的局部总线以及所有扩展总线的内存映射,允许通过配置文件(如VxWorks中为“config.h”)来配置地址;
i. 共享内存机制,设定主总线及所提供的共享内存支持类型、邮箱类型等;
j. 可配置的中断参数,提供一个基于优先级和/或向量号的中断、异常列表,具有BSP中使用的中断及其例程;
k. 串口支持,设定所有串行接口的默认参数;
l. SCSI接口配置,包括类型(SCSI-1、SCSI-2)及参数;
m. Ethernet支持,为每一个以太网接口设定相应的参数,包括获取IP地址;
n. 编译规则,配置哪些预编译对象将随该BSP发布,设定待生成系统内核的类型;
o. 配置目标机、服务器通信参数,包括名称以及支持的调试代理等。

6.3,BSP开发

从头编写一个BSP是非常复杂的工作,具有挑战性!

 BSP的开发
先要非常熟悉具体操作系统BSP的设计规范,即该BSP中文件、内容的组织形式和格式;
要很好地掌握目标硬件的体系和参数;
开发的第一步是用汇编语言编写将硬件初始化到确定状态;
之后,采用基于高级语言的代码为操作系统运行初始化环境。

嵌入式操作系统、嵌入式处理器等厂商通常会提供BSP资源库;

6.4,总结

7,嵌入式虚拟化技术

 高性能嵌入式系统可支持
 可靠性(故障传播)、安全性(访问权限)需求
 “零型”虚拟机:轻量的虚拟机

7.1,嵌入式虚拟化技术的约束与限制

a. 体积约束: 嵌入式虚拟机监控程序应尽可能地小,通常II型虚拟机监控程序可达数千兆字节,I型虚拟机监控程序约数百兆字节。
b. 效率约束: 虚拟机监控程序的运行应不过多地消耗嵌入式系统的资源,应具有极高的内存使用率,以及很小的规模。
c. 安全约束: 虚拟机监控程序自身应具有极高的安全性,并能为上层虚拟机和应用提供安全性支持。
d. 通信约束: 为多个虚拟机上的应用提供具有不同权限的通信机制,实现多个客户操作系统及用户程序之间的安全通信。
e. 隔离约束: 保证不同虚拟机的软件在隔离的环境中共存,软件之间相互独立,互不影响。
f. 实时性约束: 对于部分应用,虚拟机监控程序必须具有支持实时任务运行的资源管理和调度功能。

7.2,示例:Wind River虚拟机


注:以上内容全为总结慕课而来,仅用于个人学习总结。慕课链接为: 嵌入式系统—张凯龙. 如有侵权,请联系删除。

嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>相关推荐

  1. Linux设备驱动开发详解【二】_设备驱动相关硬件基础知识

    本文简介 本文讲解底层驱动工程师必备的硬件基础,给出了嵌入式系统硬件原理及分析方法的全景视图.         2.1 节讲解微控制器.微处理器.数字信号处理器以及应用于特定领域的处理器各自的特点. ...

  2. 计算机硬件基础知识微盘,第1章 电脑硬件基础知识.pdf

    第1章 电脑硬件基础知识 企业级的 DIY与个人用户有所不同:它要求专业人员对硬件的了解更多,在 DIY过程中, 应该知晓每一种硬件的技术参数在实际工作中的应用价值:本章重点介绍电脑主机设备的主流 和 ...

  3. 《SAP入门经典(第4版•修订版)》——3.2 SAP硬件基础知识

    本节书摘来自异步社区<SAP入门经典(第4版•修订版)>一书中的第3章,第3.2节,作者:[美]George Anderson著,更多章节内容可以访问云栖社区"异步社区" ...

  4. 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(一)计算机系统构成及硬件基础知识...

    全国计算机技术与软件专业技术资格(水平)考试 软件评测师--考试内容总结       By林雨辰2014.11.08 1.计算机系统构成及硬件基础知识 1.1计算机系统的构成 1.1.1设计电子数字计 ...

  5. 硬件基础知识---如何设计一个三极管放大电路

    硬件基础知识---如何设计一个三极管放大电路 设计步骤 1) 分析设计要求 电压增益可以用于计算电压放大倍数:最大输出电压可以用于设置电源电压 输出功率可以用于计算发射极电流:在选择晶体管时需要注意频 ...

  6. 计算机软件硬件基础知识,计算机软硬件基础知识

    计算机软硬件基础知识 ▲电脑硬件基础知识 ★1.了解电脑的基本组成 一般我们看到的电脑都是由:主机(主要部分).输出设备(显示器).输入设备(键盘和鼠标)三大件组成.而主机是 电脑的主体,在主机箱中有 ...

  7. 计算机硬件和软件的基础知识,计算机软件和硬件基础知识

    计算机软件使人们能够在日常活动中完成所需的工作.对计算机软件的更复杂定义是:软件是使计算机能够执行特定任务的程序,与系统的物理组件相反.系统的物理组件是我在上一篇文章中讨论的内容,即人们可以物理触摸的 ...

  8. 单片机——硬件基础知识

    单片机--硬件基础知识 宗旨:技术的学习是有限的,分享的精神是无限的. 1.单片机内部资源 STC89C52:8KFLASH.512字节RAM.32个IO口.3个定时器.1个UART.8个中断源 (1 ...

  9. 软件评测师-1.计算机系统构成及硬件基础知识

    1.计算机系统构成及硬件基础知识 1.1计算机系统的构成 1.1.1设计电子数字计算机的一些基本思想 设计电子数字计算机的一些基本思想: (1)由运算器.控制器.存储器.输入设备.输出设备5大基本部件 ...

最新文章

  1. 图像拼接c语言,安卓上实现图像拼接(JNI调用NATIVE方法)
  2. 两个异常:a circular reference was detected while serializing及 Maximum length exceeded
  3. python语法基础知识案例_python基础知识理解
  4. SharePoint 删除废弃站点步骤
  5. 图的长宽_新车|官方预告图发布,外观大变样,三菱新欧蓝德明年2月发布
  6. 小程序(仿微信发布说说功能)
  7. 机器学习基础(五十五)—— 核(Kernel Trick)
  8. C++ 进阶——object slicing 与虚函数与dynamic_cast
  9. 微信小程序毕业设计选题
  10. Grafana实现参数查询功能
  11. win7 安装 python3.8.10
  12. 【数据预处理】Pandas缺失的数据处理
  13. ajax asp后台获取不到post数据,asp.net webapi [FromBody]string 获取不到ajax post的数据的解决方法...
  14. 逻辑强化(09)加强支持 知识练习
  15. Shell Bad substitution的解决方法
  16. 404页面该怎么做?
  17. 微信小程序支付,微信支付【小白专用】
  18. c语言输入身高体重 计算体重指数,体重指数的计算公式正确的是
  19. PMAC应用二-基本配置
  20. win7旗舰版64位降32位的方法步骤

热门文章

  1. 上拉电阻,下拉电阻的实现原理
  2. 防火墙单个ip映射多台服务器,使用防火墙构建器管理多个服务器的单个防火墙策略...
  3. java.beans.transient_JavaBeans程序开发
  4. 及时止损真的正确吗?
  5. DNS欺骗原理及工作工程分析
  6. PID控制算法实践应用(一):PID算法的离散化
  7. C#中的ToolStrip控件的使用
  8. [转载]搜索引擎技术介绍
  9. 《推荐系统实践》读书笔记3
  10. php微信获取素材列表,20.6.7 获取素材列表