I2C学习笔记——I2C协议学习

news2024/11/24 3:20:06

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。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux C】基于树莓派/香橙派的蓝牙服务端——支持多蓝牙设备接入

一、需求 在树莓派/香橙派上利用开发板自带的蓝牙作为一个蓝牙服务端(主机),允许外来设备(从机)通过蓝牙接入进行通信,通信格式为透传方式;采用的编程语言为Linux C 二、环境准备 bluez安装 …

三波混频下的相位失配原理

原理推导 在四波混频情况下,实现零相位失配是一件很困难的事情。因为在四波混频中,相位调制和增益都依赖于相同的参数,即克尔非线性 γ \gamma γ。这个问题可以用嵌入在传输线上的辅助共振元件的复杂色散工程来部分解决。 但是在三波混频中…

ceph集群监控

文章目录 Ceph Dashboard启用dashboard插件dashboard启用ssl Promethues监控ceph启用prometheus模块配置prometheus采集数据grafana数据展示 Ceph Dashboard ceph-dashboard官方介绍:https://docs.ceph.com/en/latest/mgr/dashboard/ Ceph Dashboard是一个内置的c…

数据库系统概论---选择题刷题实训

(一)选择题 1.下列选项中,不属于关系模型三要素的是( C ) A.数据结构 B.数据操纵 C.数据安全 D.数据完整性规则 2.保证数据库…

【Spring】透过Spring源码查看Bean的命名转换规则

近期在写Spring项目的时候,需要通过注解的形式去替代之前直接将Bean存放在Spring容器这种方式,以此来简化对于Bean对象的操作,但是这样无法通过准确的Id去获取到相应的Bean对象了 测试观察 首先,如果要将指定的对象存放到Spring中…

SQL注入基础知识

文章目录 一、注入的分类1.基于服务器收到的响应2.基于处理输入的SQL查询(数据类型)3.基于程度和顺序的注入(哪里受了影响)4、基于注入点位置 二、系统函数1.字符串连接函数2.一般用于尝试的语句3.union操作符的介绍 总结 一、注入…

caught (in promise) RangeError: Maximum call stack size exceeded-vue前置导航守卫死循环

报错图 产生场景 1.近期在搭建移动端的架子时,在写路由守卫时,发现陷入死循环,报错意思是循环超出栈。。 2.后面排查了一圈问题之后,发现这个问题很小,但很难发现,在此记录。 3.vue 路由的导航守卫并不是…

类和对象【4】static成员、const对象、友元

全文目录 引言static成员static成员变量static成员函数 const对象友元友元函数友元类 总结 引言 通过前面的三篇文章,相信大家对类和对象已经有了一个基本的认识。 类和对象1(初识) 类和对象2(默认成员函数) 类和对象…

数据结构与算法11:堆

目录 【堆】 堆中插入和删除元素 堆排序 【堆的常见应用】 应用1:优先级队列 (1)合并有序小文件 (2)定时器功能 应用2:计算排行榜中前K个数据 应用3:求中位数 应用4:计算…

算法基础--MD5算法介绍

1、简介 MD5再开发过程中经常碰到的一种算法,因此感觉有必要对其原理进行更深入的了解一下。 2、算法概念 散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数&#x…

自然语言处理从入门到应用——自然语言处理的应用任务

分类目录:《自然语言处理从入门到应用》总目录 本文介绍信息抽取、情感分析、问答系统、机器翻译和对话系统等自然语言处理应用任务。这些任务可以直接或间接地以产品的形式为终端用户提供服务,是自然语言处理研究应用落地的主要技术。 信息抽取 信息抽…

天气预报信息获取程序--GUI--可以使用

上次正对项目中需要填写项目日志,制作了一个命令行版本的下载天气信息的程序,满足日常需要,调整一下界面版本的程序 如果大家使用命令行的可以使用下面的版本(连接) https://ht666666.blog.csdn.net/article/details…

逻辑漏洞学习-知识点总结

逻辑漏洞就是程序在实现业务逻辑上存在的错误,辑漏洞的出现通常是因为程序在设计业务逻辑时考虑不够全面,或者程序员的思维过程存在瑕疵,没有充分考虑到各种可能的情况 大部分程序员在设计的时候,目标是实现功能需求,…

Linux基础知识点 有这篇就足够了!!

❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 目录 一、 从认识操作系统开始 1.1 操作系统简介 1.2 操作系统…

chatgpt赋能Python-python分表

介绍 Python是一种流行的编程语言,适用于各种应用程序开发,包括网络应用程序、数据库应用程序以及数据分析和科学计算。Python分表是基于Python编写的分表工具,可以帮助开发人员更轻松地管理大型数据库表格。 Python分表是如何工作的&#…

0219-810

3GPP TS 02.19 V8.1.0 (2005-06) 前言 本技术规范由第三代合作伙伴计划 (3GPP) 制定。 本文件的内容取决于 TSG 的持续工作,并可能在 TSG 正式批准后发生变化。 如果 TSG 修改本文档的内容,TSG 将重新发布 确定发布日期的变化和版本号的增加如下&…

低代码开发平台选择指南:如何选出最适合企业的低代码平台?

低代码平台的兴起改变了公司处理软件开发的方式。这些平台使组织能够快速高效地构建应用程序,该应用程序可以利用预设组件和开箱功能。但是,因为有这么多低代码平台可以使用,所以为你的组织选择合适的平台可能是一个挑战。本文将探索如何低代…

FreeRTOS任务切换

PendSV异常 SVC 用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户…

(字符串 ) 459. 重复的子字符串——【Leetcode每日一题】

❓459. 重复的子字符串 难度:简单 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “aba” 输出: false 示例 3: 输入: s “…

IDEA+Mysql调试常见异常解决办法_kaic

IDEA导入项目出现Error: java: 程序包javax.servlet.http不存在错误的解决办法 解决方法:打开File>Project Structure>Libraries,点击右侧加号,寻找到tomcat的lib文件夹,点击ok,IDEA会自动重新Rebuild Project&…