I2C协议的解析

发布者:WhisperingLight最新更新时间:2022-01-20 来源: eefocus关键字:I2C协议  stm32 手机看文章 扫描二维码
随时随地手机看文章

I2C协议的产生

I2C通讯协议由Phiilps公司开发,由于引脚少,硬件实现简单,可拓展性强,不需要

USART,CAN等通讯协议的外部收发设备,被广泛使用在多个集成电路IC间的通讯。


I2C协议的物理层

1)支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可链接多个I2C通讯设备

支持多个通讯主机及多个通讯从机

2)I2C总线只使用两条总线线路,一条双向串行数据线SDA,一条串行时钟线SXL。

数据线就是用来表示数据,时钟线用来数据收发同步

3)每个设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问

4)总线通过上拉电阻接到电源。当I2C设别空闲的时候输出高阻态,而当所有的设备都空闲

都输出高阻态时,上拉电阻把总线拉成高电平

5)多个主机同时使用总线的时候,为防止数据冲突,会利用总裁的方式决定由那个设备占用总线

6)具备三种传输模式:标准模式传输速率为100kbit/s,快速模式为400kbit/s ,

高速模式下可达到3.4Mbit/s 但是目前大多数是I2C都不支持高速模式

7)链接到相同总线的I2C数量受到总线的最大电容400pF 限制。


协议层

I2C的协议定义了通讯的起始和停止信号,数据有效性,响应,仲裁,时钟同步和地址广播


其实信号产生之后,所有的从机就开始等待主机接下来广播的从机地址信号(SALAVE_ADDRESS).

在I2C总线上每个设备的地址都是唯一的,当主机广播的地址和某个设备地址相同时,这个设备就被选中,没有被选中的设备就会忽略之后的数据信号。

根据I2C协议,地址可以为7位或者10位,但是常用的是7位。


在地址位之后是传输方向的选择位,该位为0时,表示后面的数据传输方向是由主机至从机传输的,即主机向从机写数据。

该位为1是则相反,主机由从机读数据。


从机接收到匹配的地址之后主机或从机就会返回一个I应答信号(ack)或非应答信号NACK,只有接收到应答信号之后主机才可以发送或者接收数据。

在这里插入图片描述

写数据

即第一幅图。主机开始正式的向从机传输数据(data)数据包的大小为8位,主机没每发送完一个字节的数据都要等从机的应答信号ACK,重复这个过程,可以向从机传输N个数据,这个N没有大小限制。当数据传输结束之后,

主机向从机发送一个停止传输信号§,表示不再传输。


读数据

第二幅图。从机机开始正式的向主机机返回数据(data)数据包的大小为8位,从机每发送完一个字节的数据都要等主机的应答信号ACK,重复这个过程,可以向从机传输N个数据,这个N没有大小限制。当数据传输结束之后,

主机向从机发送一个停止传输信号§,表示不再传输。


读写数据

I2C最常用的还是复合方式,第三幅图。该传输过程有两次起始信号S。一般在第一次传输中,主机通过SLAVE_ADDRESS寻找到从设备之后,

再发送一段“数据”,这段数据通常表示从设备内部的寄存器或存储地址(注意区分它和SLAVE_ADDRESS的区别)

在第二次传输中,对该地址进行读或者写。总的来说就是第一次通讯告诉从机读写地址,第二次则是读写的实际内容。

关键字:I2C协议  stm32 引用地址:I2C协议的解析

上一篇:stm32F103VET6的启动文件详解
下一篇:STM32学习——EXTI外部中断

推荐阅读最新更新时间:2024-11-04 11:40

