最后更新:2022-05-13 15:43:01 手机定位技术交流文章
菲尔普斯创立了I2C通讯协议(综合电路)。由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等外部通信设备。 (平板转换芯片。 )系统内许多集成电路之间的通信正变得司空见惯。
I2C只有一个数据总线,即 " 序列数据线 ",用于一对一的数据传输和序列通信。半双工通信
就I2C通信议定书而言,它分为物理层和议定书层的物理层,界定具有机械、电气(硬件)部件的通信系统的特征,保证物理媒介的原始数据传输。协议的数量从根本上界定了通信逻辑。接收者和发送者的数据包装和包装标准标准化(软件一级)。
I2C是连接通信装置的常用方法。
(1) 它是支助设备的公共汽车线路,“住房”是指几个装置共用的信号线,多I2C通信装置可在I2C通信公共汽车上连接,以支持多个通信主机和多个通信运营商。
(2) 单一辆I2C公共汽车只需要两条公共汽车线。过去曾形成双向数据线SDA(系列数据线)字符串。SCL( 序列数据线) 是一系列的时钟线 。数据线用于表示信息。时钟线用于同步输入和输出数据 。
(3) 当I2C装置是免费的时,主线通过上下推动获得电力供应。会输出高阻态等所有设备齐备后走出高抗力模式后,将公交车换成高空模式。。
请参阅GPIO港的八种经营方式。

输出输出 PMS 功能不起作用 。
一. 当内存输出为高水平时,则使用相当于()的拉出高耐力。开路(b) 如果在I2C SDA大巴上到达脚,默认情况下将公交车拉到高水平。
二. 当输出内存输出为低水平时, 脚输出也是低水平的 。

复用功能开漏输出
但是,您可以重新使用功能模式、输出能量、输出速度配置和功能性泄漏模式。输出信号来自其他外部因素(I2C)。, GPIOx_ODR 输出数据登记册有错误;有输入,输入数据登记册后得出当前 I/O 状态 。然而,数据信号通常直接从场外登记册中采集。
SMT32, I2C 外推的双腿自失能装置在此使用,而 SCL 程序可以重复函数的泄漏输出模式和从 I2C 外推获得的输出信号。
你为什么想要激活泄漏模式?
以及为什么两条公共汽车线不得不拖到高水平, 巴士假定是高水平, 如下图所示。
为什么SDA和SCL必须出口高耐力(相当于取消与SDA和SCL公共汽车的连接),而该设备显然为了不干扰其他通信设备的目的不活动?
(4) 为了避免数据冲突,当许多主机同时使用公交车时,仲裁被用来选择使用公交车的哪些设备,即在提供数据之前,设备将检查I2C公交车是否繁忙(公交车的繁忙程度应较低)。
(5) I2C有三种传输方式:标准模式传输率为100千比特/秒,快速模式传输率为400千比特/秒,高速模式传输率最高为3.4百万比特/秒,然而,目前大多数I2C设备不使用高速模式。
连接公交车的每个设备都有自己的地址, 主机可以使用这些地址与其他设备进行通信。 地址也是信息。 匹配成功后, 主机可以使用自失能车提供的地址出去, 公交车上安装的设备将相互匹配, 彼此沟通 。
STM32可用作主机或附属物品,本篇文章将重点论述如何将STM32用作读写数据的主机。
只有从主机, I2C 设置通信时钟, 开始并停止信号 。
以下是SPM32主机 带有EPROM内存的一个例子。

表示由主机的 I2C 接口创建的传输启动信号(S),该信号将在初始信号产生后从机器接收,用于与 I2C 公共汽车的所有连接。 初始信号产生后,将建立主机的 I2C 接口创建的传输启动信号(S)。 初始信号产生后,所有与 I2C 公共汽车连接的传输启动信号(S)将从机器接收。
在I2C巴士上,从航班地址(SLAVE_ADRESS)上。每个装置的地址是唯一的当主机广播地址与设备匹配时,设备会被选中,数据信号(高抗力输出和两条主线被切断)被未选中的设备忽略。
根据 I2C 协议, 这可以是机器的 7 或 10 位数, 当机器收到匹配的地址时, 主机或从机会返回 ACK 或 NACK 信号, 而主机只能在收到回复后继续传输或接收数据 。
地址之后是选择传输方向,指明其背后数据传输的方向。
0时,主机主机将从机器上写入数据。
机器的数据由主机在1点钟读取。
记住,数据接收方产生响应信号(对我来说,对于我,对于数据)或不反应信号(对于我,我不想要数据)的并不总是主机。

