I²C总线通信协议

(1)I²C概述

I²C(Inter-Intergrated Circuit)集成电路总线,该总线是由飞利浦公司在1980年代初设计出来的。主要是用来连接整体电路,是一种多向控制总线,也就是说多个器件可以连接到同一总线结构下,同时每个器件都可以作为实施数据传输的控制源。

I²C属于半双工同步串行通信方式。

(2)I²C硬件拓扑结构

I²C总线一般有两根线,一个是双向传输的数据线(SDA),另一个是时钟线(SCL),所有接到I²C总线设备上的串行数据线SDA都接到总线的数据线SDA上,各设备的时钟线SCL都接到总线的时钟线SCL上。硬件连接如下图1所示,数据线SDA与时钟线SCL都通过一个上拉电阻连接到电源,初始电平都为高电平,处于空闲状态。每个连接到I²C总线的元器件都有唯一的地址。

图1 I²C硬件连接图​​​​

(3)I²C协议

I²C总线在数据传输过程中时钟线SCL始终由主机控制,数据传输期间共有三种信号产生:开始信号,停止信号和应答信号。简单概况如下:

①数据有效性

在时钟线SCL高电平期间内,数据线SDA上的数据必须保持稳定,数据线SDA的数据仅允许在时钟线SCL为低电平时改变,如下图2所示。

图2 数据有效性

②开始信号

当时钟线SCL处于高电平期间,数据线SDA产生由高电平向低电平的跳变,如下图3所示。

③停止信号

当时钟线SCL处于高电平期间,数据线SDA产生由低电平向高电平的跳变,如下图3所示。

图3 开始信号与停止信号的定义

④应答信号

总线上的接收器每收到一个字节(8bit)就产生一个应答信号ACK。接收器拉低数据线SDA表示应答,并在应答脉冲期间保持稳定的低电平。若主器件作为接收器时,必须发送数据传输结束的信号给发送器,即它在接收最后一个字节数据的应答脉冲期间不会产生应答信号(NACK,不拉低数据线SDA),如下图4所示。

图4 I²C总线应答信号

⑤数据帧格式

I²C总线传输的数据信号是广义的,既包括地址信号,又包括真正的数据信号。在开始进行数据传输时,主机发出开始信号后,先传输一个器件地址(共7位,前4位是固定,后3位由硬件决定,即同一设备上可接8个同一器件)以及一位读/写位("0"表示主机发送数据W,"1"表示主机接收数据R),再传输一个字节地址(8位,用来选择从器件内部的第几个字节读/写),最后传输数据。每次数据传输总是由主机发出停止信号而结束。

1)主机向从机发送数据(以E²PROM为例)

1、主机发送起始信号;

2、主机发送从器件地址以及读/写位("0"),主机释放总线,等待从器件应答;

3、主机发送需写入的内部寄存器地址,等待从器件应答;

4.、主机发送数据

5、主机发送停止信号

6、E²PROM收到停止信号之后,内部进入写周期,大概需要5ms,此期间之内任何操作都不会被E²PROM响应(因此以这种方式的多次写入,需要插入一个延时,否则会导致失败);

注:阴影部分由主机向从机传送,无阴影部分表示从机向主机传送。A表示应答信号(低电平),Ā表示非应答信号(高电平);START表示起始信号,STOP表示停止信号。

2)主机向从机读取数据(以E²PROM为例)

1、主机发送起始信号;

2、主机发送从器件地址以及读/写位("0"),主机释放总线,等待从器件应答;

3、主机发送需写入的内部寄存器地址,等待从器件应答;

4、主机再次发送起始信号,即Restart;

5、主机发送从器件地址以及读/写位("1"),主机释放总线,等待从器件应答;

6、主机读取数据。主机在接收到最后一个字节数据后,不会发出应答ACK信号,于是从器件释放数据线SDA,以允许主机发送停止信号;

7、主机发送停止信号

