1、什么是IIC?

IIC的英文全称Inter-IntegratedCircuit(集成电路总线),是一种多向控制总线,由飞利浦半导体公司在八十年代初设计,主要是用来连接整体电路(ICS)。在IIC中,多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源,这种方式简化了信号传输总线。

因此,IIC实质是用来在芯片和外围器件之间连接的通信接口。

2、IIC接线

IIC通信一共要有2根线:SCL(时钟线)和SDA(数据线)

SCL时钟线:控制IIC通信双方进行数据传递控制

SDA数据线:IIC通信双方数据传输

一个主设备可以连接多个从设备,那么究竟什么是主设备,从设备?IIC总线结构如下:

所谓的主设备就是控制着SCL时钟输出的一方,那么被动接收SCL的一方就是从设备了。

3、IIC通信协议

IIC通信是属于同步串行通信的一种,并且支持1对多的通信方式(一主多从),所以IIC通信我就以主设备发送一个字节的数据0xaa为例讲解IIC通信协议。

首先,我们将发送一个字节0xaa需要解决的问题先思考下:

(1)MSB(高位)还是LSB(低位)在前?

0xaa转换成二进制是1010 1010,而串口发送数据是一个bit位一个bit位的发送的,那么在开始发送时应该先发送高位的1还是低位的0呢?

这里大家注意下,在同步串口通信中,一般是先发送高位,后发送低位。IIC就正好是同步串口通信的一种,所以发送0xaa的时候,是先从高位开始向低位的顺序发送的。怎么区分是同步还是异步呢,主要看通信接口中有没有时钟线SCL,有SCL的就是同步,反之没有的就是异步。

(2)开始发送的时候,怎么区分总线的空闲和繁忙状态?

作为通信接口,在收发双方之间必然存在实际的物理连接线路,那么线路必然存在两种状态:繁忙(有数据正在传输中)和空闲(线路空闲没有数据传输),IIC的两根线:SCL和SDA,在空闲的时候都是默认输出高电平的。那么怎么开始数据的传输(从空闲到繁忙)、怎么结束数据的传输(从繁忙到空闲)?

既然IIC总线在空闲的时候,SCL和SDA都是输出高电平,那么IIC总线协议规定,组合信号:SCL保持高电平不变,SDA输出低电平,产生下降沿突变,这个组合信号就是起始信号,用来是的IIC总线从开始的空闲态切换到繁忙态。

(3)怎么从主设备连接的多个从设备中选定要通信的从设备?

IIC支持一个主设备连接多个从设备的方式,那么在通信的时候只能有一个从设备和主设备建立通信,但是IIC又不能和SPI一样,增添一个独立的引脚用来区分,那IIC怎么实现和从设备的连接呢?

每一个IIC设备一般在出厂的时候都会编好号,这个编号就是IIC设备如果作为从设备通信的时候的从设备地址。当然有些设备在出厂的时候可能没有编号,比如咱们的LPC11C14,但是我们可以人为写入,只要注意这个IIC从设备地址是全球不唯一,但是在实际物理开发板上是惟一的原则就好。

从设备地址一般是7个bit位宽度。

所以,主设备要想从多个从设备中选中某一个从设备进行通信,只要知道这个从设备的地址就可以了(也必须要知道),在开始通信后(发送起始信号后),将要通信的从设备地址发送出去,那么挂在IIC总线上的所有从设备都会受到从设备地址,这时候他们会和自己的从设备地址进行比较,看是否一样,不一样的从设备就会陷入休眠。

(4)数据bit位中的1怎么发送?bit位中的0怎么发送?

    IIC数据位传输是一位一位传输的,每传输一个bit位,耗时SCL的一个时钟周期,在这个时钟周期内,低电平期间,向引脚发送数据,高电平期间,保持稳定不变,具体时序如下:

    (5)一次发送的帧的格式是什么?

    IIC每次发送数据都是8bit一个字节为单位。

    (6)能不能一次发送多个字节?如果能,怎么发送?

    IIC可以一次发送多个字节,只要中途不出现停止信号,直接按顺序发送就可以了。

    (7)发送方怎么确定自己发送的数据接收方收到了?

规范接收方每接收一个字节数据,都会在第9个时钟周期给IIC发送方回一个ACK应答信号(发送方释放SDA,从设备借助SDA输出低电平),否则其他情况全部视作NACK非应答信号(没有收到信号、或者收到的是高电平)。

   (8)只有一根SDA用来进行收发数据,那么怎么判断方向?

在开始建立通信时,主设备发送了从设备地址,但是由于从设备地址宽度是7bit,而一次发送数据是一个字节,所以,通常做法是先将7个bit从设备地址逻辑左移1bit,在低位空出的bit位用来决定接下来通信的方向:0-表示发送,1-表示接收

因此,所谓的IIC通信协议的实质就是为了解决以上几个问题,可以同以下结构体现:

4、IIC控制器和IIC协议之间的关系