读或写内部登记册或内存地址以上数据是最后确定的。I2C大巴的两个信号线,即SDA和SCL, 在同一时间都是高功率的,大巴闲置,大巴上安装的所有设备都高度耐力(相当于与大巴断线),两条大巴线被高耐力塞拉高。
当SCL线从高线转到低线,而SDA线则高线时,这是一个起始信号。
当短链氯化石蜡处于高水平时,自失能装置线从低线转到高线。
注意:
SCL是高级、自失能和自失能装置的程序,而不仅仅是低和低级别程序,被称为初始和停止信号。
只有主机才能产生开始和停止信号

SDA数据线每个SCL时钟周期(时钟脉冲)携带一个数据包。
SCL是一个高等级的时期,这意味着数据如SDA所显示的那样是真实的,SDA的水平是一致的,数据是高等级的“1”和低等级的“0”。
SCL是一个低级协议:SDA数据无效,通常在目前进行。电平切换准备下一次数据指示。
8比特/字节用于传输数据和地址。先传输数据的高位发送的字节数量不受限制。
I2C总线上每个设备都有自己的独立地址,主机在SDA信号线上传送设备地址(SLAVE_ADPRESS),当它开始通信时,该设备在SDA信号线上。I2C协议允许设备地址为7或10位,视设备而定。更多使用7位数的地址。设备地址附近的数据位置用于识别数据传输方向,即第8位或第11位。

首要机会是控制SDA信号线的发射,控制机器上的SDA信号线(将数据传送到主机),接收主机的信号,写出数据方向,SDA由主机控制(将数据传送到机器),在读取数据方向时接收机器的信号。
I2C 数据和地址传输在作为数据接收器发挥作用的同时,也得到了反应。 答复包括“ 回复( ACKs) ” 和“ 非回复( NACKs) ” 的信号。数据接收结束(不论主机是否主机)在从 I2C 收到字节数据或地址后,允许您继续发送数据 。重要的是将“ACK”信号传送到贴有标签的“Access to the ACK”(Acquis)”和“Access to the ACK”(ACK)(Acc)信号的标签上的另一面。如果接收方决定终止数据传输,交付方将发送以下数据。寄到另一边的贴有标签的“NACK”(“NACK”), 然后寄到另一边的“NACK”(“NACK”), (“NACK”), (“NACK”), (“N-N-N-K”), (“N-N-N-K”), (“N-N-N-K”), (“N-N-K), (“N-N-K”), (“N-N-K”), (“N-N-K), (“N-N-K), (“N-N-K”), (“N-N-N-K), (“N-N-K”), (“N-N-K”), (“NN-N-K), (“NN-N-K”), (“N-N-K)), (“N-N-K”), (“N-N-K”), (“N-N-K”), (“N-K”) (“N-N-K”)。当发送者收到信号时,它产生一个停止信号。结束信号传输。
八小时后,一个字节传输。第9个时钟期间,接收器必须返回发报机的响应位置(ACK)或无响应位置(NACK)。
大约九点左右SDA控制由数据发送人发布。数据接收器控制自失能系统,向发送者发送响应或无响应信号。
高空是自失能(SDA):无反应信号(NACK)。
SDA是一个低级信号:回答信号(ACK)。
为什么数据发送器放弃自失能控制(将自失能总线提高到高水平)?
我不得不吐口水 在这个硬件I2C 在谈论它之前。当它被困在事故测试中时 迟早会来不及了在重新启动之前关掉电源至关重要。然而,可能存在硬件I2C问题。今后也许没有必要这样做,但我们大多正在研究如何使用硬件达成国际2C协议。这将有助于我们以后学到其他东西。
I2C 硬件: 直接利用STM32芯片中的 I2C 硬件,硬件 I2C 与USART 序列端口相似,因为它生成标准序列协议时间序列,只要正确注册即可。利用外部的I2C是一种方便的办法,以I2C议定书的形式控制I2C的场外通信,而不需要内核直接操作触发器的火花。。
I2C软件模拟:I2C协议要求直接使用CPU内核,以控制全球定位系统组织的低水平和高水平输出。如果控制生成初始 I2C 信号,脚输出的高端输出最初由作为SCL线的GPIO控制。然后,GPS基点作为SDA线加以控制,以在这一间隔期间完成从高水平向低水平的转变。最后,将SCL线开关设为低。这将生成正常的 I2C 启动信号 。
为规范基础,I2C硬件直接利用外部设置。它减少了CPU的负荷。。不过使用作为SCL和SDA的固定拖脚的I2C装置。要启动程序, 程序会使用任何 GPIO 复制 I2C 。 它相对适应性较强 。