【I²C总线通信协议总结】相关推荐

  1. 基于STM32开发板I²C总线通信协议浅析

    基于STM32开发板I²C总线通信协议浅析 一.前言 I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980 ...

  2. 基于STM32开发板CAN总线通信协议浅析

    基于STM32开发板CAN总线通信协议浅析 一.前言 控制器局域网(Controller Area Network,CAN),是由德国BOSCH(博世)公司开发,是目前国际上应用最为广泛的现场总线之一 ...

  3. I2C总线通信协议及实操stm32通过I2C实现温湿度(AHT20)采集

    I2C总线通信协议及实操stm32通过I2C实现温湿度(AHT20)采集 一实验要求 二.12C总线通信协议 1.12C介绍 2.I2C物理层 3.I2C协议层 4.软件IIC和硬件IIC 三.STM ...

  4. RS-485总线通信协议解析

    RS-485总线技术只是规定了接口的电气标准,并没有规定RS-485接口的电缆,插件以及通信协议,只是OSI规范中物理层的一个标准,由于RS-485总线采用差分平衡传输方式,一般使用的电缆建议采用屏蔽 ...

  5. can 总线通信协议开发_Simulink应用层开发—CAN总线信号处理

    1.CAN总线信息,是整车各控制器之间交互的信息.根据J1939要求编制CAN通讯矩阵.总线数据都未解析的整型数据. 2. 在Simulink应用层中,我们需要用实际值进行整车的实时计算,因此CAN总 ...

  6. 【硬件通信协议】4. 详细解析CAN总线通信协议

    前言: 基于对CAN总线的耳闻,但是从未在项目中使用过.为了扫盲,故借此机会将CAN总线整理与理解一遍.感谢其他作者(文末的参考链接)对CAN总线的一些详细介绍,鉴于个人的理解,从新整理一番,以备不时 ...

  7. 总线通信协议-PCI

    文章目录 1. 简介 1.1 总线特点 1.2 总线接口 1.3 拓扑模式 2. 传输协议 2.1 传输模式 2.2 时序图 2.3 PCI-X总线基本概念 2.4 PCI传输速率 3. 小结 1. ...

  8. 简述SPI总线通信协议笔记

    一.SPI总线简介 SPI总线是串行.高速.全双工.同步通信总线.采用主从方式工作,一般有一个住设备和一个或多个从设备.SPI需要至少4根线,分别是MISO(主设备输入从设备输出).MOSI(主设备输 ...

  9. 4位快速加法器和4位串行加法器相比_使用混合信号示波器调试串行总线系统

    本应用指南面向的读者是数字系统设计师,他们在研发过程中会用到模拟和数字元器件,包括采用串行总线的微控制器和 DSP 系统.本文讨论调试串行总线设计所面临的挑战和新的解决方案,这些串行总线包括控制器局域 ...

最新文章

  1. Android SDK安装找不到JDK
  2. linux查看硬盘smart_SMART Utility for mac (硬盘检测)
  3. mysql登录报错 ERROR 1045 (28000)
  4. 如何生成 jMeter 结果分析统计图表
  5. python 分类 投票_LightGBM——提升机器算法(图解+理论+安装方法+python代码)
  6. Android 进程的五种生命周期学习
  7. Python使用wordcloud做词云
  8. Zotero使用之自定义参考文献格式
  9. Selctive Search中的ABO评价方法
  10. 2014春节抢票经验记录
  11. md5加密原理!!!【转】
  12. 基于Ubuntu(x86)系统和STM32(Keil)编写C程序分别进行编程、验证
  13. VS2015安装完成后Visual C++的一些模板找不到,安装C++新模板
  14. 2014山东省第五届ACM省赛
  15. 文献阅读---玉米干旱响应和耐受性基因表达的调控变异定位
  16. surface pro4-7安装黑苹果教程
  17. pet-shop Dapp开发(下)
  18. JS特效——鼠标点击特效
  19. 8-13外部排序-败者树
  20. Servlet解决中文乱码

热门文章

  1. 软件设计师之法律法规知识
  2. 信号量哲学家问题java_利用AND信号量机制解决哲学家进餐问题
  3. ubuntu系统修改分辨率为2560*1440(2k,16:9)
  4. bitset的使用示例
  5. 权威的国际敏捷认证Certified Scrum Master (CSM)
  6. python glob.glob使用
  7. 使用NeRF进行3D体素渲染
  8. 测试开发岗 - 常见面试题
  9. 进程间通信的方式(附代码分析)
  10. 电商系统开发实战-用户微服务基础模块开发