嵌入式开发学习日志39——stm32之I2C总线物理层与常用术语

在简单的了解完前面讲述的stm32的串口通信之后,让我们把目光转向串行总线I2C,其用于连接微控制器以及外围设备,同时也是一种被广泛采用的总线标准。

I2C通信设备的物理层具有诸多特点,不过在讲述这些特点前,我们先要对一些术语有些了解。

主机:启动数据传送以及产生时钟信号的设备。

从机:被主机寻址的器件。

多主机:同时多个主机尝试控制总线但不破坏传输的情形。

主模式:用I2CNDAT支持自动字节计数的模式。

从模式:发送和接收操作都由I2C自动控制。

仲裁:当多个主机在同一时间想要控制总线但只允许其中一个控制并进行传输并不破坏传输的过程。

当了解完这些术语之后,下面正式介绍物理层的一些特点。

首先I2C是一个支持多设备接入的总线,这些设备共用这一根线,而接入总线的通讯设备就是上面提到的主机以及从机。

一个I2C总线只有两条线路,一条被称为双向串行数据线,顾名思义,就是用来发送数据(半双工,并非全双工),另一条是串行时钟线,用于数据收发的同步。

当主机或者从机接入到I2C总线之后,都会被分配到一个独立地址,这个地址有什么用呢?在主机顺着总线想要找对应的从机时,就要通过寻址的方式找到从机的独立地址,进而对从机进行访问。就像课堂里老师用学号点名,每个人都有各自的学号,那么老师要知道你去没去上课,只需要看点学号之后有没有人回应即可。

I2C总线一般通过上拉电阻连接到电源,在空闲时,会输出高阻态,如果所有接入总线的设备全部空闲,此时I2C就会通过上拉电阻自动将电平拉到高电平。注意,这里使用I2C进行输出时,设置的是开漏输出模式,而非我们常用的推挽输出。

既然I2C接入了这么多设备,那当多个主机同时要使用总线,岂不是分不清谁是谁了么?欸,这里就用到了上面提到的仲裁的方式来避免这样的情况发生。

I2C总共有三种传输模式,按照传输速率划分,可以分为标准模式(100kbit/s),快速模式(400kbit/s),常用的也是这个,还有高速模式(3.4Mbit/s),但是绝大多数的I2C设备不支持高速,所以这里也不推荐。

既然提及了通信,光有物理层肯定是不够的,下一章会详细讲述有关I2C的协议层部分,看看I2C通信数据的传输都有什么标准和限制。

相关推荐
d111111111d24 分钟前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-1341638421228 分钟前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
charlie11451419137 分钟前
通用GUI编程技术——图形渲染实战(三十八)——顶点缓冲与输入布局:GPU的第一个三角形
开发语言·c++·学习·图形渲染·win32
我想我不够好。1 小时前
监控学习 4.29 1.5hour
学习
晓晓hh1 小时前
JavaWeb学习——JUnit和日志
学习·junit·单元测试
小超同学你好1 小时前
Transformer 30. MoCo:用「动量编码器 + 队列字典」把对比学习做成可扩展的“字典查找”
深度学习·学习·transformer
光影少年1 小时前
前端SSR和ssg区别
前端·vue.js·人工智能·学习·react.js
筱_智1 小时前
Docker学习-超详细-通俗易懂(从入门到精通)
学习·docker·容器
一个平凡而乐于分享的小比特2 小时前
一文读懂MCU与FPGA:核心区别、协同之道与双修秘籍
单片机·fpga开发·职场发展·mcu开发
噜噜噜阿鲁~2 小时前
python学习笔记 | 8.2、函数式编程-返回函数
笔记·python·学习