嵌入式大厂面经

一、IIC需要几根线分别是什么线

I2C通信协议需要两根线来进行传输,分别是SDA和SCL。

这两根线是通过总线结构连接各个设备,并在设备之间进行数据和时钟信号的交互。

SDA(串行数据线):SDA线被用于在设备之间传输数据。它是一个双向线路,在通信中用于发送和接收数据位。每个设备都通过开漏输出或三态缓冲器连接到SDA线,以实现数据的传输和接收。

SCL(串行时钟线):SCL线是用于设备之间同步传输数据的时钟信号线。它由主设备控制,通过在SCL线上产生脉冲信号来同步数据传输。所有设备都在SCL上接收和解析来自主设备的时钟信号。

总结起来,I2C通信协议只需要两根线:SDA用于数据传输,SCL用于时钟同步。这种简洁的连接方式使得I2C在多个设备之间进行通信变得非常方便和可靠。

二、IIC优势

简单且灵活:I2C仅需要两根线(SDA和SCL)来进行通信,使得硬件连接和布线变得简单。

通过设备地址的选择,可以连接多个设备到同一个总线上,提供了更大的系统灵活性。

可靠性高:I2C协议采用了主从架构,由主设备控制总线上的数据传输。主设备协调和同步设备之间的通信,避免了设备之间的冲突。此外,I2C协议支持差分传输和硬件确认,提供了数据的可靠性和稳定性。

多设备支持:通过I2C协议,可以连接多个设备到同一个总线上。每个设备都有唯一的地址,主设备可以通过指定地址来选择与之通信的设备。这种架构适用于实现多个设备之间的数据交换和控制。低功耗:I2C在基本模式下使用了开漏输出结构,使得设备在非活动状态下可以撤离总线,从而降低功耗。

此外,I2C还支持多速率传输,可以根据需求选择适当的速率,进一步降低功耗。应用广泛:I2C协议被广泛应用于各种领域,如消费电子产品、工业自动化、医疗设备等。它可以用于连接传感器、存储器、显示器、控制器和其他智能设备,为系统提供高效的数据交换和控制能力。

三、IIC可以挂载多少个从设备,主设备

从设备数量IIC总线最多可以挂多少个设备由IIC地址决定,8位地址,减去1位广播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127个地址,所以理论上可以挂127个从器件。这只是一个理论可以挂载从设备的数量,挂载从设备数量还受到电容的影响。

I2C总线上的每个设备都有一定的输入和输出电容。当总线上连接的设备数量增加时,总线电容的总和也会增加。这样,总线的负载能力和传输速度可能会受到影响。

IIC支持多个主设备,但在同一时刻只能有一个主设备处于活动状态。(主设备没有固定的地址),当一个主设备发起通信时,它会控制整个总线,并与所选的从设备进行数据交换。其他主设备和从设备会保持静默状态,直到当前的主设备释放总线。

一旦当前的主设备完成与从设备的通信,它将释放总线,然后其他主设备可以竞争获取总线控制权,并选择与所选的从设备进行通信。这种机制确保在同一时刻只有一个主设备在总线上工作,避免冲突和数据干扰。但是,任何主设备都有权利在需要的时候释放总线,并允许其他主设备接管。这种切换主设备的操作可以在需要时进行,以实现多主设备的共享和通信。

四、IIC是全双工还是半双工

I2C总线是一种半双工的,主机可以向从机发送数据,然后等待从机的响应,并且这期间从机不能主动发送数据。只有当主机发送完数据并停止传输时,从机才可以主动发送数据。

五、IIC总线空闲状态

在I2C总线中,空闲状态是指时钟线 (SCL) 和数据线 (SDA) 都处于高电平状态时的状态。在空闲状态下,两条线路都被拉高,并且没有任何通信活动正在进行。

六、IIC主机如何获取总线控制权

发送Start Bit:主机设备发送Start Bit信号,这是一个特殊的位模式,用于指示主机希望控制总线并启动数据传输。发送Start Bit时,主机将SCL保持高电平,而SDA由高电平转为低电平。

监听总线:主机设备释放SDA线,将其设置为输入模式,然后开始监听总线,等待仲裁的结果。

仲裁:如果其他主机设备也尝试发送Start Bit,冲突就会发生,所有参与冲突的主机都会检测到数据位不匹配,并放弃继续发送。仲裁通过硬件自动处理,决定哪个主机能够获得总线控制权。

获取总线控制权:仲裁之后,只有一个主机设备会成功获得总线控制权,并继续发送数据。它会根据I2C协议规定的操作步骤发送地址、数据等信息,并等待响应。

释放总线:主机设备在完成数据传输后,会发送Stop Bit信号,用于表示传输结束并释放总线控制权。发送Stop Bit时,主机将SCL保持高电平,而SDA由低电平转为高电平。

七、IIC总线仲裁

1. 仲裁的前提条件

  • 多主机模式:总线上连接了多个可以发起通信的主机设备。
  • 同时发起请求:多个主机同时检测到总线空闲,并几乎在同一时刻发送起始条件,试图控制总线。

2. 仲裁的核心原理

仲裁是一个逐位比较的过程,它依赖于I²C总线的 “线与” 逻辑特性:

  • 总线的SDA(数据线)状态由所有主机共同决定。任何一个主机输出低电平‘0’,都会将总线拉低;只有当所有主机都输出高电平‘1’时,总线才为高。
  • 在传输地址和数据的过程中,每个主机在发送一位数据后,会立即读取SDA线上的实际电平,并与自己刚刚发送的位进行比较。

3. 仲裁过程

  1. 多个主机同时开始发送数据(起始位、从机地址、读写位等)。
  2. 在发送每一位时,所有主机都会监听总线状态。
  3. 仲裁失败:如果某个主机发送了高电平‘1’,但监听到总线实际为低电平‘0’,这说明有另一个主机正在发送‘0’并赢得了这一位。此时,该主机立即意识到自己仲裁失败。
  4. 退出竞争:仲裁失败的主机会自动关闭其数据输出驱动器,并转入“从机接收器”模式,停止发送数据,等待总线再次空闲。它不会干扰获胜主机的继续传输。
  5. 仲裁获胜:整个过程会持续进行,直到只剩下一个主机发送的数据与总线状态完全匹配。这个主机便赢得了仲裁,完整地控制总线,并继续完成其剩余的数据传输,就好像冲突从未发生过一样。

嵌入式软件工程师面试完全指南

面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3200+订阅还会涨价,提前订阅提前享受,持续更新中。

原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM

全部评论

相关推荐

10-21 17:42
酷酷的喜马拉雅山:你为什么发我的offer列表?
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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