在STM32中,有两种I2C配置,而硬件I2C是使用这些引信所必需的,因为它们与I2C连接,例如I2C1外部,PB6和PB7附在装置内。
例如,使用了正原子的STM32mini版本。东道主(stm32)使用PB6、PB7作为SCL和SDA脚。但是,PB6和PB7与EPROM的SCL没有联系,我们需要与之互动。SDA的足线是I2C巴士PC12和PC11链接到EEPROM的SCL。SDA引脚,所以我们用Dubon线 连接PB6和PB7 PC12和PC11这将间接安装PB6。PB7与EEPROM的SCL和SDA脚相连。组成I2C总线。
如果您使用 I2C1 与 EEPROM 进行互动,而不将 PB6 和 PB7 连接到 EEPROM 的 SCL, 如果您写花朵, SDA 将是无用的 。
原理图:
实物图:
时钟控制寄存器


由于I2C1安装在APB1总线上,所以它是Tpclk1。
这只是一个如何计算发件人的数值的示例。 我们只需要通过使用图书馆功能来指定相应的登记册参数。 图书馆功能会帮助我计算自动写作。 不要吓坏了 。

在发送数据时,数据传输登记册使用数据储存库,通过SDA信号线一次传送数据。
数据传输登记册在从外部接收数据时,将数据从SDA信号线上的数据保存在数据登记册中单一地点。
数据随后通过CPU或DMA书写或读到数据登记册(通过一个阵列储存在一个阵列中)。
数据寄存器DR
自身地址寄存器1

在此选择几个密钥保存器槽, 然后配置 I2C 远程硬件逻辑, 以自动控制 SDA 和 SCL 巴士, 生成 I2C 协议时间序列, 如: 启动信号、 响应信号、 停止信号等等 。


以下是我们发现:
在在地址或数据字节传输期间,如果 I2C 接口检测到一个公交车错误是由外部停放或启动环境造成的。。此时:
Berr 位数设为“ 1 ” ; 如果设置 ITREREN 位数, 就会发生中断 。
• 在模型假设中删除数据,硬件释放总线:
─ 如果是错误的开始条件,等待地址或停止状态。
─ 如果是错误的停止条件,在正常停机条件下运行设备,然后放行硬件巴士。
• 在主要模式下,硬件不会在不危及目前传输状态的情况下放弃公共汽车,而是由软件来终止目前的传输。
主机模式与从机模式
当 STM32 检测到一个非响应空档时出现回答错误 。
• 武装部队的职位已经到位,如果ITERREN的职位已经到位,就会出现中断。
• 如果发件人收到 " NACK ",信息必须重复:
- 如果在模式,释放硬件公交车。
─ 如果是处于主模式的软件必须创建停止状态 。。
在从模式下当时钟不延长时, I2C 接口接收数据。收到了一字节(RxNE=1),但DR登记册中的前一字节数据没有读出。时出现负载问题。此时此刻:
• 放弃最后收据数据。
• 如果出现超载故障,程序应删除RxNE比特,发送者应重新发送最后交付的字节。
在从模式如果时钟无法延长, I2C 接口正在发送数据 。在下一个字节时间到来之前,新的数据尚未放入DR登记簿(TxE=1) 。出了错,此时此刻:
• 在DR数据库中初始字节会重复 。;
• 用户应确定,如发生负载错误,接收端应删除收到的重复数据,发送者必须按I2C总线标准在必要时间更新DR登记册。
解甲返乡登记簿必须在解甲返乡方案清除后写成,第一个SSCL在转发第一个字节的同时上升;如果这不可行,接受者应无视最初的数据。 ]
STM32 应该是连续不时用 10 字节来写入和读取数据, 示例主机使用 10 字节, 当发生错误时您只传送 5 字节 : 在下一个字节时钟到来之前, 新的数据尚未放入 DR 登记册 。