STM32之中断函数介绍篇
NVIC驱动有很多的用途,如使能或者失能IRQ(中断请求),或者是使能或失能单独的IRQ通道,或者是改变其优先级。以下介绍相关函数的功能和基本用法。 1.NVIC_DeInit函数的功能是将外设NVIC寄存器重设为默认值。 2.NVIC)PriorityGroupConfig函数的功能是设置优先级分组:先占优先级和从优先级,且有一个输入参数是优先级分组的长度 例:定义先占优先级1,从优先级3. NVIC_PriorityGroupConfig(NVICPriorityGroup_1); 3.NVIC_Init函数的功能是根据NVIC_InitStruct里面指定的参数初始化外设NVIC寄存器,其中NVIC_In
[单片机]
基于STM32的实验室点灯大师
/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * h2 center Copyright (c) 2021 STMicroelectronic
[单片机]
基于<font color='red'>STM32</font>的实验室点灯大师
智能家居系统设计(裸机stm32/μCOS-III)
在正式讲解之前,先来总结一下。该项目是对大学学过的部分知识进行整合,同时这也是我大学的毕业设计,也算是对大学的一个交待。 首先来讲述一下该项目具体实现了哪些功能,方便大家理清思路。该项目拥有四种控制方式,分别是语音识别、触摸屏、小程序、APP,而控制的对象是家用电器(这里利用一个多路继电器来模拟家用电器)。 这四种控制方式还能对采集的数据进行反馈显示: 在语音识别方面,语音模块识别到特定的关键词语后,会将采集到的温湿度数据通过语音播报模块进行播报反馈; 在触摸屏和APP方面,将采集到的温湿度、有害气体浓度、光照强度显示在触摸屏上,还可以设置湿度和有害气体浓度的阈值(湿度阈值的设置是当湿度超过设定阈值时,表明室外下雨
[单片机]
智能家居系统设计(裸机<font color='red'>stm32</font>/μCOS-III)
安全启动 - STM32安全启动架构
安全需要一个起点。 现在我们理解,没有安全启动,设备平台的安全难以得到保证。安全启动要求启动的位置一定是固定在某个地方。那么固定启动位置靠什么保证? 必须靠硬件 。软件本身的特点,决定了它很容易被修改,即使做了加密和加扰,破解的难度依然比硬件低很多。所以,安全启动一定是靠 STM32 硬件来保证。 脱离硬件谈安全启动基本上是不可能的 。 实现 Root of Trust(信任根)通用的做法是什么呢?一般是, 芯片有一个 Bootrom 启动只读存储区 。硬件的设计保证,芯片加电启动一定是从这个只读的甚至不可见的 Bootrom 里执行。 事实上,保持安全启动的原则不变,但是实现的方式可以不一样。 对于这个 Bootrom,
[单片机]
STM32开发板JLINK调试步骤
STM32调试步骤 调试前,首先跳线J9的2-3脚短接,跳线J4的右边两个脚短接,跳线J5短接,J8短接,J2的1-2短接,3-4短接。 将Jlink与学习板,USB延长线与学习板,串口延长线与学习板(或者USB转串口线与学习板)连接起来, 这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J-Flash ARM V4.02如图所示。 也可以按照如下顺序打开J-Flash ARM 。 “开始à程序àSEGGERàJ-Link ARM V4.02àJ-Flash ARM”,如下图所示。 2、打开J-Flash ARM后,先进行芯片选项设置,打开Optio
[单片机]
STM32 TIM测 输入信号的 频率
说 不进中断 等等基本功能没实现ok的,查看: STM32 外设配置关键步骤 务必仔细瞅瞅… TIM输入捕获简介 TIM输入捕获两种模式: 1. PWM输入模式 2. 输入捕获模式 调试记录 PWM输入模式: 该模式的理解: stm32的PWM输入捕获模式 仅适用于通道1、 2 从输入捕获中断说起… 从TIM3 CH1输入信号, .............. if(TIM_GetITStatus(TIM3,TIM_IT_CC1) == SET) // { ic1 = TIM_GetCapture1(TIM3)+1; //周期 ic2 = TIM_GetCapture2(TIM3)+1; //脉冲宽度
[单片机]
<font color='red'>STM32</font> TIM测 输入信号的 频率
STM32 普通定时器(TIM3)中断 实现流水灯实验
/*********************************************************** 通过定时器TIM3产生间隔时间为1秒的中断,在中断响应 函数中控制LED发光二级管,实现流水灯效果 ***********************************************************/ void TimeInit() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; //打开相应的时钟 RCC_APB1PeriphClockCmd(RCC_AP
[单片机]
stm32单片机入门c语言解析
关于学习stm32单片机建议 推荐学习书籍: 《STM32F103xxx参考手册》不需要全部阅读——没有时间的。建议选读,但是前几章必读。存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。后面章节,讲述的是具体的功能模块设计。如果我们用到哪个模块,就可以去阅读哪个模块。 《STM32固件库使用手册》主要是为了简化编程 学习思路(仅供参考) 步骤一,安装完STM32学习的软件,比如J-Link、Keil for ARM(MDK)、ISP(如果需要从串口下载的话)。 步骤二,挑选部分例程的HEX,比如LED灯的例程HEX文件,下载到芯达STM32开发板中,观察两个L
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved