文章目录

  • 背景
  • I2C特点
  • IIC的物理层
  • IIC的协议层
    • a.数据的有效性
    • b.起始和结束条件
    • d.数据帧格式
  • 地址格式(重点!!!)
  • 实战寻址
    • E2PROM
      • 注意
    • CH455G地址
      • 注意

背景

I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

经常IIC和SPI接口被认为指定是一种硬件设备,但其实这样的说法是不尽准确的,严格的说他们都是人们所定义的软硬结合体,分为物理层(四线结构)和协议层(主机,从机,时钟极性,时钟相位)。

IIC,SPI的区别不仅在与物理层,IIC比SPI有着一套更为复杂的协议层定义。下面来分别说明一下IIC的物理层和协议层。

基本的I2C总线规范于20年前发布,其数据传输速率最高为100Kbits/s,采用7位寻址。但是由于数据传输速率和应用功能的迅速增加,I2C总线也增强为快速模式(400Kbits/s)和10位寻址以满足更高速度和更大寻址空间的需求。

I2C总线始终和先进技术保持同步,但仍然保持其向下兼容性。并且最近还增加了高速模式,其速度可达3.4Mbits/s。它使得I2C总线能够支持现有以及将来的高速串行传输应用,例如EEPROM和Flash存储器

在现代电子系统中,有为数众多的IC需要进行相互之间以及与外界的通信。为了提供硬件的效率和简化电路的设计,PHILIPS开发了一种用于内部IC控制的简单的双向两线串行总线I2C。I2C总线支持任何一种IC制造工艺,并且PHILIPS和其他厂商提供了种类非常丰富的I2C兼容芯片。作为一个专利的控制总线,I2C已经成为世界性的工业标准。

每个器件都有一个唯一的地址,而且可以是单接收的器件(例如:LCD驱动器)或者可以接收也可以发送的器件(例如:存储器)。发送器或接收器可以在主模式或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。

I2C是一个多主总线,即它可以由多个连接的器件控制。

I2C特点

IIC是半双工,而不是全双工

  • IIC是真正的多主机总线,(对比SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏

  • 起始和终止信号都是由主机发出的,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号

  • 在起始信号后必须发送一个7位从机地址+1位方向位,用“0”表示主机发送数据,“1”表示主机接收数据。

  • 每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据

  • 起始信号是必需的,结束信号和应答信号,都可以不要

注:实际使用中,一般是单片机作为主机,其它器件作为从机,单片机先向器件发送信息表示要读取数据,之后转变传输方向,器件发送数据到单片机。

IIC的物理层

a.只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL。(IIC是半双工,而不是全双工)。

b.每个连接到总线的器件都可以通过唯一的地址和其它器件通信,主机/从机角色和地址可配置,主机可以作为主机发送器和主机接收器。

c.IIC是真正的多主机总线,(而这个SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。

d.传输速率在标准模式下可以达到100kb/s,快速模式下可以达到400kb/s。

e.连接到总线的IC数量只是受到总线的最大负载电容400pf限制。

一个典型的IIC接口如下图所示

IIC的协议层

IIC的协议层才是掌握IIC的关键。现在简单概括如下:

a.数据的有效性

在时钟的高电平周期内,SDA线上的数据必须保持稳定,数据线仅可以在时钟SCL为低电平时改变。

b.起始和结束条件

起始条件:当SCL为高电平的时候,SDA线上由高到低的跳变被定义为起始条件,结束条件:当SCL为高电平的时候,SDA线上由低到高的跳变被定义为停止条件,要注意起始和终止信号都是由主机发出的,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。总线在起始条件之后,视为忙状态,在停止条件之后被视为空闲状态,对起始条件和结束条件的描述如下图所示。

d.数据帧格式

I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。

在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。

这里小编在驱动MPU6050模块的时候,就犯过这样的错误,它写的MPU6050从机地址是0x68,
因为发送从机地址的时候,要加一位读写方向位,因为刚开始应该是向这个MPU6050里写从机里某个寄存器的地址,
所以应该是7位地址   0x68(1101000)+二进制位0=11010000)也就是0xD0,表示要向该IIC设备里写东西,
然后再紧接着写入IIC设备里的寄存器地址,而我直接写入了0x68,导致出错

每次数据传送总是由主机产生的终止信号结束

但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。

在总线的一次数据传输过程中,可以有以下几种组合方式:

[1] 主机向从机发送数据,数据传送方向在整个传送过程中不变:

注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示 数据由从机向主机传送。
A 表示应答(低电平), A 非表示非应答(高电平)。 S 表示起始信号, P 表示终止信号。

[2]主机在第一个字节后,立即从从机读数据:

[3]在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相:

地址格式(重点!!!)

第一个字节(为slave address)由7位地址和一位R/W读写位组成的,这字节是个器件地址。

首先:常用IIC接口通用器件的器件地址是由种类型号,及寻址码组成的,共7位

细心的朋友可以发现虽然是7位,但是好多地方实际都是8位,这是因为对于IIC总线来说,确实只有7位表示地址,一个字节是8位,所以预留出来最低位作为读写(R / W)的控制操作

也就是对于地址就是D7-D1,但是发送时要加上D0位,也就是8位

如格式如下:

D7 D6 D5 D4 D3 D2 D1 (D0)
0  0  0  0  0  0  0  (0 )
  1. 器件类型由:D7-D4 共4位决定的。这是由半导公司生产时就已固定此类型的了,也就是说这4位已是固定的。
  2. 用户自定义地址码:D3-D1共3位。这是由用户自己设置的,通常的作法如EEPROM这些器件是由外部IC的3个引脚所组合电平决定的(用常用的名字如A0,A1,A2)。这也就是寻址码。
    所以为什么同一IIC总线上同一型号的IC只能最多共挂8片同种类芯片的原因了。
  3. 最低一位D0就是R/W位。这一位是来说明操作是读还是写的,不是器件的地址位!一定要注意

实战寻址

对于I2C的简单介绍就到这里了,要使用I2C第一步就是我们如何才能知道器件的地址,这里就需要看数据手册来查找

E2PROM

首先介绍一个最常用的I2C器件,就是E2PROM存储器芯片,这里选择一个具体的型号24LC256

对于一个器件,第一步先去找芯片的数据手册,手册里不仅写了使用说明,还有PCB的封装格式

为了方便,先去立创商城查看有没有芯片的供应

点击数据手册,可以看到原理图还有PCB

PCB的封装可以直接导出

然后就是点击数据手册查看,通过目录就可以看到地址的部分

这里就找到了控制器的默认部分的地址1010


通过在电路上配置A2-A0,也就是I2C的后三位全部拉低,即1010 000 = 50h

所以24LC256的I2C地址就是50h

注意

如果要对其进行写的操作,不能直接向地址50h来进行写入,必须要在最低位加上一个二进制0,代表写操作,也就是变成了 1010 000 0 = A0,所以实际操作过程I2C传输的头字节应该是A0,.而不是单纯的50h!

CH455G地址

CH455G芯片是一款键盘扫描芯片

查看数据手册发现没有向之前的EEPROM有单独的地址章节介绍,而是一个实例

结合我们之前说到的I2C方向的问题,器件的地址应该是 0100100 = 24h

注意

跟EEPROM的操作一样,实例是一个写入的操作,所以 0100100 + 0 = 0100100 0 = 48h

IIC(I2C)总线设备地址,例如E2PROM、CH455G等器件应用相关推荐

  1. iic获取salve设备地址_Linux下使用IIC总线读写EEPROM(读写i2c从设备通用程序)

    Linux 下使用IIC总线 读写 EEPROM by 韩大卫 @吉林师范大学 handawei@jusontech.com 转载请务必表明出处 ******************* ******* ...

  2. IIC(I2C)总线上的设备其地址如何定义?通俗易懂

    IIC(I2C)总线上的设备其地址如何定义? IIC总线 一般串行数据通讯都有时钟和数据之分,有异步和同步之别. 有单线,双线和三线等. I2C肯定是2线的(不算地线). I2C协议确实很科学,比3/ ...

  3. DSP 2803x IIC/I2C总线

    参考手册:TMS320x2803x, Piccolo Technical Reference Manual.pdf IIC总线: 概念 IIC总线(Inter IC BUS)由 PHILIPS 公司推 ...

  4. 【RTT】I2C总线设备:分析

    I2C总线设备 概要 一.I2C硬件资源初始化 二.软件I2C的注册函数 三.I2C总线设备的注册 四.I2C总线设备的初始化 五.I2C的数据 六.I2C总线设备的使用 1. 查找I2C总线设备 2 ...

  5. IIC/I2C总线实验

    1.I2C总线相关概念的介绍 1> I2C总线是PHLIPS公司在八十年代初推出的一种同步串行的半双工总线,主要用于连接整体电路. 2> I2C总线为两线制,只有两根双向信号线.一根是数据 ...

  6. iic获取salve设备地址_I2C从设备地址(Slave Address)的设置与获得

    易获得的资料不在这里列出. 这里首先要明确一个设备是即可以做为主设备(master)也可以作为从设备(slave)的.而像微处理器这种设备可以同时作为主设备和从设备,只要使用两对I2C接口就行了.以下 ...

  7. 正点原子IMX6UL 检测I2C上设备地址

    需要检测I2C上设备的地址, 原理图如下 &i2c1 {clock-frequency = <100000>;pinctrl-names = "default" ...

  8. 浅谈 IIC I2C 总线协议

    简介 IIC(也称I2C或I2C)总线是Philips公司开发的一种简单.双向二线制同步串行总线,是Inter-Integrated Circuit的缩写. IIC只用两条双向线,一条SDA(Seri ...

  9. 干货总结:I2C总线详细要点

    [导读] 前文总结了单片机串口个人认为值得注意的一些要点,本文来梳理一下 I2C 总线的一些要点.这个题目有点大,本文对于 I2C 其实很多地方也没整清楚,只为了与前文形成系列,如果大家有补充欢迎留言 ...

最新文章

  1. MySQL 规范及优化
  2. 【PAT乙级】1032 挖掘机技术哪家强 (20 分)
  3. 类的加载过程三:Initialization
  4. Nacos,阿里开源,是真的香!!
  5. jQuery 1.4官方文档中文版
  6. 判断 list 集合是否含有重复对象
  7. 企业级服务器必备的常识
  8. 接受你无法改变的事情 改变你可以改变的事情
  9. 给初学者的 RxJava2.0 教程 (九)
  10. Linux下informix的安装(最简单超详细)
  11. doris的tablet副本修复相关情况总结
  12. php测线路网速,php 测试网速
  13. 今日头条安卓_考察今日头条总部—字节跳动
  14. 一元三次方程求根公式推导
  15. 我的世界服务器连接协议,go-mc: Minecraft(我的世界)各种协议的Go实现
  16. 计算机考试excel统计图怎么做,excel表格取数据做统计图-Excel如何制作统计数据...
  17. 如何回答「为什么想做产品经理」【面试核心问题3】
  18. OptaPlanner-车间调度个人心得-matlab
  19. 2022年生物医用膜市场前景分析及研究报告
  20. Hadoop/Spark大数据 Cloudera CCA Spark and Hadoop certificate CCA175认证

热门文章

  1. java过滤ios表情,JS前端去掉emoji表情和Java后台处理emoji表情方法
  2. 怎么把PDF调方向保存?这几个方法值得收藏
  3. WEB开发碰到的问题及经验十八则
  4. seo优化时网站_选择关键词的方法
  5. Linux LASA声卡驱动之三:PCM设备的创建
  6. Java基础语法02-流程控制
  7. 北京,探索「宜居」的技术路径
  8. OSPF NBMA网络
  9. elasticsearch学习之字段统计
  10. Whitelabel Error Page(2)之Internal Server Error