首页 > 其他分享 >05-I2C详解

05-I2C详解

时间:2023-11-05 13:11:05浏览次数:34  
标签:SCL 高电平 05 低电平 详解 SDA 信号 I2C

目录

一. 什么是IIC

1. 相关概念和硬件连接

  • IIC也称I2C,是一个多主从的串行总线,由飞利浦公司发明的通讯总线.
  • 属于半双工同步传输类总线,仅由两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA.
  • I2C总线要求每个设备SCL/SDA线都是漏极开路模式,因此必须带上拉电阻才能正常工作.(这就是高阻态的应用场景, 高阻态下设备对外界不会产生干扰)
  • I2C数据传输速率有标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)
  • 支持总线挂载多设备(一主多从、多主多从), 本文只讨论一主一从.

下图为I2C硬件连接方式, 以及i2c常见设备.

2. I2C通信过程

  • 以数据发送为例: 在数据开始传输前, 设备处于空闲状态此时SCL和SDA线都处于高电平. 当要开始发送数据的时候, 主设备会发出一个起始信号, 紧接着主机会发送一个字节数据, 前7位用于寻址最后一位用于控制读写, 此时主机将释放对SDA的控制权. 当从设备接收到起始信号后就开始监听后面这个地址数据是否符合自己的地址, 如果是就会回一个应答信号反之则不做任何动作. 主机接收到应答信号后, 将进行第二次数据传输, 直到从设备发出非应答信号后, 主机发出停止信号此次通信结束.

二. I2C时序基本单元

1. 起始信号和停止信号

  • 空闲状态: 当处于非通信状态时, SCL和SDA线会由于外部上拉电阻处于非高电平状态.
  • 起始信号: 设备从空闲状态进入起始状态时, 首先SDA线会先拉低, 然后SCL线拉低. 当从机接受到这个信号后, 就开始进入数据接受状态.
  • 停止信号: 在SCL处于高电平期间, SDA线由低电平跳变为高电平, 当从设备接收到这一信号后, 代表此次通信结束.
  • 起始信号和停止信号都是主机发出.

2. 数据发送和接收

  • 串口通信是低位先行,i2c是高位先行
  • 数据发送: 在SCL为低电平的时候SDA需要将要发送的数据按位从高到低依次发送出去, 在SCL为高电平的时候SDA需要保持电平状态稳定不能发生改变.(例如要发送0xA1, SCL第一个低电平时候SDA要从低电平变为高电平, SCL变为高电平时候SDA要维持高电平状态. SCL第二个低电平时SDA要从高电平变成低电平, SCL变为高电平时SDA要维持低电平状态...)
  • 数据接收: 和数据反送过程刚好相反, 从机需要按位发送数据从高到低, 发完一个字节数据后, 主机需要回复应答信号或非应答信号.

标签:SCL,高电平,05,低电平,详解,SDA,信号,I2C
From: https://www.cnblogs.com/Deng-S/p/17810426.html

相关文章

  • Codeforces Round 905 (Div. 2) C. You Are So Beautiful
    题面翻译给定数列\(a\),定义一个子序列\(S\)是合法的当且仅当从\(a\)中有且仅有一种选法能选出子序列\(S\)(选法相同定义为最终选出的位置集合相同)。求其有多少非空合法子序列,满足它占据了\(a\)中一端连续的区间。\(n\leq10^5\)。思路判断区间合法性对于一段区间\([l......
  • ipmitool常用命令详解
    IPMItool用于访问IPMI的功能-智能平台管理接口,该系统接口管理和监视带外计算机系统。它是一个命令提示符,用于控制和配置IPMI支持的设备。IPMItool是一种可用在linux系统下的命令行方式的ipmi平台管理工具,它支持ipmi1.5规范(最新的规范为ipmi2.0).IPMI是一个开放的标准,监控......
  • [Linux系列]nmcli详解
    背景前段时间在做LVS实验的时候,网络规划和配置示非常关键的,以往在linux的系统中都是通过配置文件来配置和修改ip的,今天我们就来说一说nmcli命令配置网络。目前所有的linux系统配置网卡等信息,均已经推行Network-Manager服务去管理。nmcli是NetworkManager的......
  • 数组的练习专项(接上节的数组的详解)
     练习1:求和需求:定义一个数组,存储1,2,3,4,5遍历数组得到每一个元素,求数组里面所有的数据和代码示例:/*定义一个数组,存储1,2,3,4,5遍历数组得到每一个元素,求数组里面所有的数据和*///分析://1.定义一个数组,并添加数据1,2,3,4,5int[]arr={1,2,3,4,5};//求和变量int......
  • 数组的练习专项(接上节的数组的详解)
     练习1:求和需求:定义一个数组,存储1,2,3,4,5遍历数组得到每一个元素,求数组里面所有的数据和代码示例:/*定义一个数组,存储1,2,3,4,5遍历数组得到每一个元素,求数组里面所有的数据和*///分析://1.定义一个数组,并添加数据1,2,3,4,5int[]arr={1,2,3,4,5};//求和变量int......
  • Linux文件权限详解
    Linux是一款功能强大的操作系统,其文件权限系统是确保文件和系统安全的关键组成部分。正确理解和配置文件权限对于维护系统安全至关重要。初次接触Linux时,在公司服务器上处理文件夹或文件时常常碰到Permissiondenied的提示。为了解决问题,我会直接使用一条简单而粗暴的命令sudochmo......
  • 【django框架】共4大模块50页md学习文档 第3篇:django路由和网络请求使用详解
    当你考虑开发现代化、高效且可扩展的网站和Web应用时,Django是一个强大的选择。Django是一个流行的开源PythonWeb框架,它提供了一个坚实的基础,帮助开发者快速构建功能丰富且高度定制的Web应用全套Django笔记直接地址:请移步这里共10章,31子模块,总计2w余字路由配置学习目......
  • 数据结构:详解顺序串
    《详解循环队栈》目录:顺序串的定义及其特点顺序串的实现完整Demo运行截图小结参考文献 顺序串的定义及其特点顺序串的存储结构的和线性表一样,也是主要分为顺序存储结构和链式存储结构两类,前者简称顺序串,顺序串和顺序表一样,只不过它的每个元素仅由一个字符组成,在......
  • OpenGL 着色器详解
    1.GLSL语言glsl语言是用来编写着色器的,通过一段一段包含main函数的程序片段,告诉渲染引擎怎么去渲染内容。glsl语言的语法有点类似c语言风格,只是增加了一些特有的关键字来修饰变量,下面是一个着色器基本的程序结构:首先声明的是GLSL的版本号和模式,然后就是声明变量。像其他语言......
  • C/C++连接mysql(api接口方法详解)
      前言本篇记录C/C++连接mysql利用mysql的api接口的方法:这个方法的代码基本上很久都没有变过了,这里做个笔记来简单学习一下,还有一种方法等有时间了解后再来更新使用API的方式连接,需要先做环境配置,加载mysql的头文件和lib文件。可以看我之前的一篇文章VS中C/C++访问MySQL数据......