一、先决知识

            (1)模电基础知识(用以理解IIC如何通信)

二、IIC概览

              I2C是80年代飞利浦(Philips->NXP->高通)研发的双线串行总线。目前,I2C广泛应用与单微处理器,EEPROM,数模转换,压力传感器等芯片的接口。

三、IIC结构,协议和时序

1、总线结构

            
            由图中可知
               SDA:data line (数据传输线) 
               SCL:clock line (时钟线)
            (1)IIC采用了双线总线
           (2)由1,2箭头指示可知 IIC器件内部采用了开漏的方法,总线被上拉,即总线状态只能是被下拉为0(当MOS管输入0的时候)
            (3)只要有一方下拉了总线,总线状态必定为0

2、IIC协议

(1)模式

标准IIC 速度
Standard-mode (Sm)普通模式  100 kbit/s
Fast-mode (Fm)快速模式
400 kbit/s
High-speed mode (Hs-mode)高速模式
3.4 Mbit/s
变种IIC
Fast-mode Plus (Fm+)快速+模式
1 Mbit/s
Low-speed mode(Ls-mode)低速模式

10kb/s

(2)具体通信时序

                ①IIC协议上不区分主从设备,谁发起谁是主设备
                ②IIC通信时序的组成元素
            
               易见:IIC时序主由以上四个元素组成
            如何理解这四个时序?
            由于IIC只有两根线,其中一根被用于时钟信号(SCL),且如我们一般所知的,CLK在高电平时传输的是数据是稳定的,那么就传输的内容可以分为两种情况:在CLK高时不变的是数据位,在CLK高时跳变的是控制位。并且跳变有两个方向:1-0和0-1(又知SDA总线闲事是1,且只有下拉操作)故1-0是开始信号,0-1是结束信号(释放总线信号)
           由于,SDA传输完一个bit之后,主机会释放SDA线(最后一位是0时即取消下拉或者最后一位本来就是1),这时SDA处于高电平的状态,从机就可以控制SDA线了,若从机下拉了SDA线并且主机从SDA读到了这一个低电平,则表示从机发送了一个确认信号(0)。若从机不对SDA下拉,则主机读到SDA依然位高电平,故表示一个非应答信号(1)。
        
            ③如何发起通信
            
         流程如上图,可以总结位:设备发出开始信号(当总线没有被占用时)通知其他设备总线被‘我’占用了我要开始操作了,成为主机-->主机占用SDA发出地址和读/写操作-->主设备放SDA-->地址对应的设备占用SDA,发出回应(其他设备忽略,并且记下总线被占用了)-->主设备收到回复重新占用SDA发送数据-->主设备释放SDA等待回应-->从设备占用SDA发出ack信号-->主设备发出停止信号,告知从设备和其他设备通信结束,总线被释放 。
            ④常见读写时序
                Ⅰ:单字节写(如上图)(数据只能在SCLK为低的时候变换,高的时候要保持稳定)

⑤关于IIC设备地址问题

               Ⅰ:通常 设备地址的高7位为地址,最低位  读写操作位 0位读 1为写
              Ⅱ:设备地址数的问题:理论上7位由128位地址,然而除去保留几个保留地址如广播地址0x00等,数量少于128个,且标准协议里遇见了地址的局限性,扩充了10位地址的概念(此处不进行论述)
            Ⅲ:对于IIC可以挂多少个设备的问题:对于同一个地址的设备来说,在不进行地址扩充(片选)的情况下只能挂一个,对于不同的设备来说,标准协议里面没由限制具体的个数的多少,这个由线路布线情况,软件情况以及工作模式确定。对于标准模式,只要总线上的负载电容不超过400pf,不超过芯片的负载能力既可以。

四、如何模拟IIC通信协议

(1)由上可见,我们只要模拟4个1位的基本信号+2个8位传输信号就可以完成所有的模式。

具体要实现的函数

Ⅰ:I2C_START()  //开始信号

Ⅱ:I2C_STOP()    //结束信号

III: I2C_ACK()        //发送响应信号

Ⅳ:I2C_NACK()    //发送非响应信号

Ⅵ:I2C_SEND(unsinged char data) //数据发送信号

Ⅶ:I2C_READ(unsigned char * data)//数据读取信号

显现时需要注意的细节:结束后总是释放SDA,即输出1。时序的延时问题要小心,参看具体器件的datasheet。

            


