文章目录

  • 概述
  • 时序
    • 起始信号
    • 停止信号
    • 数据信号
    • 应答信号
    • 总时序
  • IIC的地址
  • I2C读写寄存器
    • 写寄存器
    • 读寄存器

概述

IIC(I2C)是一个同步半双工串行通信协议,使用3根线即可连接

名称 功能
SCL 时钟线
SDA 数据线
GND 接地

设计用于低速设备的连接,速度不及SPI,快于串口通信,接线简单。

有主机和从机之分,主机产生时钟信号,地址信号,从机根据地址选择是否收发数据,如果主机发送的地址与从机相同,则从机开始接受或发送数据,占用地址线。

电气连接如图

时序

不同的设备的具体发送的数据不同,但总体上主设备是先发送地址,再发送或接受数据

注意:iic是同步通信方式,允许不定长度的数据,也就是每一对起始信号和终止信号中间可以传输多个8bit数据

发送地址和数据的流程为

  1. 发送起始信号
  2. 发送地址
  3. 接受校验信号
  4. 发送或接受数据8bit
  5. 接受校验信号
  6. 重复
  7. 发送结束信号

SDA和SCL的默认电平为高电平(空闲状态)

起始信号


在空闲状态时(SCL,SDA为高电平),SDA产生下降沿为起始信号

注意:SDA如果要回到高电平,需要在SCL为低电平时动作,避免误触停止信号
如果SDA为低电平时,将其置高时,SDA高电平状态需要存留一段时间,
SDA与SCL下降沿之间也需要一段延迟
具体时间与外设有关

思路

  1. 拉高SDA和SCL,顺序无所谓,确保进入空闲状态
  2. 拉低SDA,产生下降沿,发送起始信号
  3. 拉低SCL,确保数据传输不好误触(也可以放到数据传输的最前)

停止信号


在SCL为高电平时,SDA产生上升沿信号,之后SCL,SDA全为高,进入空闲状态

注意,SCL与SDA的上升沿之间需要一定时间间隔,SDA的高电平需要持续一段时间

思路:

  1. 拉低SDA(默认从发送数据后SCL为低电平)
  2. 拉高SCL
  3. 拉高SDA,产生终止信号,回到空闲状态

数据信号

对于数据来说,只有SCL为低电平时才允许SDA发送电平变化
即SCL为高电平时SDA保持稳定,为高电平或低电平

就像这样,只有在SCL为低电平时才允许SDA变化
思路:

  1. 拉低SCL
  2. 改变SDA为自己的数据(发)
  3. 拉高SCl
  4. 读取SDA的电平(收)
  5. 重复到8次

应答信号

当数据传输完成后,需要产生一个校验信号,这是第9个时钟周期,应答信号由接受机产生
这个信号除了数据来源不同以外,与数据信号完全相同
SDA为低电平为应答,高电平为非应答
思路

  1. 拉低SDA(收)(默认从数据出来是低电平)
  2. 拉高SCL
  3. 读取SDA(发)
  4. 拉低SCL

总时序


读数据和写数据只有方向上的区别

注意:时钟信号是由主设备产生的,数据信号可以由主从设备操作
主设备产生时钟信号时不要忘记应答信号的时钟
接收时不要忘记应答信号

IIC的地址

地址由主机发送
从高位到低位发送7bit地址,最后一位是选择发送或接受数据
0是主机发送数据,1是主机接受数据

I2C读写寄存器

写寄存器

  1. 起始信号(开始I2C通信)
  2. 发送从设备地址(检测应答)
  3. 发送寄存器地址(检测应答)
  4. 发送数据直到完成(每次均检测应答)
  5. 发送结束信号

读寄存器

  1. 起始信号(开始I2C通信)
  2. 发送从设备地址(检测应答)
  3. 发送起始信号(表示发送的是寄存器地址)
  4. 发送寄存器地址(检测应答)
  5. 读取数据(发送应答信号)
  6. **读取到最后一个字节时(**发送非应答信号)
  7. 结束信号

