一、先决知识

            (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. MySQL之You can't specify target table for update in FROM clause解决办法

    这篇文章主要介绍了mysql中You can't specify target table for update in FROM clause错误解决方法,需要的朋友可以参考下 MySQL中You c ...

  2. 怎么样加快JavaScript加载和执行效率

    概览 无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaScript 执行过程耗时越久,浏览器等待响应用户输入的时间就越长.浏览器在下载 ...

  3. Effective Java 第三版——76. 争取保持失败原子性

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

  4. C语言 · 超级玛丽

    算法提高 超级玛丽   时间限制:1.0s   内存限制:256.0MB      问题描述 大家都知道"超级玛丽"是一个很善于跳跃的探险家,他的拿手好戏是跳跃,但它一次只能向前跳 ...

  5. C语言 · 空白格式化

    标题:空白格式化 “空白格式化”具体做法是:去掉所有首尾空白:中间的多个空白替换为一个空格.所谓空白指的是:空格.制表符.回车符. 填空为:*p_to<*p_from: #include< ...

  6. Excel公式笔记

    跨表,查找相同的数据,的其他列的值 =index(sheet2!$c$:$c$,match(sheet1!$b$,sheet2!$d$:$d$,)) 备注: =index(读哪里的数据(大范围), m ...

  7. css3图片处理方式 object-fit

    .fill { object-fit: fill; } .contain { object-fit: contain; } .cover { object-fit: cover; } .none { ...

  8. FlexCel 插入公式和插入新行

    //http://www.tmssoftware.biz/flexcel/doc/vcl/api/FlexCel.Core/TExcelFile/InsertAndCopyRange.html#tex ...

  9. bootstarpTable load data

    <!doctype html> <html lang="en"> <head> <!-- Required meta tags --> ...

  10. Thinkphp5.1 模板路径报错

    版本:5.1.24   ,windows环境 报错: 模板文件不存在:template\index\default\index\index.html 1.报错原因:linux/windows   对大 ...