嵌入式常用技术概览之IIC(I2C)的更多相关文章

  1. 嵌入式常用技术概览之SPI

    一.先决知识             (1)理解并知道移位寄存器如何工作 二.SPI概述             SPI(serial Peripheral Interface 串行片上(外围)设备接 ...

  2. Android无线开发的几种常用技术(阿里巴巴资深工程师原创分享)

    完整的开发一个android移动App需要经过从分解需求.架构设计到开发调试.测试.上线发布等多个阶段,在发布后还会有产品功能上的迭代演进,此外还会面对性能.安全.无线网络质量等多方面的问题. 移动A ...

  3. 【转】Intel RealSense(实感技术)概览

    Intel RealSense(实感技术)概览 1 Reply 版权声明:本文系本站作者自己翻译整理,欢迎转载,但转载请以超链接形式注明文章来源(planckscale.info).作者信息和本声明, ...

  4. 必知干货:Web前端应用十种常用技术你全都知道吗?

    Web前端应用十种常用技术,随着JS与XHTML的应用普及,越来越多的web界面应用技术出现在网站上,比如我们常见的日历控件,搜索下拉框等,这些web界面应用技术大大的丰富了网站的表现形式,本文将为您 ...

  5. Windows Phone 8.1 开发技术概览 (Universal APP)

    前一阵真的比较懒 WP8.1 已经出来这么长时间了现在才更新BLOG让大家久等了,今天我先为大家介绍下 WP 8.1的开发框架,什么是微软所推崇的 Universal APP,以及我们要开发 Univ ...

  6. React.js 常用技术要点

    最近在公司的一个移动端WEB产品中使用了React这个框架(并不是React-Native),记录一下在开发过程中遇到的各种问题以及对应的解决方法,希望能对读者有所帮助. React原则 React不 ...

  7. BizTalk 开发系列(三十九) BizTalk Server 2009技术概览

    BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...

  8. Java SE技术概览 - Jave SE Platform at a Glance

    从学习到工作,使用Java有几年时间,一直没有好好端详一下她的“内涵”.无意中看到一个关于Java SE的概览图,发现Java中提供的API还挺系统全面,把她放到博客中,相信对于想系统了解Java技术 ...

  9. 转:Linux网络IO并行化技术概览

    转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...

随机推荐

  1. grid和flex区别

    网格容器 VS Flex容器 网格属性 VS Flex属性

  2. ionic ion-tab图标修改, 自定义tab图标

    遇到需要自定义tab图标很简单, 只需要自定义相应的css就可以了, 这里要注意的是如何调整背景图片的大小. <ion-view hide-back-button="false&quo ...

  3. Spring HttpInvoker 从实战到源码追溯

    Spring HttpInvoker 作为 Spring 家族中老牌远程调用模型,深受开发者喜爱. 其主要目的是来执行基于 HTTP 的远程调用(轻松穿越防火墙),并使用标准的 JDK 序列化机制. ...

  4. 【推荐】Hutool 的通用工具类库

    摘自3.1.1版本作者发布原话,当时看到有点说不上的情绪,为作者的坚持.热爱点个赞. 已经想不起来是怎样结识 Hutool 的,但 Hutool 伴随几个项目的推进,获得了同事一致好评. 没经过实践和 ...

  5. Ubuntu安装守护进程supervisor

    Supervisor安装与配置(Linux/Unix进程管理工具) asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel) 为了保证服务能够稳定 ...

  6. Mybatis中自定义映射xml参数传递使用

    在使用mybatis框架时,大多时候自动生成的mapper.xml文件能满足我们所需的数据库操作,但一些情况下还是需要我们自己写sql:为了加深印象,总结了下参数传递的方式以及各个关键字的含义如下: ...

  7. 在chrome Sources 页 显示 Console(drawer) 页

  8. java.lang.IllegalStateException: Cannot run without an instance id.

    启动springboot,报错:quartz集群报错: Sep 09, 2016 5:33:47 AM org.apache.catalina.core.ApplicationContext log ...

  9. Effective Java 第三版——64. 通过对象的接口引用对象

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  10. crontab 选择编辑器 select-editor

    用root第一次运行 crontab -e 会出现如题的错误,解决方法如下: 1.select-editor 选择编辑器,我选的vim.basic. 2.crontab -e 进入编辑器编辑. 推荐第 ...