什么是IIC?

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

IIC的特性

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

物理(电气)特性

  1. 只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL,(IIC是半双工,而不是全双工)。
  2. 每个连接到总线的器件都可以通过唯一的地址和其它器件通信,主机/从机角色和地址可配置,主机可以作为主机发送器和主机接收器。
  3. IIC是真正的多主机总线,(而这个SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。
  4. 传输速率在标准模式下可以达到100kb/s,快速模式下可以达到400kb/s。
  5. 连接到总线的IC数量只是受到总线的最大负载电容400pf限制。
  6. I2C通信设备之间只通过普通导线进行连接,比特流信号采用TTL/CMOS标准下的高/低电平来表示1/0信号,这一方式使得传输距离很短(本来设计目的就是用于短距离通信),直接连接的传输距离短达40cm。

IIC总线通信协议

如下图所示,为IIC的通讯总线的协议数据格式。

开始和结束条件

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

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

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

一位信号数据传递模式

IIC协议通过数据线SDA在SCL的配合下实现信息的有效传送。每条线均可产生5V/0V或3.3V/0V的高低电平(也可以是其它方式,常用TTL和CMOS的电平模式),如图所示,每当时钟线SCL产生高电平时,SDA所产生的电平信号为当前时钟周期下传输的有效信号;而当SCL为低电平时,SDA可改变,以产生下一周期的传输信号。

IIC数据含义解析

IIC协议里面数据主要包括两部分:addr数据+data数据。

数据模式:

                   [ 开始 +(7位地址+1位读写+1位ACK)+(8位数据+1位ACK/NACK)*n+停止 ]

注意:

1、在传输过程中,每传输8位后,要通过一个ACK位进行相互确认。在读和写数据的过程中,ACK的来源是不一样的。

2、写数据的时候是从设备会返回一个ACK值(低电平)以响应已获得数据。

3、读数据的时候是主设备会返回一个ACK值(低电平)以响应已获得数据。

4、如果写数据的时候,有些情况下从设备要校验数据,发现数据错误,会返回NACK(高电平)来响应结束本次传输;读数据的情况下,有的情况需要NACK,然后在STOP结束本次传输。

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

因为地址数据是7bit,写地址的时候要在后面增加1bit写(低电平),达到1byte长度。

       

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

因为地址数据是7bit,读地址的时候要在后面增加1bit读(高电平),达到1byte长度。

写寄存器标准流程:

读寄存器标准流程:

TWI 协议

在AVR系列单片机中内嵌有一个TWI(Two-wire Serial Interface)接口,它实际上就是IIC总线接口,个人的理解是TWI协议是利用IIC协议的理论基础,对IIC的数据量进行修改,为每个芯片制定特定的数据量格式。

协议实例:SH367309

SH367309电器特性

SH367309 作为从机模式,MCU作为主机模式,SH367309地址固定为0X1A。

SH367309 标注

SH367309读协议

Start+(地址+写)+ACK*+RegAddress+ACK*+ReadDataLength+ACK*
               ReStart+(地址+读)+ACK*+DATA+ACK+····+DATA+ACK+CRC+NACK+Stop
              注:带*表示从设备向主设备发送。

SH367309写协议

Start+(地址+写)+ACK*+RegAddress+ACK*+CRC+ACK*+Stop
            注:带*表示从设备向主设备发送。

CRC校验不是本篇博客重点讲解的内容,需要注意的是,每次写数据完成,需要注意和下一次写数据之间的时间间隔是多少。

IIC详解以及SH367309-TWI示例应用相关推荐

  1. php中的装饰,详解PHP装饰模式的示例代码

    详解PHP装饰模式的示例代码<?php // 装饰模式 function echoLine($msg) { echo $msg, ' '; } class RequestHelper { /** ...

  2. 【STM32-I2C学习总结】STM32:硬件-IIC详解 , 固件库编程 , 手把手教你实现IIC

    STM32:硬件-IIC详解 , 固件库编程 , 手把手教你实现IIC 一 .I2C物理层 二.协议层 1.I2C基本读写过程 (1)主机写数据到从机 (2)主机由从机中读数据 (3)I2C 通讯复合 ...

  3. elasticsearch使用指南之Elasticsearch Document Index API详解、原理与示例

    作者介绍:<RocketMQ技术内幕>作者,中间件兴趣圈微信公众号维护者. 本节将重点介绍ElasticSearch Doucment Index API(新增索引). 从上节可知,Ela ...

  4. Linux账号和权限管理详解(超详细示例操作)!

    Linux账号和权限管理详解 一.用户账号和组账号概述 1.1 Linux基于用户身份对资源访问进行控制 1.2 用户账号 1.3 组账号 二.用户账号文件 2.1 用户账号文件 /etc/passw ...

  5. PAT乙级真题1058 || 选择题(详解,C/C++示例,测试点分析)

    [欢迎关注微信公众号:计算机黑科学大全,对话框回复:PAT乙级真题]获取全部真题详解及代码示例 个人博客地址:https://mzwang.top 选择题 题目描述: 批改多选题是比较麻烦的事情,本题 ...

  6. PAT乙级真题1089 || 狼人杀-简单版(详解,C/C++示例,测试点分析)

    [欢迎关注微信公众号:计算机黑科学大全,在对话框回复:PAT乙级真题]获取全部真题详解及代码示例,邀请大家加入PAT算法刷题交流qq群:821388108 个人博客:https://mzwang.to ...

  7. linux curl命令详解(附使用示例)

    Linux curl命令详解 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称u ...

  8. c语言将两个16位变为一个32位,16位汇编第六讲汇编指令详解第第三讲(示例代码)...

    16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时 ...

  9. BurpSuite工具详解及暴库示例

    一.Burp Suite工具安装及配置 1.Burp Suite Burp Suite是用于Web应用安全测试.攻击Web应用程序的集成平台,它将各种安全工 具无缝地融合在一起,以支持整个测试过程中, ...

最新文章

  1. 首次使用Cesium加载3D数据不成功
  2. python基础07_tuple_dict
  3. bat代码小游戏_程序员入职被27岁领导告诫:我被BAT录用过,是算法方面泰斗大哥...
  4. hbase集群安装和shell操作
  5. python selenium 处理弹窗_python+selenium 抓取弹出对话框信息
  6. oracle读取表空间物理文件中数据,shell脚本读取oracle数据库数据写入到文件中
  7. XenApp_XenDesktop_7.6实战篇之十二:组策略配置
  8. ES6 javascript 实用开发技巧 1
  9. 中考英语听说计算机考试满分,2020北京中考英语听说机考题型分值及满分技巧...
  10. c语言图书管理系统报告书,c语言图书管理系统实验报告_c语言程序设计报告 图书管理平台_c语言 图书管理平台...
  11. 计算机怎么把硬盘分成几个,怎么把硬盘分成整数分区_硬盘分区整数对照表
  12. c语言中的makefile编写步骤详解
  13. covar of lognormal variables
  14. SAF手持式频谱分析仪SC和手持式信号发生器SG的应用概述
  15. 研究生的生活原来是酱紫的……
  16. 梅特勒托利多xk3124电子秤说明书_梅特勒-托利多电子称设置方法
  17. 树莓派4B安装opencv4【详解】
  18. SpringBoot的旅游系统毕业设计分享和讲解
  19. python中read函数解释_Python内置函数:read()
  20. php中单引号双引号那点事---顺便说说把php变量的值传给js

热门文章

  1. 零磁屏蔽磁场发生系统/地磁动态模拟屏蔽系统简介
  2. 计算机语言学专业排名,2019QS世界大学学科排名,澳洲语言学专业排名Top200
  3. 企业上erp软件有价值?有哪些好用的功能?
  4. 初级网管或黑客必需撑握的8个DOS命令
  5. Google Earth Engine(GEE)——将影像中的云层显示出来并添加到影像波段中(Landsat8 oil)
  6. 关闭iframe中弹窗,视频也关闭播放
  7. GO实现websocket消息推送
  8. 手机、彩电巨头跨界互博
  9. Windows下Latex的系统路径增添,使用命令编译
  10. 【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo...