volatile java 线程池 程序栈 TCP连接 javascript extjs scroll mui 后台管理ui jq遍历对象 android逆向工程师 安卓程序源代码 linux管道符 matlab自然对数 pythonassert函数 python打开文件 python文件操作 python中的join函数 python文件读取 java数据库连接 java重载和重写的区别 java创建目录 圆形截图 excel应用大全 说话不算数的经典语句 红巨人插件 c4d文字 上单塞拉斯 rpm卸载命令 mp4剪切合并大师 jpg格式转换器 勇敢者的游戏3 骰子牛牛 饥荒黄油 下拉框默认选中 SQLite编辑器 python爬取图片 铁血统帅 方正兰亭大黑简体 财务报表软件免费版
当前位置: 首页 > 学习教程  > 编程语言

IIC知识整理以及ADS1115

2020/11/24 9:48:23 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

什么是IIC? IIC (Inter-Integrated Circuit), 通常发音为: I-squared-C,是多主、多从、分组交换、单工的串行总线,通常用于处理器或微控制器与低速外围器件的短距离通信连接。这个通信协议是由(NXP半导体的前生)飞利…

什么是IIC?

IIC (Inter-Integrated Circuit), 通常发音为: I-squared-C,是多主、多从、分组交换、单工的串行总线,通常用于处理器或微控制器与低速外围器件的短距离通信连接。这个通信协议是由(NXP半导体的前生)飞利浦公司发明,并在2006年开始,I2C协议的实施不要许可费,但仍要收取I2C从机分配地址的费用。
来自:wiki

IIC的特性如下

  1. 仅用两线连接;
  2. 不像RS232那样有着严格的波特率要求,而是由主设备(mater)产生时钟信号;
  3. 设备之间的主/从关系简单,每个设备都有软件给予的唯一地址;
  4. IIC是一个真正的多主总线,提供仲裁和冲突检测的功能。

来自: I2C-BUS.COM

IIC 的发展历史

时间事件
1982年最初的100KHz I2C系统产生,其作为内部总线系统用于建立带各种飞利浦芯片的控制电路。
1992年I2C的首个标准版本1.0出现,加入400KHz的(Fast-mode)快速模式;引入10bits的地址,使得系统能够容纳多达1008个节点。
1998年版本2.0加入3.4MHz的高速模式(High-speed mode)以及满足系统在电压和电流方面的节能需求。
2000年版本2.1基于版本2 引入一个小清理。
2007年版本3 加入1 Mhz 快速+模式(Fast-mode plus)。
2012年版本4 加入5 MHz的极快模式(Ultra Fast-mode),这种模式的数据线和时钟线使用推挽输出来替代上拉电阻,并加入了辅助分配Id表。此模式只能用于单向总线。
2012年版本5 修正了一些错误。
2014年版本6 修正了两幅图。

来自:wiki


物理(电气)特性

IIC物理层的连接结构十分简单,信号的传输仅需2根线(设备之间隔离)便能实现,分别是通信时钟线(SCL)和数据线(SDA),SCL作为时钟线进行时钟同步,SDA作为数据传输线路,由于只有一条,这决定了IIC通信是单工的。一般无隔离的情况下,由于共地还需引入一条地线。

 

图1 Fast/standard 模式下的设备连接

 

图1 Fast/standard 模式下的设备连接

 

通常,I2C通信设备之间只通过普通导线进行连接,比特流信号采用TTL/CMOS标准下的高/低电平来表示1/0信号,这一方式使得传输距离很短(本来设计目的就是用于短距离通信),直接连接的传输距离短达40cm,提升通信距离则需使用P82B715一类的中继器或者改用其它通信协议与设备。


总线通信协议

IIC是多主的总线协议。总线的时钟信号(SCL)是由主设备提供,因此同一时间一条总线中只能存在一个主设备,先不考虑多主情况下的总线仲裁竞争,只考虑主设备确定的通信规则。

图2 7位地址模式下数据传输电平

 

图2 7位地址模式下数据传输电平

 

以7位地址主从IIC传输为例

IIC传输数据的模式模式为:
[ 开始 +(7位地址+1位读写+1位ACK)+(8位数据+1位ACK)*n+停止 ]
在传输过程中,每传输8位后,要通过一个ACK位进行相互确认。

 

— 接下来,将具体介绍协议

 

一位信号数据传递模式

 

图3 传递一位数据的流程

 

图3 传递一位数据


