I2C学习总结

i2c概述

I2C(Inter-Intergreted Circuit) 是一种串行通信协议,用于集成电路之间完成数据传输,i2c用广泛用以各种领域,包括电子设备、嵌入式系统、工业自动化等;

i2c仅仅只是一个数据传输的协议,具体传输的数据用途由上层决定;

针对i2c协议的一个小例子

该例子灵感出自参考文档;

针对上图中:我们类比单片机A为课堂中的老师,其它设备为学生;课堂上会有一些互动,如下流程说明,后面会针对例子和i2c中的通信做一些联系,这里有个大概流程即可;

  • 老师呼叫甲同学背诵课文
    1. 老师怒拍讲台,大喊安静;
    2. 点名甲同学,你给我背诵下《蜀道难》;
    3. 甲同学接收到请求,并回复收到;
    4. 此后开始背诵;“噫吁嚱,危乎高哉!蜀道之难,难于上青天!.....”
    5. 老师在甲同学背诵过程中不断的点头回应。
    6. 在甲同学背诵完成后,老师发话:“真不错,坐下吧”;(要不然甲同学会很尴尬)
  • 老师公布分数流程
    1. 老师又怒拍讲台,大喊安静,
    2. 老师点名:‘甲同学’;
    3. 甲同学回复:‘到’;
    4. 老师:‘我要告诉你分数了’;
    5. 甲同学回应:‘好的’;
    6. 老师:‘93分’;
    7. 甲同学:‘好的,我知道了’;
    8. 老师随即咳嗽一声,准备叫下一个同学;

协议特点

这里先抛出协议的特点,后续知识点说明部分会有针对性的说明;

  1. 仅需两根线即可完成通信(SDA、SCL);
  2. 均连接到总线上,无特定的主从之分,每个设备可访问总线上的其它设备;
  3. 串行通信,存在时钟线SCL用作接收指示;
  4. 总线上的设备既可以接收数据,也可以发送数据。但二者为互斥关系,所以为半双工通信方式;
  5. 存在应答机制,可实现接受侧的反压;

i2c重要知识点说明

SDA、SCL通信知识

  1. 默认情况下SDA、SCL的值均为1;
  2. 任何一个设备想要控制SDA、SCL输出0即可,输出1可通过外部的上拉完成输出1;
  3. 多个设备间的SDA、SCL为线与功能。当多个设备输出冲突时,将多个设备期望输出值进行与操作,即为最终SDA、SCL上的值;

i2c写操作

  1. 刚开始主机要发出一个start信号,然后发出一个设备地址(用来确定是往哪一个从机写数据),方向(读/写,0表示写,1表示读)。

  2. slave回应(用来确定这个设备是否存在),然后就可以传输数据,传输数据之后,要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

每传输一个数据,接受方都会有一个回应信号,数据发送完之后,主机就会发送一个P停止信号。

白色背景:主→从

灰色背景:从→主

注意点:

  1. 写操作除了要指定设备地址,还需要指定对设备发生访问的地址,第一个数据为访问地址;;

带入前面的例子理解写过程

  • 老师公布分数流程

    1. 老师又怒拍讲台,大喊安静,(月考后,开始点名说分数);—发送start;
    2. 老师点名:‘甲同学’;—发送设备地址,指定甲同学;
    3. 甲同学回复:‘到’;—回应,代表从机存在并准备好了;
    4. 老师:‘我要告诉你分数了’;—指定要告知的是分数,也就是会知道写地址,指示从机该内容含义;
    5. 甲同学回应:‘好的’;—从机回应
    6. 老师:‘93分’; —发送数据;
    7. 甲同学:‘好的,我知道了’;—回应
    8. 老师随即咳嗽一声,准备叫下一个同学;— 发送P结束条件;

    以上例子i2c传输对应的其实就是教室里的声音,由于是单线的,所以也就是教室里只能存在一种声音,所以老师与同学之间的交流是串行执行的。当然可能我们人类由于存在某些潜规则,使得通信变的更简单了,但是电子设备中没有这种潜意识,所以需要再帧内指定地址、读写指示、从设备响应等动作完成一次通信;

i2c读操作

  1. 刚开始主机要发出一个start信号,然后发出一个设备地址(用来确定是从哪一个芯片读取数据),方向(读/写,0表示写,1表示读)。
  2. 回应(用来确定这个设备是否存在),然后就可以传输数据,传输数据之后,要有一个回应信号(确定数据是否接受完成),然后在传输下一个数据。
  3. 每传输一个数据,接受方都会有一个回应信号,数据发送完之后,主机就会发送一个P停止结束信号。

白色背景:主→从

灰色背景:从→主

说明:slave侧在完成一次传输后,需要master指示是否结束,或者进行下一次传输。slave默认会在当前地址进行递增动作进行下一次传输;读操作默认在上一写操作结束地址发生;

i2c读操作例子解读

  • 老师呼叫甲同学背诵课文
    1. 老师怒拍讲台,大喊安静;—start
    2. 点名甲同学;你给我背诵下《蜀道难》;—指定为读操作,并指定读的内容为《蜀道难》
    3. 甲同学接收到请求,并回复收到;—回应
    4. 此后开始背诵;“噫吁嚱,危乎高哉!蜀道之难,难于上青天!.....”—读数据
    5. 老师在甲同学背诵过程中不断的点头回应。—主机回应
    6. 在甲同学背诵完成后,老师发话:“真不错,坐下吧”;(要不然甲同学会很尴尬)—slave回应NACK,主机结束一次传输;

