嵌入式八股文学习-自学长期更新-2026

总感觉没有系统学清,或者说,学完之后,还是迷迷糊糊,想必还是得知道一些理论套话。慢慢来吧,希望系统学完能手搓些什么出来玩玩,听说得学习别人开源代码才能快速提升,好嘞,加油。

参考他人学习链接:

嵌入式面试八股文总结(长期更新)-CSDN博客

通信协议

I2C通信

Inter-Integrated Circuit同步串行通信(因为有时钟线)、用于板内短距离、芯片级互连;

通常用于主控芯片与各种外设芯片(如传感器、EEPROM等)的通信;

两根线、半双工、采用软件寻址选择从机、传输速度慢;

I2C通信为什么要加上拉电阻?

1、实现线与逻辑

I2C总线上多个设备共享同一条总线,上拉电阻可以将总线拉至高电平,任何设备都可以通过总线拉低来发送信号。

2、开漏输出配置

I2C总线上的两个引脚都是配置为开漏输出,在开漏输出模式下,引脚无法输出高电平,只能靠上拉电阻来提供将总线拉回高电平的能力。

(图片源于网络,应该是CMOS开关)

3、防止总线冲突

当多个设备同时访问总线,上拉电阻配合开漏输出可以防止短路。

4、定义总线空闲状态

上拉电阻确保总线上无设备通信时保持高电平,即空闲状态。

经典的上拉电阻阻值为4.7k

I2C为什么要使用开漏输出?

1、可以实现线与逻辑;

2、实现电平转换

不同电压域的设备可以在同一总线上通信,只需使用与最高电压匹配的上拉电阻。

前提是低压侧设备的 I/O 口必须具备高压容限(Tolerant)。如果低压侧设备不支持高压,必须使用‘电平转换电路’(Level Shifter,通常由两个 MOSFET 组成)来隔离两个电压域。

3、时钟同步

开漏结构可以使从设备通过拉低SCL线延长时钟周期,保证较慢的从设备与主设备同步;

4、仲裁机制

多主机下,可以实现无损仲裁-低电平优先。

IIC的地址位数是多少?

7位或者11位,大部分为7位。一般发送从机地址(7位)+1位读写位;

理论上可用的是127个(2^7-1),0x00地址保留。实际可用的是126个,0x00和0x7F地址保留。

可拓展10位地址格式。理论上可用也是1023(2^10-1),0x00地址保留

IIC有几根线?

两根线,SCL时钟线与SDA数据线。

IIC的通信速率有哪些?

包含标准模式、快速模式、高速模式

100k、400k、1Mbps

IIC时序

我是觉得分为开始、发送一个字节、接收应答、接收一个字节、发送应答、结束信号;

但是有些说是开始、应答、结束信号

开始信号是:SCL为高电平时,SDA从1到0;

停止信号是:SCL为高电平时,SDA从0到1;

写/读取信号是(主机或者从机):SCL低电平时,发送设备将数据放到SDA上;SCL高电平时,接收设备把SDA上的数据读走。

(SCL为高电平时,SDA必须为稳定电平,数据时按MSB高位优先传输)

应答机制:每每传输8位数据,也就是1个字节,接收设备需要给出ACK应答位,0为应答,1为非应答。在 SCL 为高电平期间,发送方读取 SDA 的状态。如果读到 0 就是 ACK,读到 1 就是 NACK。

如何计算IIC总线上拉电阻的阻值?

R:上拉电阻阻值。Tr:要求的上升时间。Cb:总线电容。

(下次看到再进行补充公式)

实际选择建议:低速场景,4.7KΩ - 10KΩ。

标准模式,4.7KΩ。快速模式,2.2KΩ - 4.7KΩ。高速模式:2.2kΩ - 4.7kΩ。

硬件IIC和软件IIC的区别

软件I2C的话,首先是引脚随便选两个即可,然后程序的话先配置引脚为上拉+开漏模式.编写基本时序。比较方便换引脚。

可以从实现方式,速度,稳定性,灵活性方面讨论。

实现方式上的区别。硬件IIC:通过MCU内部的专用硬件模块实现时序,软件只负责发出命令。软件IIC:通过控制GPIO来模拟IIC的SCL和SDA信号来产生IIC的时序。

速度上的区别。硬件IIC速度比较快。软件IIC速度比较慢,而且会占用CPU

稳定性上的区别。硬件IIC稳定性较高。软件IIC稳定性相对较低。

灵活性上,软件IIC的IO口可以随意设置,更加灵活,而硬件IIC的IO口是固定的。

IIC如何实现多主机通信?

1、总线仲裁

采用低电平优先原则。由于总线采用线与逻辑,谁先发送低电平,谁先获得总线控制权;

2、时钟同步

因为是线与逻辑,只有当所有设备同时释放SCL时,总线才会被拉高。因此所有设备会以最慢的设备的时钟速率运行,以保证时钟同步。

3、冲突检测

主机发送每一位数据时都会检查SDA线实际电平,如果检测到的电平与期望发送的不同,则失去仲裁权。

IIC的时钟同步和时钟拉伸是什么?

时钟同步:I2C总线上的SCL线是所有设备逻辑与的结果。当任一设备将SCL拉低,总线SCL就为低电平。只有当所有设备都释放SCL(高阻态),SCL才会变为高电平,这确保了最慢的设备也能跟上通信节奏;

