• 嵌入式总复习

    1 第一讲 概述

    1.1 课程

    这一部分其实没什么重要的,听hld吹牛就完事了,主要看一下知识框架图:

    image-20260110133920632

    在期末回过头来看这个框架,其实我们这一届授课的主要核心在下面的粉色部分,基本上就是把这些东西给讲解完,然后配合嵌入式的四个实验理解其中的内容。

    1.2 概述

    1.2.1 嵌入式系统的概念

    嵌入式系统是一个计算机系统,它是大系统的一个组成部分,可以执行大系统的某些要求。(IEEE定义)

    1.2.2 嵌入式系统的组成

    共性:专用性强,资源定制化,非功能属性约束多,一体化设计,技术途径丰富,知识与技术密集

    1.2.3 领域特征和应用

    1.2.4 当前发展

    1.3 结语

    2 第二讲 嵌入式硬件基础

    2.1 硬件基础

    2.1.1 器件术语

    封装应该具有较强的机械性能,良好的电气性能,散热性能和化学稳定性能。

    2.1.2 封装

    作用:

    衡量芯片封装技术先进与否的指标:封装效率(芯片面积与封装面积之比),越接近1越好。

    此外还有其他一些指标:

    封装的类型:

    1. 扁平式封装PQFP/PFP

    四周均有引脚,大规模集成电路使用这种封装形式。

    优点:操作方便,可靠性高,工艺成熟,价格低廉。

    缺点:芯片边长有限,平行引脚,难以在高频工作(寄生电容)

    1. 双列直插式封装(DIP)

    中小规模集成电路使用,适合在PCB上穿孔焊接,操作方便。封装效率低,体积较大。

    1. 球栅阵列封装(BGA)

    高密度表面装配封装技术,以焊球代替引脚。

    2.1.3 其他器件术语

    2.1.4 电路术语与符号

    接地电压/低电压:0V

    接地引脚:接到一直是低电压的信号。

    高电压/集电极电压:3V 5V 12V

    Vcc标识对集电极的供电;Vdd表示对漏极的供电;Vee表示对发射极的供电;Vpp表示编程电压。

    不同电平的区别:

    信号:信息的物理表示。在时-空域中,以特定载体(光,电,声音等)和特定形式传输信息的能量单元。

    信号浮动与三态门。(这部分比较简单,略过)

    如何解决信号浮动:

    上拉电阻&下拉电阻

    上拉电阻:连接在元件信号引脚和高电压之间的电阻,用于将引脚信号钳位在高电平,或者在驱动能力不足时提供电流。

    下拉电阻:连接在元件信号引脚和低电压之间的电阻,用于将信号钳位在低电平,或者吸收电流。

    负载问题:元件的输出驱动能力有限,输出对应过多元件输入的时候可能导致驱动过载,此时需要增加驱动器电路。

    电容C

    image-20260110143043700

    上图的三种电容,对应普通电容,电解电容,可变电容。

    电容的作用:隔直通交 调谐 滤波 整流 储能 退耦

    退耦电容

    芯片在改变输出端电压时,需要大量的电量改变输出信号,此时芯片的供电电路电压会急剧下降,可能导致芯片停止工作。

    正常情况下,电容充电;当电路需要大量电量时,电容放电,因此可以将退耦电容连接在近供电端信号输出引脚

    旁路电容

    主要将输入信号中的高频噪声作为滤除对象。

    一张图描述两者功能:

    image-20260110144801237

    晶体管

    固体半导体制成的器件,具有检波,整流,放大,开关,稳压,信号调值等多种功能。

    二极管

    有两个极,一个PN结:

    image-20260110145000165

    三极管(双极型晶体管)

    三个极分别为N型与P型组成发射极Emitter,基极Base和集电极Collector,空穴和电子两种极性的载流子都参与导电。

    image-20260110145405419

    箭头方向为电流流动的方向

    NPN型晶体管:基极为低电平时,基极与发射极之间无电流,此时三极管截断;基极为高电平时,基极与发射极之间存在微小电流,此时三极管导通,集电极信号可通过三极管到达发射极。

    PNP型晶体管:基极为低电平时,发射极与基极之间有电流,此时三极管导通;基极为高电平时,发射极与基极之间无电流,此时三极管截断。

    三极管工作的三种状态:

    集电极开路(OC,也叫开集)

    image-20260110150204775

    实际就是一个NPN三极管,当内部输入为低电平时,三极管导通,输出接地;当内部输入为高电平时,三极管截止,此时输出处于悬空状态。

    现在已经学完I2C通信了,应该对开集和开漏有更深刻的理解。

    上课讲的例子:

    image-20260110150419867

    当输入为低电平,下面的三极管截止,上面的三极管导通,此时输出接地,为低电平;当输入为高电平,下面的三极管导通,此时+5V接地,所以上面的三极管输入为低电平,因此截止,输出为悬空状态。

    场效应管

    这部分内容强烈推荐视频:https://www.bilibili.com/video/BV1Y3t4etEtT

    传统三极管存在电流,能耗较高,且体积较大,无法集成到高密度芯片中,因此出现了场效应管。场效应管利用电场效应控制,属于电压控制的半导体元件。(刚才的三极管属于电流控制的半导体元件)

    场效应管分为两种:结型场效应管(JFET)和金属-氧化物半导体场效应管(MOS-FET)

    JFET

    image-20260110152527186

    对于N沟道的JFET,当栅极施加负电压时,PN结的截止区域扩大,使得N沟道被截止,三极管不导通;当栅极不施加负电压时,由于失去了反向高电压,绝缘区域不断消失,此时N沟道正常导通,三极管导通。

    对于P沟道的JFET,当栅极施加正电压时,PN结截止区域扩大,使得P沟道被截止,三极管不导通;当不向栅极施加电压时,绝缘区域消失,此时P沟道正常导通,三极管导通。

    JFET可以做如下类比:电路是一个水管,JFET就是一只手,当手松开时,水管正常流水,用手将水管捏紧后,水管就被堵住了。这个捏紧的过程就是施加电压的过程。常态下不论N型还是P型都是导通的,当施加电压(N沟道施加负电压,P沟道施加正电压)后,JFET的沟道被捏紧,使得电流无法通过。

    为什么N沟道是负电压:栅极连接的是N沟道两边的P型半导体,如果接正电压,会正常导通的。我们的目的是接电压后将PN间的截止区域扩大直到彻底关闭,所以要接负电压,并且负电压要尽可能大,才能保证将沟道夹紧。对于P沟道同理。

    此外,箭头方向表示沟道的类型,如果为N沟道则箭头朝内(上面的图),如果为P沟道则箭头朝外(下面的图)

    JFET缺点:容易夹不紧,导致少量电流流过,对于需要严格控制电流的电路(如开关)无法接受。

    MOS场效应管

    image-20260110154835848

    对于NMOS管,当向栅极施加正电压时,电子聚集形成沟道,此时MOS管导通;当栅极无电压时,此时没有沟道,MOS管截止。

    对于PMOS管,当向栅极施加负电压时,空穴聚集形成沟道,此时MOS管导通;当栅极无电压时,此时没有沟道,MOS管截止。

    关于MOS管的结构,参照视频里面的图:

    image-20260110155338494

    这是一个NMOS管,一般会将衬底和源极相连,引出源极S,所以在电路符号中的中间那个竖杠会和S那一侧的竖杠连接在一起。此外箭头方向为电子移动的方向,如NMOS中栅极施加正电压后电子向内移动形成N沟道,而PMOS中空穴聚集形成P沟道,所以电子是向外移动的。

    注意这个图中,当漏极传来电流时,无法正常通过,因为N型半导体中间的P型半导体阻碍了电流;但是当源极S传来电流时,由于S和衬底连接,电流可以通过衬底到达漏极D,所以这里存在单向导通性:电流可以由源极流向漏极,但是不能由漏极流向源极。也就是说在MOS管中存在一个天然的寄生二极管。对于PMOS管中依然存在这个寄生二极管,只不过方向相反。

    MOS管的其他类型:增强型和耗尽型。耗尽型MOS管在栅极电压为0时依然可以导通,所以在电路符号中三个竖杠是连在一起的。

    image-20260110160603795

    漏极开路(OD,开漏)

    与开集原理相同,不做过多介绍。

    推挽电路

    image-20260110160927771

    为什么使用推挽:强的驱动能力,将输出强上拉为1或者强下拉为0。

    多个推挽电路不能线与:如果一条线路Vcc端导通,一条线路GND端导通,会导致电源接地,此时会产生大电流导致MOS管被击穿。

    关于线与:

    image-20260110161933280

    对于N1和N2两个三极管,当两者均截止时,输出OUT会被上拉电阻上拉为高电平,此时输出为1;如果其中有一个三极管导通,此时会导致输出OUT直接接地,那么此时输出为0。线与的结果就是,只有当两个三极管均截止(此图中输入均为0)时输出才会为1,只要有一个没有截止,输出就会为0。

    这个逻辑类似于逻辑与,如果使用PNP型三极管的话可能更加清晰,图中使用的时NPN型,逻辑上可能有一些难以理解。

    为了方便理解,画出上面电路图对应的真值表:

    OC门1OC门2OUT
    001
    010
    100
    110

    对于上面的逻辑,如果将两个输入的所有值取反,那么得到的就是逻辑与的真值表;如果将OUT取反,得到的就是逻辑或的真值表。但实际上它们对应的电路图是一样的,只是做了不同的解释。

    寄存器&计数器:电子电路讲过,虽然我已经忘了QAQ

    2.2 硬件组成

    嵌入式的核心逻辑与子系统:

    2.3 典型硬件形式

    课下自修(不可能的)

    3 第三讲 嵌入式处理器

    这一部分内容真不能怪我水,hld的ppt全都是这种格式的大段文字,图片也基本没几个有用的。

    3.1 核心组件

    没听下啥东西

    3.2 嵌入式处理单元 类型&特点

    3.2.1 嵌入式处理器和通用处理器比较

    共同特征:

    不同点:

    嵌入式处理器的功能和内核与通用处理器具有相似性。区别在于嵌入式处理器可能采用不同的架构,集成大量I/O模块,构建嵌入式系统时不再需要外接这些模块,降低功耗。

    3.2.2 微控制器MCU

    MCU就是单片机,以某个微处理器为核心,芯片集成多种部件、功能和外设,与微处理器相比,最大的特点是单片化,体积大大减小,功耗和成本下降,可靠性提高,计算能力有限,主要用于控制等领域。

    如51系列,ARM Cortex-M系列,AVR系列。

    MCU的特点:

    3.2.3 数字信号处理 DSP

    为数字信号处理等计算密集型的数学算法设计。

    针对快速离散信号处理所需的高性能计算,对系统结构和指令进行特殊设计,编译效率,执行效率都较高。

    在通用MCU中以普通指令实现DSP功能,但在专用嵌入式中需要专用的DSP处理器。

    基本运算功能:

    如何提高DSP的处理能力:采用诸多软硬件优化设计。

    DSP分类:

    3.2.4 CPLD & FPGA

    可编程逻辑器件PLD

    3.2.5 片上系统SoC

    即System on Chip,将一个完整的电子系统所需的所有或大部分组件集成在单个硅芯片上。多种处理器内核和各种外围芯片器件集成到一个芯片。

    特点:集成度高,功能全,性能多样,定制化,功耗管理复杂,设计与制造成本高

    一块SoC芯片通常包括如下逻辑组件:

    SoC分类:

    3.2.6 众核与多核

    两者的主要区别在于:

    众核计算单元的应用:

    图像、矩阵等数据具有并行处理特性,众核计算单元用于高性能并行处理数据。

    3.2.7 从内核到指令集

    ISA指令集:

    指令集的组成:

    指令与汇编语言:

    代码密度:

    冯诺依曼结构

    冯诺依曼结构通常包含:

    image-20260110191406976

    哈佛结构:

    image-20260110191841152

    缺点:需要更多的地址线和数据线,使得处理器的设计以及外设连接与扩展的难度增加。

    改进的哈佛结构:

    image-20260110192045426

    3.3 典型嵌入式处理器体系

    ARM处理器的三大特点:

    当前ARM体系结构的扩充:

    (TMD这个hld的PPT我是真不知道要放什么东西上来,她想考就考吧我不管了)

    3.4 性能评价指标

    (自学......)

    4 第四讲 嵌入式存储子系统

    4.1 基本存储体系与模型

    存储子系统:计算机系统中用于存放数据和程序的记忆性子系统,满足不同类型数据的临时/永久存储需要

    分级的存储体系:

    4.1.1 存储器结构模型

    信号线:

    读过程:

    image-20260110204408703

    CS片选信号是选择存储器的信号,因为一个设备可能会使用总线连接多个存储器,需要使用一个信号来避免冲突,这个信号就是CS

    tA是读取时间,即从地址有效到读取数据到地址总线后,片选信号拉高的时间。

    tOTD是读取恢复的时间。在数据读取后,存储器需要做数据恢复(参考DRAM),这段时间不能再进行读取操作。

    此外tOHA是数据保持的时间,保证处理器可以读取到数据。

    写过程:

    image-20260110205808930

    4.1.2 存储器性能指标

    只读性:

    易失性:

    位容量:(hld这个b介绍位容量都不介绍概念的)

    速度:存储器的访问时间,即存储器接收到稳定的地址输入到完成操作的时间。

    功耗:静态功耗(器件处于待机状态的功耗),动态功耗(进行读写,刷新,I/O等操作时的功耗)

    可靠性:平均故障时间

    价格

    4.2 嵌入式应用 存储器分类特性

    hld给的存储器分类图:

    image-20260110212429118

    4.2.1 随机存储器

    随机存储器允许任意次数的读/写,主要分为:

    特点:

    为什么嵌入式系统更倾向于使用SRAM:

    4.2.1.1 SRAM存储单元

    六管SRAM,如图所示:

    image-20260110215103475

    六个MOS管可以分为三组:

    其余部分:

    静态存储:

    此时字线WL为0,门控管关闭,电路存储数据。

    假设此时Q为1,那么M2截止,M1导通,会导致Q接地,因此Q为0,而Q为0时会导致M4导通,M3截止,进而强化Q为1,形成正反馈电路。

    假设此时Q为0,那么M2导通,M1截止,此时Q接Vdd,会被上拉为1,而Q为1会导致M3导通,M4截止,强化Q为0,形成正反馈电路。

    由于正反馈的存在,SRAM无需刷新就可以稳定保存数据。

    写入数据:

    假设要写入1,BL为1,BL为0,WL为1,此时门控管M5和M6导通,QQ暴露在BL与BL中,BL为1,所以Q被拉高为1,进而使得M1导通,M2截止,此时Q处由于M1导通接地,且BL为0,所以Q被拉低为0,而Q为0又会使得M4导通,M3截止,反过来强化Q为1,形成正反馈电路,此时拉低字线WL,数据也能够正常保存在SRAM中。

    假设要写入0,首先将数据传到位线BLBL上,此时BL为1,BL为0,然后拉高字线WL,门控管M5和M6导通,由于BL为0,会导致Q被下拉为0,Q为0会使M2导通,M1截止,Q与Vdd相连,且BL为1,所以Q变为1,而Q为1会导致M3导通,M4截止,从而强化Q为0,形成正反馈电路。此时如果拉低字线WL,由于正反馈电路的存在,数据仍然能保存在SRAM中。

    SRAM的引脚:

    image-20260111102943947

    数据,地址,读写,片选,其他(时钟,复位等)

    4.2.1.2 DRAM

    存储元以电容中的电荷状态来表示1和0,由于电容中的电量会发生泄露,即使是连续供电,动态RAM中的信息也会因电荷泄露而丢失。

    image-20260111104056097

    关于这张图,可以看到一个DRAM存储元就是一个电容加一个MOS管,数据保存在电容中,通过MOS管来对数据进行读写(这里的MOS管作用类似于SRAM的门控管)。

    DRAM芯片模型:

    关于RASCAS这两个有点疑问,为什么不用同一个引脚的上升沿和下降沿区分,而是要使用两个引脚的下降沿,但是时间紧张没时间看了。

    image-20260111104718973

    只读存储器:按照向其中写入新数据的方法以及可重写次数来划分为掩膜ROM,PROM,EPROM,EEPROM,FLASH。

    PROM:

    EPROM:

    EEPROM(E2PROM):

    (原理看不懂)

    FLASH:

    FLASH的分类:NOR和NAND

    NOR是在EEPROM的基础上发展出来的,它可以随机读取任意单元的内容(一次读取一个字,字大小需考虑实际情况,取决于接口),适合程序代码的读写与存储,因此常用于BOOT Loader代码的存储。

    NAND将几个NMOS单元使用同一根线连接,可以按顺序读取存储单元的内容(一次读取一页,类似硬盘的扇区),适合数据或文件的串行读写存储。

    FLASH的一些其他知识点:

    4.3 实例 STC-B的存储单元

    HNU的STC学习板使用的芯片是STC15F2K60S2,其中的2K表示有2048字节的SRAM,60表示有60K的FLASH。其中60K的FLASH ROM是程序存储器,用来保存运行的程序。2K的SRAM是数据存储器,具体的分配如下图:

    image-20260111112257497

    数据存储器的2k分为256字节的idata区和1792字节的xdata区。idata区的0x00-0x1F表示寄存器组(R0-R7),一共有四个寄存器组,0x20-0x2F为位寻址区,一共128个可寻址位,0x30-0x7F为用户RAM区,0x80-0xFF为idata区,同时这部分地址通过不同的访问方式做区分,和sfr定义的寄存器地址复用。

    xdata区的1792字节中,从0x00到0xFF的256字节为pdata区,这部分的访问速度比其他xdata区更快,但比idata区慢。0xFF-0x1FF为剩余的xdata区。

    关于STC的寻址方式:

    1. 立即寻址 MOV A, #70H 表示将立即数70H送到累加器A中

    2. 直接寻址 ANL 70H, #48H 表示与70H地址单元中的数与立即数48H做与运算。 直接寻址最常用的是操作SFR寄存器,通常地址在0x80-0xFF,操作SFR的寄存器必须使用直接寻址

    3. 间接寻址 MOV A, @R1 表示将R1中存储的地址所包含的数据传送到累加器A。 (假设R1中的数据为40H,内部数据存储器40H中包含的数据为55H,那么这里就是将55H给到累加器)

    4. 寄存器寻址 INC R0 将R0的数+1,就是直接操作寄存器

    例子:写P1端口的几种方法

    1. 直接使用宏定义

      sfr P1 = 0x90; P1 = 0xFF;

    2. 直接写地址

      *(unsigned char*)0x90 = 0xFF;

    3. 使用指针(错误,不能使用间接寻址) unsigned char* ptr = (unsigned char*)0x90; *ptr = 0xFF; 汇编代码为: MOV R0, #90H MOV @R0, #FFH

    4. 使用xdata指针(错误,访问外部RAM) xdata unsigned char* ptr = (xdata unsigned char*)0x90; *ptr = 0xFF;

    4.4 实例 ARM Cortex-M3存储器系统

    4.4.1 Cotex-M3存储系统

    存储空间图如下:

    image-20260111130502740

    code区为代码区,用于存储程序代码,或者存储启动后缺省的中断向量表;SRAM区用于片上静态SRAM;外设区用于片上外设;片外RAM区用于扩展外部存储器;片外外设区用于扩展片外外设。

    存储器的访问属性:

    代码区(512MB):

    存放程序代码(不可缓存,直写Write through)

    允许数据访问(通过数据总线接口进行,写操作是可缓冲的)

    内部SRAM区(512MB):

    通过系统总线来访问,写操作缓冲

    重点——位带区,最低地址0x2000_0000处存在1MB的位带区,对应32MB的位带别名区(0x2200_0000开始),位带别名区的每个字(这里的字表示四个字节)对应位带区的一个bit。(位带区只能数据访问)

    位带数据访问如下图,位带别名区的四个字节空间大小对应位带区的一个bit,例如0x2200_0000对应的是0x2000_0000地址的bit0,那么0x2200_0004对应的就是0x2000_0000的bit1,以此类推。

    image-20260111131608136

    为什么要使用位带:原本每个地址对应一个字节,当我们对一个地址的数据做操作时,需要访问这个地址,然后对这个字节进行操作。但是在单片机场景中,很多时候我们需要对单个bit进行操作而不是整个字节。例如在控制led亮灭时,我们如果想要让led0灭,那么需要写代码:P0 &= ~(1<<0);,这实际是对整个字节的操作,将P0和0xFE做与运算,从而清零最低位。但是如果我们为P0的每个bit都分配一个地址,那么对这个bit的操作就可以直接使用这个地址,而不是使用麻烦的位运算,比如P0_0 = 0

    小扩展:STC中也有类似这样的操作,它为SFR寄存器中所有地址为8的倍数的寄存器提供了按位操作的方式,也就是sbit声明,相同的地址,如果用sfr声明,那么会访问到正常的sfr寄存器,如果使用sbit声明,那么会访问到它对应寄存器的对8取余的那一位。比如:P0的地址是0x80,能被8整除,所以可以位寻址,对于地址0x84,如果声明的方式为sbit P0_4 = 0x84,那么可以正常对P0.4进行读写;如果声明的方式为sfr P0_4 = 0x84,那么这个会访问到串口4的控制寄存器S4CON。

    位带操作的优越性:

    片上外设区(512MB):

    包括各类外设状态控制/状态寄存器,同样支持位带操作(0x4000_0000对应0x4200_0000)

    不允许执行指令

    为什么在片上SRAM和片上外设区设有位带:

    片外RAM(1GB):

    可以存放程序代码和数据

    片外外设(1GB):

    不允许执行指令

    AHB内部私有外设总线:

    APB外部私有外设总线:

    供应商自定义

    其他东西没时间看了,她要考我也没法

    5 第五讲 最小系统与外围电路

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

    最小系统:一个仅具有进入正确执行模式所需最少资源的系统

    通常包括:

    通过设计和验证最小系统硬件,可以掌握以特定型号处理器为核心的嵌入式硬件设计方法,为进一步功能,接口,总线扩展奠定基础。

    5.1 抖动与消抖

    理想情况下,信号应该在某个精确时间出现精确的电压值

    在理想点轻微的晃动,提前或延后,这类不可避免的随机偏差,称为”抖动“。

    抖动的原因:

    消除抖动:硬件消抖是根本的解决方式

    RC消抖电路:

    image-20260111141514491

    当按键未按下时,电容被充满电后,输出被上拉电阻上拉为1;按键按下后,输出接地,电容放电后稳定为低电平。此时如果因为按键机械结构发生跳变,使得接触点短暂断开,电容会抑制突变,将信号维持在低电平,从而实现消抖。

    除RC消抖外,还有一些专用消抖器件。

    硬件消抖的缺点:

    软件消抖:

    5.2 复位电路

    复位电路的用途:

    5.2.1 上电复位

    电源电压达到可以正常工作的阈值电压时,集成电路内部开始初始化,使整个芯片在上电后的一段时间内进入已知状态。在完成初始化之前会忽略除复位引脚(例如STM32的BOOT[1:0])之外的任何外部信号。

    STM32的内部上电复位:使用可编程电压检测器(PVD),与Vdd的电压比较,如果超出PVD的阈值,触发PVD中断

    image-20260111143353386

    关于复位:

    复位的实现方式:

    5.2.2 阻容式复位电路

    推荐视频:

    https://www.bilibili.com/video/BV1XW4y1571r

    https://www.bilibili.com/video/BV1dH2MBAEkw

    image-20260111144501813

    左边是高电平复位,右边是低电平复位

    优点:简单,成本低,大部分时间正常工作

    缺点:电源瞬时跌落和恢复的过程中,电容充放电的指数特性导致电容未完成放电时又开始充电,无法产生合格的复位脉冲

    改进方法:在电阻位置并联一个二极管,使电容能够快速放电

    image-20260111152403114

    原本Vcc掉电后放电需要经过τ=R×C的时间,正是这个时间导致了电容没有完成充电,要解决它就是提供一个快速放电的通道,这个通道就是二极管,Vcc掉电后,电容可以通过二极管那一路快速放电,而充电时,又通过RC那一路缓慢充电,提供足够的复位脉冲。

    另一种方法:接奇数个反向器

    还可以接施密特触发器。

    5.2.3 手动复位

    手动RC复位电路,可以简单理解为:人为制造一个Vcc的掉电再上电,在电容两端并联一个按钮,按下后RC电路会跳过电容,此时Vcc直接接地导致掉电,按键抬起后Vcc又重新上电,触发复位。

    image-20260111153302709

    改进方案:

    增加快速放电通路;使用三极管控制等

    5.2.4 专用复位电路

    专用的集成电路,输出复位信号

    5.2.5 看门狗复位(WDT)

    推荐视频:https://www.bilibili.com/video/BV1ko4y1s7E1

    状态监控电路,检测运行状态,在系统跑飞时重新初始化硬件并加载软件重新执行。

    MCU需要周期性向WDT进行喂狗操作,如果隔一段时间(就是一个定时器,当计数溢出时),WDT会认为MCU故障,重启系统。

    5.2.6 软件复位

    以软件方式对系统进行复位管理

    5.3 时钟电路

    RC正弦波振荡电路,LC正弦波振荡电路,RL正弦波振荡电路,石英晶体正弦波振荡电路

    5.4 电源电路

    这两部分直接不看了,她考我也没办法

    6 第六讲 接口 总线 网络扩展

    为什么要区分AHB与APB:

    实现性能与功耗之间的平衡。AHB用于连接高速,高带宽的模块(CPU,FLASH,SRAM等);APB连接低速,低功耗的外设模块(GPIO,UART,IIC等)。

    AHB/APB是串口还是并口:

    都是并口,属于片上并行总线,用于模块间高速通信。

    AHB Lite是什么?

    AHB的轻量级版本,AHB支持多主设备,需要复杂的总线仲裁器,AHB Lite省去仲裁逻辑,节省面积与功耗。

    总线协议:四周期握手

    1. 设备1将查询信号置1

    2. 设备号收到信号后,准备接受数据,将应答信号置1

    3. 数据发送完毕后,设备2将应答信号置0,表示接受完毕

    4. 设备1收到信号后,将查询信号置0

    image-20260111161243296

    DMA,桥接,随便看看。

    6.1 通用I/O与串行总线

    ARM中的所有I/O口都是通用I/O,允许用户进行配置

    下面是非常重要的一张图:

    image-20260111161628489

    1. 浮空输入,引脚无内部上拉或下拉电阻,电平完全由外部电路决定。(图中的I/O引脚直接到读出) 易受干扰,通常用于连接外部上拉/下拉器件

    2. 上拉输入,在浮空输入的基础上闭合VDD的开关,连接一个内部上拉电阻

    3. 下拉输入,在浮空输入的基础上闭合VSS的开关,连接一个内部下拉电阻

    4. 模拟输入,引脚直接与内部相连,中间无任何其他模块(功耗最低)

    5. 推挽输出,PMOS和NMOS共同构成推挽电路,在写入数据后从推挽电路输出(注意输出控制里应该是有一个反向器的)

    6. 开漏输出,只有NMOS工作,在输入为1时输出悬空,在输入为0时接地输出0(内部的上拉电阻不会激活,需要自己在外部接上拉电阻)

    7. 复用功能推挽输出,与推挽的区别在于输入来源,推挽输出信息来源于数据寄存器,可以由软件控制GPIO->ODR来操作,复用功能推挽输出的信息来自于片上外设

    8. 复用功能开漏输出,类似

    通用异步收发UART:(通用 异步 串行 全双工)

    USART:在UART的基础上增加了同步功能

    同步模式:将TX RX中的一根线设置为时钟来控制时序,一根线作为数据线传数据。

    I2C:主从式,可寻址,两根线(SDA和SCL,必须开漏)

    这部分实验四已经很熟悉了就不多看了

    SPI串行外设接口:

    四线制总线:

    image-20260111171334166

    6.2 典型工业总线(CAN)

    CAN:(Controller Area Network)控制器局域网

    为车用电子设备设计,具备实时性与可靠性。

    CAN协议:物理层采用无格式的二进制位流(不想看了,直接过了)

    四种通信总线比较:

    image-20260111181409589

    6.3 无线接口与网络

    自学

    7 嵌入式系统启动&嵌入式软件基础

    7.1 系统的启动

    计算机系统的启动与运行:BIOS(Basic Input Ouput System)

    通用PC的启动过程:

    1. 上电/复位

    2. 系统启动(BIOS/BootMonitor——硬件初始化)

    3. 阶段1 BootLoader(主引导记录——读取FAT32分区)

    4. 阶段2 BootLoader(LiLi,GRUB等——加载分区的.efi文件)

    5. 内核镜像(Linux等)

    6. Init(用户空间)

    7. 运行

    嵌入式系统的启动与运行:

    1. 上电复位

    2. 引导加载程序 BootLoader

    3. 加载操作系统(如果有的话)

    4. 操作系统初始化

    5. 启动应用程序

    MCS-51的启动:

    1. 上电复位,PC寄存器的初值为0x0000,指向第一条指令的存储地址

    2. 0x0000-0x0002这三个单元放了一条无条件跳转指令,当从该地址执行时直接跳转到主程序的入口地址

    STC51的启动过程:

    1. 第一阶段 ISP引导区

      • 冷启动检测,芯片内部复位

      • 握手检查,运行ISP检测UART是否有来自PC的STC-ISP下载指令

        • 有指令,进入下载模式,擦除用户flash,写入新代码

        • 无指令,通过跳转将控制权交给用户flash(0x0000)

    2. 第二阶段 汇编启动代码 用户flash的0x0000地址,存放的是一条跳转指令,跳去执行一段汇编(STARTUP.51)

      • 初始化堆栈指针(SP)

      • 清零RAM

      • 初始化非零变量

    3. 第三阶段 进入main.c

      • 第二阶段完成后,执行LCALL _main(长调用main函数)

      • 程序指针PC指向main函数,开始运行代码

    STM32F103的启动:

    1. 电压稳定,拉高复位电平

    2. 硬件采样BOOT引脚

      • 在复位的第4个时钟周期,锁存BOOT1和BOOT0的电平状态

      • 根据BOOT模式,将相应地址内容映射到0号地址

    3. 处理单元硬件取值,读0x0000_0000,取MSP;读0x0000_0004,获取复位中断入口

    4. 跳转执行复位中断服务程序

    5. 系统初始化

    6. C库环境初始化

    7. 运行用户程序

    嵌入式系统的启动存在差异,但有一些相同点:

    BIOS与BootLoader的区别:BIOS是PC平台上用于初始化硬件并加载BootLoader的固件;而BootLoader是真正负责加载操作系统的程序,存在于包括PC、手机、单片机在内的所有计算设备中。

    在非PC系统中,只有BootLoader,没有BIOS。

    7.2 基础软件组件

    BootLoader:

    BootLoader运行模式:

    (在引导系统正常启动后,BootLoader不再发挥作用,成为系统中的哑代码)

    BSP(Board Support Package)板级支持包

    image-20260111185625791

    CMSIS与HAL:

    image-20260111190004773

    8 嵌入式操作系统

    8.1 嵌入式操作系统总览

    内核(kernel)

    微内核与宏内核:

    image-20260111190949520

    Linux:宏内核

    Windows:混合内核

    MacOS:微内核

    内核分类:

    调度策略:

    优先级翻转问题:

    低优先级任务持有高优先级任务所需的临界资源,导致高优先级任务被延迟执行。(低优先级任务持有临界资源,此时高优先级任务如果需要这个临界资源,就会被阻塞无法执行;而低优先级任务会被中优先级任务抢占,导致低优先级任务也无法很快执行完毕,长期占有临界资源)

    image-20260111192244199

    解决优先级翻转的方案:

    PIP优先级继承协议:优先级翻转问题发生时(高优先级任务因为没有临界资源被阻塞),让持有临界资源的低优先级任务临时获取被阻塞的高优先级任务的优先级,让其尽快执行完毕释放临界资源,从而使高优先级任务能够得到快速响应。

    image-20260111192305497

    PCP标准优先级天花板协议:每个资源赋予一个高优先级(所有需要该资源的任务的最高优先级)。

    立即优先级天花板协议IPCP:

    image-20260111200210063

    image-20260111195447365

    8.2 嵌入式操作系统的实时属性

    实时性与实时操作系统

    计算结果具有时间约束,不论任务什么时候到来,都能在可估计的时间内响应和完成。

    实时系统是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。

    实时系统的基本特点:

    任务的调度特性

    硬实时:截止时限必须被满足。硬实时系统:所有具有截止时限的任务,截止时限都必须被满足(飞行控制,核电站)

    软实时:任务的截止时限被错过时,不会引发严重的后果(多媒体应用)

    任务调度:任务调度器根据调度算法和策略对就绪队列中的任务进行调度管理

    经典调度算法:单调速率调度(RMS){单调截止时限调度DMS},最早截止时限调度(EDF),轮转调度(RR)

    RMS

    image-20260111201719384

    DMS:

    deadline越短的任务,优先级越高。(截止时限越短的任务优先级越高)

    image-20260111202901803

    EDF:

    只看任务的绝对截止时限

    image-20260111202918799