同写操作,人主观存在潜规则,通过例子理解I2c时注意需明确指定相关内容,电子设备才可以正确动作;

Start 和Pause条件

  1. 当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通信的起始。
  2. 当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通信的停止。

发送点、采样点

i2c总体的数据线与采样时钟线的配合为:

  1. 当SCL为低时完成数据的改变,此时不会发送采样动作;
  2. 当SCL为高时完成数据的采样,此时完成数据采样动作;

I2c其它特性

  1. 响应可分为ACK和NACK,用以指示是否继续传输还是结束传输;
    • ACK主要用以指示传输完成;
    • NACK主要用以传输的一些特殊情况,如下:
      • I2C总线上没有主机所指定地址的从机设备
      • 从机正在执行一些操作,处于忙状态,还没有准备好与主机通讯
      • 主机发送的一些控制命令,从机不支持
      • 主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了
  2. i2c slave会记住上一次操作的地址。下一次发送读动作即从该地址开始;所以要进行读之前需有一个无写数据的写动作;
  3. SCL、SDA的默认值为高;
  4. SDA的控制用主机和从机交替控制,同一时间仅一个设备控制。读写操作中的主机发送完相关信息后,需释放SDA的控制,由Slave控制是否应答;

参考文档

以上仅解释了大体部分,但i2c的其它特点还可以从以下文章学习到:

一篇短文让你彻底理解什么是I2C通信-CSDN博客

一文看懂I2C协议 - 知乎 (zhihu.com)

4分钟看懂!I2C通讯协议 最简单的总线通讯!_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/535064.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Splitpanes拆分窗格插件使用

目录 基本用法 纵向排列 遍历渲染 动态拆分宽度 项目开发中用到了拆分窗格(就是下面的效果,可以拆分网页,我们项目通常都是用左右两块拆分,可以通过拖动图标进行左右拖动),于是就发现了一个很好用的插件:Splitpane…

2024年AI辅助研发:科技创新的引擎

CSND - 个人主页:17_Kevin-CSDN博客 收录专栏:《人工智能》 技术进展 进入2024年,人工智能(AI)在科技界和工业界的焦点地位更加巩固,其在辅助研发领域的技术进步尤为显著。深度学习技术的突飞猛进使得数据分…

1.Python是什么?——《跟老吕学Python编程》

1.Python是什么?——《跟老吕学Python编程》 Python是一种什么样的语言?Python的优点Python的缺点 Python发展历史Python的起源Python版本发展史 Python的价值学Python可以做什么职业?Python可以做什么应用? Python是一种什么样的…

图片格式转换怎么操作?这一个方法快快收藏

图片格式转换能够改变图片的质量、大小兼容性。不同的图片格式用途也不同,当我们需要转换图片格式的时候要怎么操作呢?下面,小编给大家分享一款操作简单,小白也能轻松上手的图片转换器(https://www.yasuotu.com/geshi&…

“光谱视界革新:ChatGPT在成像光谱遥感中的智能革命“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用,人工智能…

【SpringBoot】整合Druid数据源和Mybatis 项目打包和运行

文章目录 一、整合Druid数据源二、整合Mybatis2.1 MyBatis整合步骤2.1 Mybatis整合实践2.1 声明式事务整合配置2.1 AOP整合配置 三、项目打包和运行命令启动和参数说明 总结web 与 springboot 打包区别JDK8的编译环境 执行17高版本jar 一、整合Druid数据源 创建模块 &#xff1…

BEVFormer代码运行笔记

1. 代码下载 git clone https://github.com/fundamentalvision/BEVFormer.git 2. 环境配置 使用conda创建环境 conda create -n open-mmlab python3.8 -y 进入环境 conda activate open-mmlab 允许使用pip安装依赖库 export PIP_REQUIRE_VIRTUALENVfalse 安装pytorch和…

FPGA - 单总线协议(one-wire)

1,简介 单总线(one-wire)是美国 DALLAS 公司推出的外围串行扩展总线技术,与 SPI、I2C 等串行数据通信方式不同,它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的。它具有节省 I/O口…

如何使用ChatGPT辅助写论文、数据分析、AI绘图?【附学习资料】

原文链接:如何使用ChatGPT辅助写论文、数据分析、AI绘图?【附学习资料】https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247597452&idx1&sn8aa991235ffee89fc76590a90b9005d7&chksmfa823c6bcdf5b57df0cb02ecd1821921f38ea6de34c7…

案例--某站视频爬取

众所周知,某站的视频是: 由视频和音频分开的。 所以我们进行获取,需要分别获得它的音频和视频数据,然后进行音视频合并。 这么多年了,某站还是老样子,只要加个防盗链就能绕过。(防止403&#xf…

python调用clickhouse

(作者:陈玓玏) 使用clickhouse-driver包,先通过pip install clickhouse-driver安装包,再通过以下代码执行sql。 from clickhouse_driver import Client client Client(host10.43.234.214, port9000, userclickhou…

Pygame教程06:Event事件的类型+处理方法+监听鼠标事件

------------★Pygame系列教程★------------ Pygame教程01:初识pygame游戏模块 Pygame教程02:图片的加载缩放旋转显示操作 Pygame教程03:文本显示字体加载transform方法 Pygame教程04:draw方法绘制矩形、多边形、圆、椭圆、弧…