嵌软八股大全9 - 常见通信协议问题汇总

1、使用过的常见通信协议有?

  1. UART
  2. SPI
  3. I2C
  4. CAN

2、UART?

2.1、介绍下 UART ?

  1. UART 是一种串行,全双工,低速,异步通信方式
  2. UART 需要 RX、TX 两根线
  3. 帧格式:起始位(逻辑0) + 数据位(5到9位,常见8位) + 校验位 + 停止位(逻辑1,1到2位)
  4. 传输数据以字节为单位,传输速度由波特率控制(常见9600、115200)

2.2、串口的波特率?波特率是什么意思?

串口的波特率表示传输的速率,具体是指每秒钟传输的二进制位数

2.3、串口总线空闲时候的电平状态?

当没有数据传输时,UART 的传输线(TXD 线)和接收线(RXD 线)都保持在高电平

2.4、串口 GPIO 的配置模式?

复用功能模式,高速

2.5、串口数据帧格式?

启动位(逻辑 0 ) + 5/6/7/8位数据位 + 校验位 + 1/1.5/2 停止位(逻辑 1 )

  1. Start(一个逻辑 0 数据位)
  2. Data(5/6/7/8位)
  3. Parity
  4. Stop(个逻辑 1 的数据位)

alt

2.6、UART 发送一个字节数据多少位?

10 位,1(起始位)+ 8(一字节数据)+ 0(校验位) +1(停止位)

2.7、UART 需要区分主从吗?

不需要,UART 是异步全双工点对点通信,没有主从概念

2.8、UART 协议是如何保证通信成功的?

  1. 首先硬件连接需要正确(RX/TX 交叉连接)
  2. 其次收发双方波特率/帧格式需要设置一致
  3. 另外可以通过数据帧的校验位进行数据的校验

2.9、程序如何实现?寄存器配置?

UART 在软件上一般需要设置波特率、字长、校验位、停止位等参数,寄存器上主要是:

  1. UART 控制寄存器 USAR_CR1/2/3
  2. UART 状态寄存器 USAR_SR
  3. UART 数据寄存器 USAR_DR
  4. UART 波特率寄存器 USART_BRR

2.10、发送和接收通过什么判断已完成?

USART 状态寄存器中 TXE 位(发送数据寄存器为空)标志,硬件置一表示数据寄存器为空,且可以写入新的数据

TC 位(发送完成)标志,硬件置一表示移位寄存器中的数据全部发送完毕,发送数据完成

RXNE(读取数据寄存器不为空)标志,接收寄存器(USART_DR)中有新的数据时,RXNE 标志位会被置位,表示数据寄存器中有未读取的数据,可以开始读取操作

2.11、串口按字节发送丢帧怎么办?

  1. 确保波特率收发双方匹配
  2. 增大接收缓存区域,发送端的发送速度过快,而接收端处理速度不足,可能会导致接收端缓冲区溢出,进而丢帧,也可使用流控
  3. 增加校验、错误检测或者数据完整性验证

2.12、串口由哪几部分组成?

  1. 发送器
  2. 接收器
  3. 波特率发生器
  4. 控制逻辑

3、I2C?

3.1、介绍下 I2C ?

  1. I2C 是一种串行,半双工,低速,短距离,同步通信方式
  2. I2C 需要 SDA 和 SCL 两根线
  3. I2C 传输一般按照 起始位+从机地址+读写位+ACK+传输数据+停止位 的格式传输
  4. I2C 主机寻找从机需要通过 I2C 地址,从机 I2C 地址一般为 7/10 位,当从机地址 为 7 位时,I2C 总线上最多可以挂载除保留地址 0x00 外的 127 个设备
  5. I2C 常见的通信速率有标准模式下的 100Kb 和 快速模式下的 400kb

3.2、I2C 协议是如何保证通信成功的?

  1. 首先硬件连接需要正确
  2. 其次 I2C 数据传输中会有应答 ACK 位,保证数据被成功接收
  3. 如果规定时间内没有收到应答位,就认为发生了错误

3.3、为什么 SDA 与 SCL 需要外接上拉电阻?

  1. 高电平
  2. 开漏输出

3.4、为什么 I2C 设备内部是 OD / OC 输出?

防止总线上进行 “线与” 时发生短路现象造成设备过热或损坏

3.5、为什么不设计成推挽结构呢?

在 SDA 或 SCL 总线上,如果同一时刻某些设备输出高电平,某些设备输出低电平时连接电源的上拉开关管和连接地的下拉开关管之间就会短路

3.6、为什么 I2C 设备内部不集成上拉电阻?

  1. 简化芯片内部电路
  2. 减小芯片内部功耗
  3. 不同电源供电的设备可以做到高电平信号兼容

3.7、I2C 上拉电阻大小如何选择?

计算公式:
Rmin ​= ​(Vcc ​− Vol) / Iol,Vcc 是总线电压,Iol 是输出低电平时的电流能力
Rmax ​= tr​​​​ / 0.8473 × Cbus​,tr 是 I2C 上升时间,Cbus​ 是总线总电容

建议值:

  1. 100 kbps,4.7k ~ 10k
  2. 400 kbps,2.2k ~ 4.7k
  3. 3.4 Mbps,1k ~ 2.2k

3.8、I2C 总线上可挂接的设备数量?

  1. 受总线的最大电容 400pF 限制
    1. 总线上的每个设备都会增加一定的电容负载,当总线上的电容超过了最大限制 400pF
    2. 信号的上升时间和下降时间会变长,导致信号的失真和波形的不稳定,进而影响通信的可靠性
  2. 理论可挂接设备数量 127 个
    1. 7 位从机地址,可挂接 2^7 = 128,除去 0x00 广播地址外
    2. 理论上最多可挂载 127 个从机设备

3.9、SDA 与 SCL 信号线逻辑电平?

  1. 传统器件:Low Level ≤ 1.5V,High Level ≥ 3.0V
  2. 新型器件:Low Level ≤ 0.3*VDD,High Level ≥ 0.7*VDD

3.10、有测过 I2C 的波形吗?

用逻辑分析仪看过主机读写从机的波形,主

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论

相关推荐

评论
1
9
分享

创作者周榜

更多
牛客网
牛客企业服务