【基础知识】IIC(I2C)协议相关推荐

  1. 计算机网络基础知识--TCP/IP协议、IP分组、TCP传输

    转 计算机网络基础知识--TCP/IP协议.IP分组.TCP传输 2017年12月08日 08:35:09 孔维昊 阅读数 1820 查看全文 http://www.taodudu.cc/news/s ...

  2. 上传文件到tftp服务器,网络基础知识:TFTP协议之上传文件

    原标题:网络基础知识:TFTP协议之上传文件 上传文件指的是客户端将本地上的文件上传到TFTP服务器上.下面介绍客户端如何进行文件上传,以及上传时所涉及的各类型数据包. 1.工作流程 客户端会向TFT ...

  3. 【嵌入式Linux】嵌入式Linux应用开发基础知识之I2C应用编程和SMBus协议及AP3216C应用编程

    文章目录 前言 1.IIC协议和SMBUS协议 1.1.IIC协议 1.1.1.硬件框架 1.1.2.软件框架 1.1.3.读写数据格式 1.1.4.硬件结构--在硬件上是如何实现双向传输 1.2.S ...

  4. web基础知识(3)--HTTP协议与web框架与其他

    一.HTTP协议 HTTP(Hyper Text Transfer Protocol 超文本传输协议 )协议是基于TCP/IP协议的用于传递数据的协议,其默认端口为80/TCP,简单来说就是客户端与服 ...

  5. 存储基础知识二 主要协议SCSI、FC、iSCSI

    一.SCSI SCSI是小型计算机系统接口(Small Computer System Interface)的简称,于1979首次提出,是为小型机研制的一种接口技术,现在已完全普及到了小型机,高低端服 ...

  6. 3、以太网基础知识——ARP地址解析协议原理

    返回目录 上一篇 下一篇 概述 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.网络层以上的协议用IP地址来标识网络 ...

  7. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  8. 【网络】网络的基础知识--TCP/IP协议、IP分组、TCP传输

    1.OSI参考模型: OSI(Open System Interconnect),即开放式系统互联.一般都称为OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型.该体系结构标 ...

  9. Web基础知识之TCP_IP协议

    TCP/IP协议 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别.OSI 参考模型注重"通信协议必要的功能是什么",而 TCP/IP 则更强调&q ...

最新文章

  1. 29岁,从不学无术到技术Leader:这几个学习资源,决定你5年后的技术提升!
  2. flot中文API(转载)
  3. D455启用IMU后的RGB流故障报错
  4. 使用jMeter的csv data set config避免用户密码的硬编码
  5. python装饰器代码简洁_Python基础知识之装饰器(示例代码)
  6. EXPRESS项目PM2启动NODE_ENV传参数不生效问题解决方法
  7. 网页特效代码大全网址
  8. Unity中Camera的Clear flags,Culling Mask,Depth参数
  9. 阿里巴巴矢量图标库(Iconfont)-利于UI和前端的搭配
  10. 过滤Filtering
  11. python模拟登录12306_python基于selenium模块实现自动登录12306网站
  12. 字节跳动笔试难题 扑克牌的移动
  13. 自定义vscode插件路径及离线安装VSIX说明
  14. 微信小程序时间轴demo_微信小程序时间轴实现方法示例
  15. Python 改写__str__
  16. 国家气象局提供的天气预报接口
  17. 面向对象基础案例(2)
  18. UG NX 10.0 GRIP 二次开发
  19. 阿里最新秋招面经,腾讯/美团/字节1万道Java中高级面试题
  20. python calu_python自动重采样数据

热门文章

  1. 计算机网络——局域网原理基本概念总结
  2. 使用BMap.Label给百度地图的BMap.Marker上加上数字序号
  3. 转: 看上去很美——国内CDN现状与美国对比
  4. 搏击俱乐部:经典台词
  5. oppo 手机侧滑快捷菜单_OPPO十年发展历程:坚守创新,不忘初心!
  6. 编译原理实验一 TINY语言的词法分析
  7. Java实现文档转换为html,jodconverter
  8. 运营商 html劫持 原理,细数宽带运营商常见的几种http劫持行为
  9. Landscape design-工艺
  10. 【ARM汇编之 STM/LDM】