STM32 您所在的位置:网站首页 stm32模拟i2c最大速度 STM32

STM32

2024-03-05 21:28| 来源: 网络整理| 查看: 265

文章目录 I2C基本概念+硬件线路+通信结构:I2C设备地址:I2C数据传输:I2C时钟速度和通信速度:I2C应答机制:I2C设备之间的冲突检测:I2C设备规格:主机读取数据IIC通信过程实际编程和应用:IO 口模拟 IIC 总线常见的I2C通信错误类型和故障排除方法使用IIC通信常见外设深入学习高级特性:

I2C基本概念+硬件线路+通信结构:

概念 I2C是一种串行同步通信协议,用于在集成电路之间进行通信。 硬件路线 I2C使用两根线进行通信:串行数据线(SDA)和串行时钟线(SCL)。 通信结构 I2C使用主从结构,其中主设备发起通信并控制通信的节奏,从设备响应主设备的请求。从机通常不会主动给主机发送数据,一般为主机给从机发送读取指令后,从机才给主机发送数据。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。 在这里插入图片描述 不能在IIC通信总线上接入无限多个设备的原因: 1.地址冲突:在IIC总线上,每个设备都需要有一个唯一的地址。地址通常由设备的硬件引脚配置。然而,IIC地址字段的宽度有限,这意味着地址空间是有限的。当连接的设备数量超过地址空间的限制时,设备之间可能会出现地址冲突,导致通信失败。 2.总线负载:每个设备在IIC总线上会产生一定的负载。总线的负载是指总线上的所有设备对电流和电压的需求。当连接的设备数量增多时,总线负载会增加,可能导致通信速度变慢或信号失真。 3.电气特性:IIC总线的电气特性是有限的。总线上的设备之间通过开漏或开漏/开漏极性输出进行通信。然而,当连接的设备数量过多时,总线上的电气负载可能超过IIC规范的限制,导致通信错误或电气稳定性问题。 一些基础概念 SDA:双向串行数据线,数据既可以从主机发送到从机,也可以从从机发送到主机。 SCL:串行时钟线,驱动数据线的信号由 SCL 产生。 主机:主机产生串行时钟(SCL)控制总线的传输方向,并产生起始条件(占用总线)和停止条件(释放总线)。 从机:从机不会控制 SCL 线,从机可以发送数据给主机,但是从机永远不可能主动发送数据给主机。 发送器:发送数据的一方 接收器:接受数据的一方 。 仲裁器:解决多主机模式下竞争总线的问题。(通常情况下我们遇到的都是单主机模式,一主多从) 总线的空闲状态:SDA 和 SCL 都是高电平 重复起始条件(一般不提,跟普通通信一样但是能够切换主从机):I2C(Inter-Integrated Circuit)协议中的重复起始条件(Repeated Start Condition)是一种特殊的通信方式,允许在不断开总线的情况下切换主机和从机,并进行连续的数据传输。

I2C设备地址:

主机如何能找到对应的从机与其进行通信?——设备地址 每个I2C设备都有一个唯一的7位或10位地址,用于在总线上唯一标识设备。 7(4、3)位地址模式下,可以有最多128个不同的设备地址(0x00至0x7F)。 10位地址模式下,可以有最多1024个不同的设备地址(0x000至0x3FF)。 器件地址包含固定地址(由厂家决定)和可编程地址(由使用者决定)——参考手册。 7位地址编码方式: 在7位地址编码方式下,从机设备的地址由7个位组成,范围是0x00至0x7F(0至127)。其中,最高位(MSB)通常由I2C总线规范中保留,用于指示读/写操作。读操作对应的最高位为1,写操作对应的最高位为0。 例如,一个从机设备的7位地址为0x50(十进制为80),对应的二进制表示是0101000(其中最高位为读/写位,0表示写操作)。 7位地址编码方式是I2C通信中最常用的方式,适用于大多数应用。 10位地址编码方式: 在10位地址编码方式下,从机设备的地址由10个位组成,范围是0x000至0x3FF(0至1023)。其中,最高两位(MSB)用于指示读/写操作和扩展地址位。 扩展地址位提供了更多的地址空间,可以用于连接更多的从机设备。在10位地址编码方式下,前六位(位7至位2)用于指定扩展地址位,后四位(位1至位0)用于指示读/写操作。 例如,一个从机设备的10位地址为0x235(十进制为565),对应的二进制表示是1000110101(前两位为读/写位和扩展地址位)。 10位地址编码方式相对较少使用,主要用于连接大量的从机设备。 如何寻址? 在I2C通信中,主机设备可以选择与多个从机设备进行通信,每个从机设备都有一个唯一的地址。通过在地址字节中指定正确的从机设备地址,主机可以选择与特定的从机设备进行通信。 7位和10位就是一个从机多一些。 在这里插入图片描述