IIC协议通过数据线SDA在SCL的配合下实现信息的有效传送。每条线均可产生5V/0V或3.3V/0V的高低电平(也可以是其它方式,常用TTL和CMOS的电平模式),如图3所示,每当时钟线SCL产生高电平时,SDA所产生的电平信号为当前时钟周期下传输的有效信号;而当SCL为低电平时,SDA可改变,以产生下一周期的传输信号。
PS: 个人认为当SCL产生上升沿后,对方设备开始检测SDA的电平,以此作为当前传输的数据,而下降沿是作为SDA信息可调整的信号,在之后就能进行SDA的电平调整。

 

开始和结束条件

 

这里写图片描述

 

 

图4 开始和结束电平分析


I2C总线在待机状态时,SDA和SCL都处于高电平(两根线一般情况均接上拉电阻)。

 

  • 当开始工作时,开始信号由主设备(master)发起,SDA先由高电平转为低电平,此时的SCL是高电平。此后,SDA和SCL便配合传输开始工作。

 

  • 当停止工作时,在SCL处于高电平下,SDA由低电平转为高电平。

 

第一个byte (7位地址+1位读写+1位ACK)

 

这里写图片描述


第一个字节,共8位,前7位数可以大多数作为从机(slave)的地址,而某些数位是作为其他功能标志,本文不进行深究。7位从机地址之后的是读写位,如果为高电平,则是从从设备中获取数据,反之 0 则是向从设备写入数据,这将会影响下一个字节的操作。8位数据之后是一个ACK位的响应操作,主设备会将SDA置于高电平,等待从设备响应(由于是上拉电阻,一端置低取低),从设备置低,主设备就获得响应,然后就可进行下一字节的操作。
注意:有时采用无响应的方式,这取决于从设备的模式,为了通信的可靠性,建议采用有响应的方式。

 

Write(写)操作(8位数据+1位ACK)

这是写操作,ACK位均是从从设备向主设备发送的。

这里写图片描述

Read(读)操作(8位数据+1位ACK)

主设备每次发送8位数据完毕后,主设备会返回一个ACK值(低电平)以响应已获得数据。

这里写图片描述


操作实例

接下来将用IIC获取ADS1115芯片的电压值。

SLAVE地址
由于模块addr pin是悬空的,参考表5应该和Ground同一个地址,为SLAVE ADDRESS:1001000。

这里写图片描述

 

Pointer 寄存器

这里写图片描述

这个寄存器具有指向下一个寄存器的作用,类似索引,通过向该寄存器写入不同的数据,就可指向相应的寄存器,接下来就可以对该寄存器进行操作。

以指向config寄存器操作为例:

  • 对寄存器config进行写操作
    Start+地址+写+ACK*+0000 0001+ACK*+Config_H+ACK*+Config_L+NACK*/ACK*+End

  • 对寄存器config进行读操作
    Start+地址+写+ACK*+0000 0001+NACK*/ACK*+End
    ReStart+地址+读+ACK*+Config_H*+ACK+Config_L*+NACK+End
    注:带*表示从设备向主设备发送。

pointer寄存器中只有BIT1、BIT0有效,指向地址见表6如下:

这里写图片描述

 

CONFIG 寄存器

这里写图片描述
这里写图片描述

 

Lo_thresh and Hi_thresh 寄存器

 

这里写图片描述

 

上下限,寄存器中的是带符号的补码(负数 取反加1)
默认:
补码:8000 H~7FFF H
原码:(-2^15)~(2^15-1)

CONVERSION寄存器
该寄存器存着转换得到的AD值。
例如:
这里写图片描述

操作流程

  1. 设置 Lo_thresh 和 Hi_thresh 寄存器
    对 Lo_thresh 写操作
    Start+地址+写+ACK*+00000010+ACK*
    +Lo_thresh_H+ACK*+Lo_thresh_L+NACK*/ACK*+End
    对 Hi_thresh 写操作
    Start+地址+写+ACK*+00000011+ACK*
    +Hi_thresh_H+ACK*+Hi_thresh_L+NACK*/ACK*+End
  2. 设置CONFIG 寄存器
    Start+地址+写+ACK*+0000 0001+ACK*+Config_H+ACK*+Config_L+NACK*/ACK*+End
  3. 读取Conversion register
    Start+地址+写+ACK*+0000 0000+NACK*/ACK*+End
    ReStart+地址+读+ACK*+Conversion_H*+ACK+Conversion_L*+NACK+End
  4. 转换

参考

[1] Semiconductor P. The i2c-bus specification[J]. 2000.
[2] ADS1115 datasheet
[3] wiki

(6条消息) IIC知识整理以及ADS1115_Line的专栏-CSDN博客


本文链接: http://www.dtmao.cc/news_show_400128.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?