嵌入式八股 - ARM体系结构三
21、在编写IIC时,如果不能达到效果,应该怎么做?
可以考虑以下方面:
- 检查硬件线路是否正确,比如连线是否对应
- 查看数据手册,看看代码逻辑是否符合传感器数据读写序列
- 检查软件代码,主要是确认IIC时序等是否正确,比如各个部分延迟时间,起始信号之类
22、串口接收中断代码应该怎么开发?
通常遵循以下步骤:
- 初始化串口硬件(波特率、数据位、停止位等)
- 配置接收中断(使能中断源)
- 编写中断服务程序 (ISR)(处理接收到的数据)
- 实现数据缓冲机制(通常使用环形缓冲区)
- 在主程序中处理接收到的数据
23、串口接收如果一个读一个写会有什么问题?
在串口通信中,如果一个任务负责写数据到缓冲区,另一个任务负责从缓冲区读数据,如果没有做好同步和缓冲设计,会出现写脏问题以及数据不一致的问题。
解决写脏问题可以使用环形缓冲区、进行临界区保护等方法。
24、SPI速率
SPI全双工同步传输,速度约有50Mbps,即约5.9MB/s,比I2C快。
25、UART速率
无限制,速度取决于波特率,常用9600bps(1.2KB/s)和115200bps(14.4KB/s)
26、RS232、RS485速率
RS232传输速率一般不超过20Kbps,最大距离不超过15m。
RS485最高传输速率10Mbps,抗干扰能力强,可以传距离可达千米。
27、什么是IIC死锁
IIC设备可能因为看门狗、手动按钮复位等异常复位导致IIC总线死锁产生。
IIC 死锁:数据线(SDA)被持续拉低为低电平,而时钟线(SCL)保持为高电平。由于IIC总线在空闲时要求SDA和SCL均为高电平,这种状态会让主设备误认为总线正被占用,从而无限期地等待总线释放,导致通信完全停滞。
发生原因:在主设备等待ACK时,如果这个时候主设备异常复位,SCL 就会被释放为高电平。此时,如果从设备没有复位,就会继续IIC的应答,将SDA一直拉为低电平,直到SCL变为低电平,才会结束应答信号。(如果SCL 为高,根据原理,SDA不能变化)
如何解决IIC死锁?
主要是软件恢复法和硬件恢复法
28、RS232 与 RS485介绍与区别
1)RS232
RS232 是现在常用的串行通信接口之一,其接口使用一根信号线和一根信号返回线而构成共地的传输形式。在使用时需要通过电平转换电路方能与TTL电路连接。
RS232最常见的物理接口是DB-9连接器,一个DB-9接口包含9个引脚,每个引脚都有特定的功能。但在许多简单的应用场景中,通常只需要连接三根线即可实现基本通信:
- RXD: 接收数据
- TXD: 发送数据
- GND: 信号地
2)RS485
RS485是一种定义数字电路电气特性的串行通信标准,其规定了信号如何通过电线传输。它使用一对双绞线(A线和B线),通过测量两线之间的电压差来判断逻辑电平,这也使得它具有较强的抗干扰性。采用 RS485 进行传输时,同样需要增加电平转换电路。
RS232 和 RS485 的区别
- 工作模式:RS232 为全双工,RS485 为半双工。
- 传输方式:RS485是差分传输方式,RS232是单端传输方式。
- 信号线:RS485接口一般只需二根信号线。RS-232 接口需要使用 RXD、TXD、GND 三条线 。
- 抗干扰性:RS485接口是差分传输方式,抗噪声干扰性好。RS232接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰。
- 传输距离:RS485接口传输距离相对远些,最大传输距离标准值为 1200 米。RS232传输距离有限,实际上最大传输距离 15 米左右。
- 通信能力:RS485支持在一条总线上并联多个设备,标准规定最多可连接32个设备。RS232只允许一对一通信。
- 传输速率:RS232传输速率较低,在异步传输时,波特率为 20Kbps。RS485 的数据最高传输速率为 10Mbps 。
- 电气电平值:RS485的逻辑"1"以两线间的电压差为+(2-6) V 表示;逻辑"0"以两线间的电压差为-(2-6)V 表 示 。 RS-232 中逻辑“1”为 -3V 至 -15V,逻辑“0”为 +3V 至 +15V。
29、IIC和SPI
1)IIC
IIC是一种两线式串行总线,包含数据线(SDA)和时钟线(SCL),属于半双工通信,主要用于近距离、低速的芯片之间的通信。在使用IIC通信时,每个连接到总线上的设备都一个设备地址,用于后续设备之间通信选择。设备地址主要有7bit、10bit。需要注意的是IIC是一种多主机总线,每个连接总线的设备都可以作为主机和从机,只是同一时刻只能有一个主机。
关键通信机制
IIC的通信过程遵循严格的时序规则,由主机发起和控制。
1. 空闲状态
时钟线和数据线皆为高电平。
2. 起始与停止条件
- 起始条件 :在SCL保持高电平期间,SDA线从高电平跳变为低电平。这标志着一次通信事务的开始,总线进入忙状态。
- 停止条件:在SCL保持高电平期间,SDA线从低电平跳变为高电平。这标志着通信结束,总线释放,返回空闲状态。
3. 数据传输
为了保证数据被正确采样,协议规定:只有当SCL为低电平时,SDA线上的数据才允许改变。当SCL为高电平时,SDA线必须保持稳定,接收器在此期间读取数据。
4. 寻址与读写
IIC总线上的每个从设备都有一个唯一的地址。主机通过发送一个地址字节来呼叫特定的从设备。这个字节包含7位地址和1位读/写(R/W)位:
- R/W = 0:表示主机将向从设备写入数据。
- R/W = 1:表示主机将从从设备读取数据。
5. 应答机制 (ACK/NACK)
IIC协议内置了可靠的握手机制。每传输完一个字节,接收方必须在第9个时钟周期内发送一个应答信号。
- 应答 (ACK):接收方将SDA线拉低,表示已成功接收该字节。
- 非应答 (NACK):接收方保持SDA线为高电平,通常表示接收失败、设备忙或主机希望结束读取操作。
2)SPI
SPI 是一种高速的全双工、同步的通信总线,并且在芯片的引脚上只占用四根线,包括SS(从器件选择线)、MOSI (串行数据输出线)、MISO (串行数据输入线)和 SCK(同步串行时钟线)。SPI 是一主多从的总线,通常有一个主设备和一个或多个从设备。
四种工作模式
SPI协议没有规定统一的时钟行为,而是通过时钟极性(CPOL)和时钟相位(CPHA)两个参数来定义数据的采样时机。这两个参数的组合形成了四种工作模式,通信双方必须配置为相同的模式才能正常通信。
- CPOL:决定时钟线在空闲时是高电平还是低电平。
- CPHA:决定是在时钟的第一个边沿(前沿)还是第二个边沿(后沿)采样数据。
模式 | CPOL (极性) | CPHA (相位) | SCLK空闲状态 | 数据采样时刻 (边沿) |
Mode 0 | 0 | 0 | 低电平 | 上升沿 |
Mode 1 | 0 | 1 | 低电平 | 下降沿 |
Mode 2 | 1 | 0 | 高电平 | 下降沿 |
Mode 3 | 1 | 1 | 高电平 | 上升沿 |
30、IIC和SPI对比
相同点
- 均采用串行同步的方式
- 均采用TTL电平、传输距离和应用场景类似
- 均采用主从方式工作
不同点
- IIC为半双工、SPI为全双工
- IIC有应答机制,SPI没有应答机制
- IIC通过向总线广播从机地址来寻址,SPI通过向对应从机发送使能信号来寻址
- IIC的时钟极性和时钟相位相对固定,SPI时钟极性和时钟相位可调
涉及嵌入式全方面知识。根据个人学习以及面试所得,并且加上自己见解、理解记忆方法。 大致内容:C、C++、ARM、QT、Linux驱动、FreeRTOS、Linux应用编程、数据结构、操作系统、计算机网络、算法以及其他嵌入式相关内容。 优势:专门适用于嵌入式软件岗位的面试高频内容总结,短时间内快速掌握重要面试内容
查看14道真题和解析