I2C数据传输:

I2C使用起始条件(Start Condition)和停止条件(Stop Condition)来标识数据传输的开始和结束。 数据传输可以是字节(Byte)级别的,也可以是多字节(Multi-Byte)级别的。 主设备通过将数据位推送到SDA线上发送数据,从设备通过SDA线接收数据。 I2C传输模式: I2C支持两种传输模式:发送模式(Master Transmit)和接收模式(Master Receive)。 在发送模式中,主设备向从设备发送数据。 在接收模式中,主设备从从设备接收数据。 数据帧格式: 起始条件(占用总线)+数据位(8 位,发送方发出,一般为7位地址位和1位读写位)+应答位(1 位,接收到 1 个字节数据的 一方要回一个应答,0 有应答,1 非应答)+数据传输(8位)+停止条件(释放总线)

I2C时钟速度和通信速度:

I2C通信的时钟速度由主设备控制。 标准模式下,时钟频率为100 kHz。 快速模式下,时钟频率为400 kHz。 高速模式和超高速模式下,时钟频率可以更高,但具体取决于设备和总线的支持能力。 IIC 总线通信速度: 低速:100Kbit/s 快速:400Kbit/s 高速:3.4Mbit/s

I2C应答机制:

在每个数据字节传输后,接收设备会发送应答位(ACK)以确认接收到数据。 如果接收设备成功接收数据,它会拉低SDA线发送ACK信号;如果无法接收或不希望接收,它会保持SDA线为高电平发送NACK信号。 应答的发送和接收: 在这里插入图片描述

I2C设备之间的冲突检测:

I2C总线上的多个设备共享同一对SDA和SCL线。 为了避免冲突,一般使用以下两个方法:

尽量保持地址唯一性。总线仲裁,I2C使用仲裁机制来检测总线上的冲突情况,并由冲突检测的设备放弃发送数据。I2C总线使用开漏架构,这意味着设备可以拉低SDA线,但不能将其拉高。当两个或多个设备同时尝试将SDA线拉低时,发生冲突。在总线仲裁过程中,设备根据自身的地址优先级决定是否继续发送数据或放弃发送,以解决冲突。 总线仲裁的过程是通过设备对SDA和SCL线的观测来实现的。如果一个设备发送的数据与总线上的数据不匹配,它会立即检测到冲突并停止发送。然后,它会等待总线空闲,并重新尝试发送数据。错误重传和硬件检测两个方式一般不用,大致就是错误重传是在检测到应答机制非正常或者数据传输非正常时候,使用IIC控制器和软件来重复传输数据(设置最大重复传输次数。)硬件检测就是检测时钟线和数据线的高低电平变化,来确定传输错误原因。 I2C设备规格:

熟悉要使用的具体I2C设备的规格说明、数据手册或参考资料。 学习设备的功能和特性,包括寄存器、命令、数据格式等。

主机读取数据

在这里插入图片描述

IIC通信过程 主机发送起始条件(占用总线)——在 SCL 为高电平时,SDA 产生一个下降沿主机发送器件地址(寻找从机)在当前总线上的从机会将此器件地址跟自己对比,匹配成功就会回一个应答给主机。其他从机继续休眠。主机和从机就可以建立通信,在这个过程中,接收方每成功接收到一个字节数据必须要给发送方一个应 答,如果发送方等不到应答则标志通信失败。主机发送停止条件(释放总线)——在 SCL 高电平期间,SDA 产生一个上升沿 MSB:高位 LSB:低位 数据位传输是高位在前 在这里插入图片描述 在这里插入图片描述 实际编程和应用:

初始化I2C接口、配置通信参数、发送和接收数据。参考代码:

void IIC1_Pin_Init(void) { //PB6----SCL---推挽输出 //PB7----SDA---开漏输出 RCC->AHB1ENR |=0x01


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有