嵌入式八股 - ARM体系结构三

21、在编写IIC时,如果不能达到效果,应该怎么做?

可以考虑以下方面:

  1. 检查硬件线路是否正确,比如连线是否对应
  2. 查看数据手册,看看代码逻辑是否符合传感器数据读写序列
  3. 检查软件代码,主要是确认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应用编程、数据结构、操作系统、计算机网络、算法以及其他嵌入式相关内容。 优势:专门适用于嵌入式软件岗位的面试高频内容总结,短时间内快速掌握重要面试内容

全部评论
点赞 回复 分享
发布于 昨天 15:03 北京

相关推荐

终于结束了,2月底过完年开始投递,想过挺难的,没想到这么夸张。基本只投了嵌软岗位,背景:9本港硕,2年遥控车比赛,1段初创,1段大厂非技术,1段车企竹子  3.4投递,3.25进评估,无后续 - 问了hr就是进评估晚了,成为第二批了,所以一直没消息安克  测评挂海尔  直接挂字节  笔试挂  这个真的难啊,感觉至少4A3才有机会面试华为  笔试挂美团  笔试后无面邀特斯拉  挂了好几次阿里系  简历挂好几个小米  直接挂小马智行  没消息Momenta  没消息卓驭  没消息京东  没消息海信  直接挂  刚开就投了,第二天就挂了,测评都没发蚂蚁  投晚了直接挂小鹏  简历挂库玛  无面评估很久后挂oppo  无面邀,官网还在测评完的流程美的  AI面后一直泡着不发面韶音  没消息欣旺达  没消息cvte  一直没约上面试联想  没消息中兴  没消息经纬恒润  没消息海康  没消息恩智浦  没消息蔚来  没消息九号  没消息理想  没消息锐明  没消息博世  没消息sharpa  没消息Insta  暑期简历挂2个志愿,还有1个评估1个月了也没消息联发科  时间有冲突,没做笔试面了挂掉的:算能科技 一面挂迈瑞 不太匹配,没让推进了Insta  日常一面挂  估计是Linux方向不熟悉挂的智元  日常一面挂  问的很底层平头哥  二面挂  具体方向不太匹配高通  一面后无后续有拿到的:3月中拿了一批:理邦仪器、禾赛、网易后来考虑到想等对口的base在广东的,以及想到还有很多还没面,于是都拒了,再战(结果没想到根本没几个面试了)截止目前:手机厂offer一家初创机器人offer地平线 一面完等后续科大讯飞 一面完后约二面荣耀 笔试中最后应该就去手机厂了,感谢收留,曾想过很难,真没想到这么难,投了2个月面试其实都没几个。最想去的是竹,可惜没给机会,还特地为了竹去复习RTOS的源码,最后没想到没用上,不过面MCU的岗时帮助很大,基本部门主要面向MCU的都过了,而且面试官给的评价都很好,很多都是秒过(除了智元那次挂了)。确实是要补充好Linux相关吧,不然很多机会把握不住,insta就是投早了当时一点都不会,感觉很多大厂还是有Linux相关岗位的,这个需要在秋招前补充好,特别是对于内核相关,感觉是考察的更多的,也是面试官比较看重的。另外就是leetcode和基础八股,说实话,hot100真有点不够,华为挂了是自己的问题,但我做了2次字节笔试,都没能够4A3,最后也没能约面,这部分也是真要加强,感觉目前笔试代码的水平也就及格线上下,面试的几次手撕代码倒是基本都做出来了。已经提前体会到秋招强度了,太夸张了,投了好多最后面试也不给,确实是要珍惜每一次给予的面试机会,4月初也低迷过一段时间,看到过很多别人收到面试自己却毫无波澜,美的、欣旺达这种也不给面试机会,准备挺久华为结果涨分数线挂了,真挺迷茫的,4月也没法坚持像3月一样的激情和高强度的八股复习了。最后也是有了还不错的结果,大家也加油,环境不好,都很难,秋招再战,愿与诸君共勉。
吃不饱的咸鱼很奔放:恭喜呀老哥
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务