时钟拉伸:从设备可以通过持续拉低SCL来延长时钟周期。这样从设备可以有更多时间处理数据。主设备必须等待SCL实际变为高电平后才能继续。这是I2C协议中从设备控制通信速度的机制。

I2C通信中常见的问题及解决方案?

暂时没太碰到过,

总线死锁症状:SDA或SCL被某个设备一直拉低。

解决方案: 软件复位:主机产生9个时钟脉冲,尝试完成被中断的传输。硬件复位:复位所有I2C设备。电源循环:关闭再打开电源

地址冲突,症状:多个设备使用相同地址

解决方案: 使用带地址选择引脚的器件使用I2C地址转换器使用多总线设计

时序问题,症状:高速通信时数据错误。

解决方案: 减小上拉电阻值(注意功耗增加)减少总线电容(缩短线长、减少设备数量)降低通信速率

噪声干扰,症状:通信不稳定,偶发错误

解决方案: 使用屏蔽线缆增加滤波电容优化PCB布局,避免I2C线与高速信号线并行

---------------------------------------------------------------------------------------------------------------------------------

SPI通信

基本原理与特点

高速(与IIC,USART相比)、全双工、同步串行、四根线:MOSI、MISO、SCLK、CS;

传输效率高,一主多从,可以连接多个从机设备;传输效率高-可达几十MHz

寻址方式

当主设备要与某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(0/1,根据从机来定),表示选中该从机。

SPI的主机需要至少四根线,什么时候需要用到多余的线?

多个从机的时候,这样主机需要多个片选线来连接多个设备。

 SPI与IIC一样,都是先发高位,后发低位;与USART相反;

SPI不带应答,所以快。但是有可能接收器没有接收到。

没有起始信号,也没有终止信号,上来就发送数据。

MSB-最高位、LSB-最低位;第一个沿发,第二个沿收

极性和相位

对于特定的从机设备,一般在出厂时会将其设计为某种特定的工作模式;

所以一般在使用该设备的时候需要保证主设备的工作模式与从设备保持一致,

即需要对主设备的CPOL和CPHA进行配置。

SPI有几种工作模式?有什么区别?

4种,跟极性跟相位有关

极性CPOL相位CPHA
跟SCLK有关,与什么时候接收器读取数据有关

CPOL=0,表示SCLK空闲时为低电平

CPOL=1,表示SCLK空闲时为高电平

CPHA=0,在第一个边沿读取数据;
CPHA=1,在第二个边沿读取数据;

SPI有几根线?可以去除几根线?

如果不需要双向通信,可以去除MOSI/MISO其中一根线。

如果是一对一通信,CS片选线也可以去除。

SPI和IIC的寻址区别

SPI:通过CS信号选择从机设备;

IIC:采用广播式发送给总线上的所有从机,通过发送的第一个字节(7位地址)/前两个字节(11位地址)选择从机设备;

SPI与IIC、UART相比,有些什么优势?

优点:速度快,可以达到几十MHz;全双工通信,效率高;

缺点:需要的信号线多,四根;多个从设备需要多条CS线,占用IO引脚多;

无应答机制,无法确认数据是否正确接收;

SPI的菊花链和独立模式

菊花链:所有从机共用一根CS线,数据经过一个设备后再传递给下一个设备;

独立模式:每个从机均单独使用一根CS线;

DualSPI和QualSPI

MOSI,MISO设置为双向数据信号。

DualSPI支持两根信号线同时传输,等效时钟工作频率翻倍。

QualSPI支持四根信号线同时传输,等效时钟工作频率翻四倍。

SPI的传输流程

主机把对应的从设备片选线CS拉低;

主机发出时钟信号;

主机设置工作模式-极性跟相位;

主机发起通讯:写入一字节数据(常见的7位地址+1读写位-取决于从机设备);

然后从机就会在特定的时钟边沿通过MISO发送数据给主机;

传输数据过程中,MSB高位优先,发送到移位寄存器;

传输完成后,主设备拉高片选,结束通信。

---------------------------------------------------------------------------------------------------------------------------------

UART通信

UART通信需要哪些信号线?

TXD-发送数据;RXD-接收数据

UART的帧格式是什么?

起始位+数据位(8)+校验位+停止位

UART常用的波特率有哪些?如何选择合适的波特率?

常见:9600-低速通信,稳定性好;115200-常用高速率

考虑因素:通信距离---距离越长,波特率越低;抗干扰要求——要求越高,波特率越低;

UART、IIC、SPI区别

半双工\全双工、半双工(具有应答机制)、全双工(不具有应答机制)

异步通信、同步通信、同步通信

一对一、多对多、一对多

115200/9600、100k\400k\1M、几十M

RS232与RS485的区别

RS485

半双工通信、两根线、差分传输、抗干扰能力强

传输距离远-1.2km、连接简单、支持一对多、传输速度比RS232快

RS232

全双工通信。信号线RX TX GND 点对点通信、传输信号短(15m)

USB通信(增)

CAN通信

Modbus RTU

Modbus DPU

Modbus TCP

————————————————————————————

MCU相关

STM32启动流程

启动方式

通过BOOT0\BOOT1引脚来改变启动方式

当BOOT0为0时,启动模式设置为主闪存存储器,即该存储器选为启动区域;

一般默认主闪存启动

什么是中断?

暂停当前任务,去处理更加紧急的任务。当中断发生时,处理器会停止当前执行的代码,保持现场,并跳转到中断处理函数中去执行,执行完成后又返回现场继续执行。

什么是看门狗定时器?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值