1、I2C简介:一种简单、双线双向的同步串行总线,利用串行时钟线(SCL)和串行数据线(SDA)在连接总线的两个器件之间进行信息传递;

                       数据传输是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号。在总线空闲状态时,这两根线被所连接的上拉电阻保持为高。

每个器件的设备地址是唯一的,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。

I2C 标准具有冲突检测机制仲裁机制的多主机总线,它能在多个主机同时请求控制总线时利用仲裁机制避免数据冲突并保护数据。

主从设备以串行8bit为单位进行双向数据传输,拥有不同的速度模式,标准模式100KB/s、快速模式400KB/s、高速模式3.4MB/s。通过I2C总线接口的可编程时钟来实现传输速率的调整,同时也跟所接的上拉电阻的阻值有关。

2、串行、并行总线

并口,需要很多的线,把data、address等等在一个周期就可以表达;
        串口,用的线很少,需要8个SCL周期才能将地址和RW位发送;数据也需要8个时钟周期;

3、数据有效时序:

SDA线上的数据在SCL高电平必须是稳定的; 只有当SCL时钟信号为低时,SDA的数据才可以发生变化; 每传输一个数据位,产生一个时钟脉冲;

4、开始停止条件:

当总线上的主机都不驱动总线,总线进入空闲状态, SCL 和 SDA 都为高电平。总线空闲状态下总线上设备都可以通过发送开始条件启动通信。

SCL为高,SDA由高变低,为数据传输的开始(START)标识;

SCL为高,SDA由低变高,为数据传输的结束(STOP)标识;

启动后,总线会被置为繁忙状态;在停止条件后的一段时间内,总线被释放为空闲状态。

如果生成的重复启动条件(Sr),总线会保持繁忙状态

总线处于忙状态时,由本次数据传输的主从设备独占,其他I2C器件则无法访问总线。

5、地址传送:

开始条件是地址帧(一个字节),用于指定主机通信的对象地址,在发送停止条件之前,指定的从机一直有效;
        I2C通讯支持:7 位寻址和10 位寻址两种模式。
                7 位寻址模式:7 位从机地址 + 1位读写位,读写位控制从机的数据传输方向(0写1读)。


                10 位寻址模式,主机发送帧,第一帧 发送头序列(11110XX0,XX 表示 10 位地址的高两位),第二帧发送低八位从机地址。 主机接收帧 ,第一帧发送头序列11110XX0,然后第二帧发送低八位从机地址。接下来会发送一个重新开始条件,然后再发送一帧头序列11110XX1;

(SLA :表示从机地址;Sr :表示重新开始条件)

6、数据传送与ACK:

地址匹配一致后,总线上的主机根据 R/W 定义的方向一帧一帧的传送数据。 所有的地址帧后传送的数据都视为数据帧。10 位地址格式的低 8 位地址也视为数据帧。
        数据帧的长度是 8 位。 SCL 的低电平 SDA 变化, SCL 的高电平 SDA 保持,每个时钟周期发送一位数据。数据帧后的第 9 个时钟是应答位,是接收方传送的握手信号。

从机接收数据时,第 9 个时钟周期不响应主机,从机必须发送 NACK;主机接收数据时,发送 NACK,从机接收到后停止发送数据;主机可以发送停止条件释放总线或重新开始条件

如果从端设备无法接收或者发送另一个完整字节的数据。这时,可以先拉低SCL线,使得主设备进入等待状态,直到执行完毕其他功能。当从端设备准备好接受另一个字节的数据时,将其SCL线拉高,数据传输继续进行。

7、写操作:

当RW位为0(写操作)时,主发送设备发送数据给从接受设备,

  • 主设备根据从地址寻址,找到对应的从设备,从设备应答ACK。
  • 从接受设备ACK每一个字节的数据。
  • 停止条件由主设备产生。

8、读操作:

当RW位为1(读操作)时,主设备向从设备中读取数据。

  • 主设备根据从地址寻址,找到对应的从设备,从设备应答ACK。
  • 第一个ACK信号由从设备产生,之后主设备立即读取数据。
  • 之后的ACK信号由主设备产生。
  • 在停止前,主设备发送一个NACK信号。
  • 主设备生成停止信号。

9、组合传输

在传输中改变方向,由读变写,由写变读的操作。

  • 传输方向转换前,要重新产生开始条件S或者重复开始条件Sr
  • 开始或重复开始条件满足后,要重新发送从地址
  • RW位要倒转,0变1,或者1变0。
  • 如果要转换传输方向,接受设备会在产生重复开始条件前返回一个NACK。