I2C模式选择:
该接口可以用四种不同模式之一使用:
● 从发送器模式
● 从接收器模式
● 主发送器模式
● 主接收器模式
默认情况下,该模块从模式运行。 界面。生成启动条件后, 从模式自动移动到主模式 。当仲裁失败或发出停止信号时,从主模式向模式转换模式。
在这里,我基本上使用 SSM32 来进行主机通讯。
I2C主模式:
默认情况下, I2C 接口总是从模式到模式的函数。要从模式过渡到主模式,必须提供一个起始条件。
在主模式中, I2C 接口启动数据传输并创建时钟信号 。当序列数据传输开始时,它总是从起始状态开始,到停止状态结束。裁武条约的位置在公共汽车上创造了启动条件,设备进入了主模式。。


当设置 START=1 时, 当 BUSY = 0 设定时, I2C 接口将产生起始状态和向主模式( M/ SL 位置)的过渡。
在启动要求得到满足之后,我们必须确定SB是否有1,启动信号是否成功发送。
• SB比特位于硬件中,如果ITEVFEN比特设好,就会发生中断。
主设备然后等待阅读SR1登记册,该登记册从DR登记册的地址中写出。

从机地址的发送
• 只有一个字节以7位数的地址模式提供。
一旦地址字节被发送,
- 硬件设置 ADDR 位, 如果 ITEVFIN 位设置, 就会发生中断 。
主设备然后等待SR1登记册在进入SR2登记册之前阅读一次。
主设备根据发送地址的最低位置选择是否输入发报机或接收模式。
• 使用7位数地址时,
- 要输入发件人模式,主设备是从“ 0” 的最低地址传输的。
- 要输入接收模式,主设备从地址“ 1” 的最低位置发送。
当计算机回复完成后,EV6事件是通过从机器地址发送而发现的:
为确保下一份数据从机器传送到机器,如果未发现未发送地址或未答复,你应立即向谁传送数据?
EV8_1事件:
当提供地址时,将进行这一测试。在现实中,我们需要做的就是测试EV6事件。地址(数据)是在EV6成功之后发出的。而且从机还应答了,为填写正数据登记册,提供了地址。我敢肯定,它是空的。所以不检测也可以。
EV8事件

发送后, 我们必须检查数据登记册是否为空 。数据登记册是空的(TXE),因此可以输入新的数据;否则,先前的数据没有移到移动的登记册,而编写新数据的CPU将覆盖先前的数据olda登记册是空的(TXE),因此可以输入新的数据;否则,以前的数据没有移到移动的登记册,而编写新数据的CPU将覆盖先前的数据。

EV8_2事件
发送最后字节后, 我们应该测试 EV8_2 事件, 特别是 BTF 位 。
为什么 这是测试数据传输登记已完成所有数据的发送。,最后的字节是交付的。
关闭通信
在将最后字节放入 DR 登记册后, 设置 STOP 位后产生停止状态, I2C 接口自动返回模式( M/ S 位清除 ) 。
由于STM32是接收器,STM32也是主机,主机必须同时提供初始信号和地址发出的信号,EV5、EV6、EV6_1事件与主接收器相同。

CPU可在接收数据之前读取数据登记册中的数据,确定数据储存库是否可用,数据登记册是否为空(RNXE)。
在从设备接收最后一个字节后,主设备发送了一个 NACK 。收到NACK后从设备中删除对SCL和SDA线的控制。主要装置具有传递中继/重新启动状态的能力。背面接收字节时不生成答复,不视为答复。
此外,东道方还将收到停机信号。
CPU然后通过评估EV7事件从数据登记册获得最后字节数据。
只要你意识到写法代码不是手帕, 它就直截了当, 你会传送它, 硬件 I2C 写法代码必须知道和理解主发件人的操作 和主接收器理解你意识到 写法代码不是手帕, 这是直截了当的, 你会传送它, 硬件 I2C 写法代码必须知道和理解 主发件人和主接收器的操作。