IIC通信协议就是上述的,规定实际通信过程的实现约定,这个只是书面约定,没有付诸实现,而IIC控制器就是实现IIC通信协议的硬件,我们一般实现IIC通信协议的方法有两种:通过IO口模拟IIC实训实现、或者直接使用IIC控制器。

LPC11C14通信接口之I2C相关推荐

  1. vpc2007_了解VPC端点

    vpc2007 If you are going to do one thing with your network traffic, it should be using https. But yo ...

  2. linux驱动系列学习之OLED(i2c接口)(八)

    一.OLED简介 本次使用的开发板正点原子Linux阿波罗.屏幕是i2c接口的四针.分辨率为128×64的oled液晶屏.通信接口为i2c.具体的i2c框架使用请参考前面的文章.oled的详细简介请参 ...

  3. 【小项目关键技术】硬件通信三种方式、串口、IIC、SPI

    文章目录 串口UART: IIC SPI SWD 仿真下载接口 串口UART: 引脚 功能 VCC GND TXD 发送数据输出引脚. RXD 接收数据输入引脚. IIC 引脚定义为:SCL.SDA ...

  4. 硬件框图分析、核心元器件参数选定和核心元器件参数选择

    文章目录 1 硬件框图分析 2 核心元器件参数选定 2.1 电源IC需求 2.2 MCU需求 2.3 温湿度传感器 2.4 NB-Iot模块 3 元器件选型 3.1 备选型号 1 硬件框图分析 硬件框 ...

  5. Camera摄像头工作原理

    回想这工作的这几年,尝尽社会的辛酸艰难,从一开始什么都没有到30万,从30万到200万,从200万到1300万,不是炫耀,我只是想通过我自己的经历告诉我的朋友们「手机像素越高,拍的照片越清晰」 摄像头 ...

  6. Linux 音频驱动

    Linux 音频驱动 硬件介绍 WM8960与IMX6ULL之间有两个通信接口:I2C和I2S 其中I2C用于配置WM8960 I2S用于音频数据传输 修改设备树文件 编写I2C子节点设备树 code ...

  7. 嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区

    浅谈嵌入式MCU开发中的三个常见误区 原创 2017-09-30 胡恩伟 汽车电子expert成长之路 目录 (1)嵌入式MCU与MPU的区分 (2)误区一:MCU的程序都是存储在片上Flash上,然 ...

  8. DFRobot高精度低功耗数字温湿度传感器SHT40

    SHT40数字温湿度传感器介绍: SHT4X是业内知名的Sensirion公司推出的第四代数字温湿度传感器系列.继承自Sensirion温湿度传感器在业界有口皆和质量,SHT40 可在测量范围内提供始 ...

  9. mpu和嵌入式linux区别,嵌入式MCU与MPU的区分和MCU开发中的三个误区

    描述 目录 嵌入式MCU与MPU的区分 误区一:MCU的程序都是存储在片上Flash上,然后拷贝到RAM中执行的 误区二:工程编译生成的下载文件大小即为最终占用Flash的大小 误区三:用户应用工程的 ...

最新文章

  1. 【BZOJ2558】Count on a tree
  2. 2015盘点最佳5笔小投资引援:骑士得枪勇士收肉盾
  3. Python语言防坑小技巧
  4. C语言面试题分享(5)
  5. 第二阶段 工作总结 05
  6. 利用GAN实现QR Code超分辨率的研究
  7. 7-6 求整数段和 (10 分)
  8. 阿里云linux绑定域名
  9. Docker+FastDFS+SpringBoot 快速搭建分布式文件服务器
  10. 1000行代码入门python-在知乎上学 Python - 爬虫篇
  11. [biztalk笔记]-1.Hello World!
  12. python实现简单的socket通信
  13. error: possibly undefined macro: LT_SYS_SYMBOL_USCORE please use m4_pattern_allow
  14. 苹果电脑系统如果删除驱动
  15. 3DMM之EOS 原理解析
  16. 金蝶kis系统连接服务器,金蝶kis专业版如何设置连接服务器
  17. 【ONES 校招前端笔试+一面】
  18. java ipv6校验_IPV6地址校验(java)
  19. vscode前端常用插件
  20. c语言自定义创建文件,c语言自定义文件名?

热门文章

  1. 非华为电脑安装华为最新电脑管家12.0.1.20出现蓝屏HwOs2EC10x64.sys解决办法
  2. 给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工
  3. 生产制造型企业如何进行一线岗位定岗定编
  4. 洛谷-1273 有线电视网
  5. 【速览】2022年内窥镜市场现状及趋势分析:国内企业布局加速,国产化替代进程加快[图]
  6. 计算机考试excel教程计算函数,职称计算机考试Excel教程:显示公式的方法
  7. Error when loading the SDK: 发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。
  8. Python(三)——如何运行Python程序
  9. java-jpa-criteriaBuilder简介及用法
  10. 【踩坑】MySQL时间索引失效