I2C学习笔记——I2C协议学习相关推荐

  1. OpenHarmony学习笔记——I2C驱动0.96OLED屏幕

    文章目录 前言 I2C简介 硬件连接 编程实现 创建代码框架 初始化并复用GPIO 初始化I2C0 初始化OLED 从机地址 OLED初始化配置 功能代码 总结 目录 前言 前面介绍了一些关于在Hi3 ...

  2. 树莓派学习笔记 ——I2C PCF8574 SysFs方式

    1.前言 树莓派的GPIO端口数量有限,可通过IO扩展芯片增加GPIO的数量,使得树莓派可以适应更多的应用.PCF8574为一款通过I2C总线扩展IO的芯片,单个PCF8574可扩展8个IO,一个I2 ...

  3. 树莓派学习笔记——I2C设备载入和速率设置

    1.载入设备 方法1--临时载入设备 sudo modprobe -r i2c_bcm2708 #卸载设备 -r代表removesudo modprobe i2c_bcm2708 #重新载入设备 方法 ...

  4. 【转】医疗业务学习笔记--DICOM协议的基础内容!!!!!!!!!!

    转自:医疗业务学习笔记--DICOM协议的基础内容 - 知乎 本文首发于"雨夜随笔"公众号,欢迎关注. DICOM协议是医疗领域对如何处理.存储.打印和传输医疗图片的一系列标准.D ...

  5. 开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)

    开源鸿蒙南向嵌入学习笔记--NAPI框架学习(一) 前言--系列介绍 本系列文章主要是记录笔者在鸿蒙南向的学习与工作中的知识点笔记记录,其中不止会针对鸿蒙中的学习问题进行思考与记录,也会对涉及到的一些 ...

  6. 深度学习入门之PyTorch学习笔记:深度学习介绍

    深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...

  7. 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环

    目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...

  8. 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用

    目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...

  9. 学习笔记:强化学习与最优控制(Chapter 2)

    Approximation in Value Space 学习笔记:强化学习与最优控制(Chapter 2) Approximation in Value Space 1. 综述 2. 基于Value ...

  10. 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(二)

    长篇博文记录学习流程不容易,请关注.转发.点赞.评论,谢谢! 上一篇文章:Docker学习笔记与深度学习环境的搭建和部署(一) 文章末尾附加nvidia455.23.cuda11.1.cudnn8.0 ...

最新文章

  1. 家用计算机先驱逝世:Linux之父曾受他启发,马斯克悼念
  2. 初学python的体会心得-python初学心得
  3. sleuth微服务整合Zipkin
  4. P3327 [SDOI2015]约数个数和 (mobius反演)
  5. Java 检测文件是否存在
  6. css 布局 两行, 三行等高
  7. 赛锐信息:集团化公司SAP权限管控解决方案
  8. MySQL中将查询所得结果集的某一字段拼接成字符串
  9. 31篇文章!计算机视觉从原理到OpenCv实战
  10. Atitit.软件开发的三层结构isv金字塔模型
  11. 用库仑计方法来计量电池容量
  12. android开发之PreferenceScreen使用详解
  13. Python for s60[1_pys60简介]
  14. android陀螺仪方向,android – 如何使用罗盘读数和陀螺仪读数获取手机的方位角?...
  15. cocos2d实现语音_【Cocos Creator与C++知识分享】Creator接入呀呀语音SDK
  16. ..以前似乎用作函数或命令,与其在此处作为变量名称的用法冲突?
  17. 怎么将静图变动图?用这个网站就够了
  18. Docker常用命令大全(万字详解)
  19. 【C语言】实现两个字符串的连接(不使用库函数),即把字符串b连接到字符串a后面。
  20. decode函数python在哪里,Python SHA1 DECODE函数

热门文章

  1. 安霸(ambarella) s2l视频处理流程
  2. termux获取sd卡读写权限_我牵手金士顿小蓝TF卡成功上岛啦
  3. 【题集·待解决】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)
  4. MES系统会采集哪些数据?数据采集方式有哪些?
  5. 基础服务器 IO 模型 Proactor 模型 Reactor 模型 IO 多路复用 异步 IO 模型 Linux 服务器开发 网络编程服务器模型
  6. RBA认证审核对危险化学品管控要求是什么?
  7. Doris 数据聚合
  8. linux给普通用户赋予scp权限,关于linux新建用户并赋予文件夹权限和scp权限的问题...
  9. 图像分类中的SVM多核学习
  10. 3D建模你不知道的软件秘密