设置 I2C 传输率, 我们输入的值不得超过 400 KHz 。
初始化功能将把时钟因数写入 I2C 时钟控制存储器 CCR, 取决于我们输入的值和后来的空间比率参数。
CCR登记册不能列入小数点型的时钟系数,影响SCL的实际频率可能低于该成员指定的参数值,对普通的I2C通信没有影响,只有较慢的通信除外。
初始化函数
选择 I2C 模式 (I2C_ Mode_ I2C) 和 SMBus 主机模式 (I2C_ Mode_ SMBusHost, I2C_ Mode_ SMBusDevice) 。
指定 I2C 的 SCL 时钟的间距比。 有两个选项: 2:1 (I2C_ DutyCyCycle_ 2) 和 16: 9 (I2C_ DutyCycle_ 16_ 9) 。
你选它也没什么区别
STM32中的I2C设备配置有自己的地址,与I2C总线连接的每个设备必须有自己的地址作为主机。
如果地址在I2C公共汽车上,可调整为7或10。唯一的即可。
可能真的有两个地址; 这是第一个地址。
第二个地址应使用不同的图书馆功能设定,不超过7个位。
设置此选项可允许 I2C 响应发送响应信号。 当 SPM32 接收 IPM32 数据时, 允许响应( I2C_ Ack_ Enable) 的通用配置将自动创建一个回答, 必须启用它 。
选择 I2C 是否在 7 或 10 个地点存在 。这需要根据装置与I2C总线的物理连接情况作出决定。I2C_OwnAddress1的成员同样也受到这一成员的影响。只有当模式设定为 10 位时 。I2C_OwnAddress1 最多只能允许十个地址 。
设置完成后, 请拨打 I2C 启动程序 。
记得使能I2C外设

EEPROM是一种可电解、可编程、只读的内存,具有全称电子可读和可编程可读内存。在这里,阅读的唯一方法就是不阅读。以前,光盘只能读而不是写。可读取EEPROM。为什么它被命名为可读:它只是一个被遗忘的名称。
原理图:

WP引脚直接
EEPROM(作为中间器)的设备地址
EEPROM的I2C硬件
I2C协议也管理EPROM通信,它产生第一个信号,停止传输,并对一切作出反应。

书写的八字节是相继地址,除非是连续的,否则无法写出页面。

总结:
我什么也做不了,因为按照规则,我会犯错
这是什么意思?EPROM对我们来说是一个非丢失的储存媒介(电力损失不造成数据损失)。它的功能类似于计算机中的硬盘。阅读和写作需要很长时间。因此,在STM32传输数据后,等待 EEPROM 将数据写入自己的内部内存,然后写入下一波数据(单字节或页)至关重要。除非你等EPROM把最终数据放回EPROM 否则你无法谈论它这表明EEPROM正在使用。
检查是否已经写入 EEPROM 数据 :
用STM32主机继续提供EEPROM的启动信号,然后提供EEPROM的设备地址,以回应EEPROM的反应。如果没有,请重复,直到EEPROM代表EEPROM先前数据作出的答复完成后再传送下一个数据!

EEPROM拥有256个字节,相当于(0255)。
读完最后一个字节后, 即255, 第256个字节, 您重新开始( 第一个字节数据) 。
作为主机,STM32从EPROM内存中写出256字节。
作为主机,STM32读取储存在EPROM内存的数据256字节。
阅读和写作获得绿灯,而写和读取得到红信号。


编程要点
(1) 将用作通信泄漏模型的目标配置;
(2) 开发控制功能,复制I2C时间序列。
(3) 开发基本的I2C附带功能;
(4) 为阅读和写作准备EEPROM存储内容的职能;
(5) 制定测试方案,以验证数据读写。
PB6和PB7都易燃。
这里有一个联络点。 您被设置为输出模式, 对输入函数没有影响 。
详情请看——>
GPIO端口的八种工作模式

i2c_ee.h
理论已经相当全面了,所以请继续 代码号喇叭!
i2c_ee.c
main.c
集中注意如何解决下页的写作问题,以便实现连续的写作。
现在,让我们看看代码的底部功能 是如何解决问题的。
如果地址对齐:

如果地址不对齐:

作为主机,STM32从EPROM内存中写出256字节。
作为主机,STM32读取储存在EPROM内存的数据256字节。
阅读和写作获得绿灯,而写和读取得到红信号。
我们的CPU控制 I2C 软件模型 生成 I2C 时间序列。因此,我们可以选择任何选择。但是,你选择的脚必须连接到EPROM的SCL和SDA。这是PC12,由PC11担任主机STM32SCL。SDA引脚。







i2c_ee.h
i2c_ee.c
main
没有看到I2C硬件的同样影响。
无论它是硬件I2C还是软件I2C,不管它们的长处和缺点如何,理解IC2协议对于实现进程至关重要。由于它经常使用,I2C必须集体讨论它,最后,如果该条的实质内容有疑问的话!
本文由 在线网速测试 整理编辑,转载请注明出处。