📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载注明出处
I2C答疑点
疑惑:这个函数已经声明了,为什么还是显示这个警告?
答复:原因是头文件里面的if def名称跟文件名没对上。
修改后,函数名显示正常,能正常跳转。
疑惑:I2C验证,如何接线,环境怎么搭建?
答复:
1、主板子的SCL引脚(时钟线)连接到从板子的SCL引脚。SCL用于同步主从设备之间的数据传输,确保数据在正确的时刻被接收和发送。
2、主板子的SDA引脚(数据线)连接到从板子的SDA引脚。SDA用于传输实际的数据,包括地址信息、控制指令和数据字节等。
将主版的数据线和子版的数据线连在一起,时钟和时钟线连在一起,然后再分别接一个上拉电阻
3、 还需要将主从板子的电源和电源引脚,地线和地线都要连在一起。
但是我看代码中选择SCL和SDA的PIN是根据I2C的类别来的,所以怀疑3609是不是支持多个I2C总线?
疑惑:I2C上拉电阻的作用?
答复:I2C协议规定总线处于空闲时为高电平状态。这样通过判断总线当前是否为空闲状态。
还有一个就是想要实现"线与"。
疑惑:什么是上拉电阻、下拉电阻?
答复:上拉电阻连接到电源正极,会使连接点的电平被拉高到电源电压附件。下拉电阻反之。
作用就是使与上下拉电阻相连的引脚处于高电平或是低电平的状态。
疑惑:I2C总线,为什么要实现"线与"?
答复:I2C总线允许多个主设备和从设备连接在同一个总线上。
借助"线与"机制,就可以避免访问冲突。
比如:两个主设备几乎同时想要向从设备发送数据,当其中一个主设备率先拉低总线时,另一个主设备通过检测总线电平变化,就知道当前总线已被占用,进而调整自身的发送时机。
疑惑:上下拉电阻值一般是多大?
答复:一般在1k欧到10k欧之间。
疑问:如何解决I2C总线上多个主机访问的冲突?
答复: 通过I2C总线仲裁。
疑问:详细解释下I2C的总线仲裁?
答复:当两个主机在总线空闲的时候都产生了一个有效的起始位,这种情况就需要决定由哪个主机来完成数据传输,也就是仲裁的过程。
仲裁的原则是"低电平优先",即谁先发送低电平谁就掌握了对总线的控制权。
其次,仲裁的过程跟从机无关。
疑问:一个I2C总线上最多可以挂载多少个从机?
答复:I2C从机的地址长度位7bit,因此理论上,只要地址不同,一个主机可以挂在2的7次方个从机,即128个。但是从机数量增加会导致总线寄生电容增大,影响通讯质量。因此在实际应用中,一般最多不超过8个,总线容量控制在400pF以内。
疑惑:I2C的应用场景有哪些?
答复:一般用于跟传感器通信。温湿度、气压、运动、红外等传感器。
疑惑:为什么I2C常用于传感器之间的通信?
答复:
1、 I2C只需要两根线就可以与设备连接,而传感器通常体积较小,引脚数量有限。
2、 I2C多主多从的结构,允许一个总线上挂在多个传感器,不需要额外的片选线,简化了布线。比如一个电路版上同时连接温度传感器和光传感器,共用I2C总线就能节省资源。
3、 I2C速度方面虽然不及SPI,但是对于大部分传感器都足够了。
4、 其次,功耗低。
疑惑:I2C在项目中如何体现使用经验?
答复:比如通过I2C协议控制XX传感器。这里尤其是摄像头,虽然我们之前有项目经验,但是对于图像数据的传输,I2C支持不了。
那就只能在其他项目中加入这个接口协议了。
疑惑:I2C时序问题?
答复:
开始信号:SCL为高电平时,SDA电平由高变低。即出现下降沿为开始。
结束信号:SCL为高电平时,SDA电平由低变高。即出现上升沿为结束。
读取数据:SCL为高电平时,SDA保持稳定。数据传输为MSB,高位优先。
应答机制:每传输8位数据,接收方就要发送一个应答信号ACK,即低电平,表示成功接收。
疑惑:单片机支持多个I2C接口吗?
答复:是的,大多数STM32系列至少支持2个独立I2C接口(I2C1、I2C2),高端型号会支持3个I2C接口,每个接口都有不同的引脚分配。
疑惑:I2C的速率只有一个吗?
答复:不是。有标准模式和快速模式,前者速度可达100kbit/s,后者可达1000kbit/s
疑惑:I2C主机和从机数据发送和接收是这样一个过程呢?
答复:
疑惑:如何界定主机和从机?
答复: