LPC11C14通信接口之I2C

发布者:平和梦想最新更新时间:2019-01-15 来源: eefocus关键字:LPC11C14  通信接口  I2C 手机看文章 扫描二维码
随时随地手机看文章

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 引用地址:LPC11C14通信接口之I2C

上一篇:Cortex-M0(NXP LPC11C14)启动代码分析
下一篇:LPC_11C14平台I2C分析

推荐阅读最新更新时间:2024-03-16 16:22

基于Profibus-DP现场总线通信接口设计
     0 引言   Profibus是开放的、与制造商无关、无知识产权保护的标准。因此世界上任何人都可以获得该标准并设计各自的软硬件解决方案。Pro-fibus-DP通信接口的开发有两种方案选择:单片机+软件;单片机+Profibus通信芯片ASIC。   方案2中Profibus-DP协议完全由Profibus通信ASIC来实现,单片机主要处理用户程序。因此方案2开发周期相对少很多,本文将采用单片机+Profibus通信ASIC来实现Profibus通信接口的设计。   1 Profibus-DP基本特性   Profibus包括三个兼容系列:Profibus-FMS,Profibus-DP,Profibus
[嵌入式]
基于单片机的I2C的读写操作实验
利用24C08断电以后存储的数据不消失的特点,可以做一个断电保护装置。首先利用单片机做一个0-99秒的自动计时器。然后随机关断电源,在 通电以后计时器接着断电前的状态继续计时。 首先简单的说明以下I2C总线,I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。在 I2C总线上传送的一个数据字节由八位组成。总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。数据传送首先传送最高位(MSB),数据传送按图1所示格式进行。首先由主机发出启动信号“S”(SDA在SCL高电平期间由高电平跳变为低电平),然后由主机发送一个字节的数据。启动信号后的第一个字节数据具有特殊含义:高七位
[单片机]
基于单片机的<font color='red'>I2C</font>的读写操作实验
stm32 I2C自收发测试例程
define BufferSize 4 define I2C2_SLAVE_ADDRESS7 0x30 /* Private macro ————————————————————-*/ /* Private variables ———————————————————*/ vu8 I2C1_Buffer_Tx = {1, 2, 3, 4}; /* I2C1待发送字节数组 */ vu8 I2C2_Buffer_Rx = {0, 0, 0, 0}; /* I2C2待接收字节缓冲 */ vu8 Tx_Idx = 0; /* I2C1数据发送计数变量 */ vu8 Rx_Idx = 0; /* I2C2数据接收计数变量 */
[单片机]
stm32 <font color='red'>I2C</font>自收发测试例程
8051/2单片机常用的本地通讯方式 UART,RS485,I2C,SPI 之 Modbus 485 2
一 ,说明 1. 串口UART, 波特率:9600 接设备的时候,一般只接GND RX TX,不会接Vcc,避免与目标设备上的供电冲突。 1.1 RS485标准( +2V ~ +6V:1 / -6V ~ -2V:0) 1.2 RS232标准( -15V ~ -3V:1 / +3V ~ +15V:0),需要MAX232进行电平反转后,才能与MCU进行通讯 1.3 TTL标准( 2.4V--5V:1 / 0V--0.5V:0 ) 二、演示 三、代码 /** * 8051/2 DEMO 3 * 常用的本地通讯方式 * 1. 串口UART, 波特率:9600 * 接设备的时候,一般只接GND RX TX,不
[单片机]
8051/2单片机常用的本地通讯方式 UART,RS485,<font color='red'>I2C</font>,SPI 之 Modbus 485 2
I2C学习之STC15F204EA---GPIO端口模拟--简单控制PCF8574AT
一定要记得加4.7K左右的上拉电阻----与器件类型不同导致的地址不一样! ------------------------------------------------------i2c.h----------头文件----------------------- #ifndef __I2C_H #define __I2C_H #define I2C_SCL_1() P32=1 //SCL = 1 #define I2C_SCL_0() P32=0 //SCL = 0 #define I2C_SDA_1() P33=1 //SDA = 1 #define I2C_SDA_0() P33=0 //SDA = 0 #defi
[单片机]
<font color='red'>I2C</font>学习之STC15F204EA---GPIO端口模拟--简单控制PCF8574AT
AT89S52单片机模拟I2C总线协议读写AT24C04
I2C总线是2条线总线.数据线SDA,时钟线SCL.结构简单. AT24C04是具有I2C总线接口的EEPROM.大小为512*8bit.单片机AT89S52本身不具有I2C总线结口,所以可编写程序用并行端口模拟I2C总线协议读写AT24C04. 多个设备通信的重点(1.电平的区别,如串口通信中PC与单片机通信,PC机串口电平值为+12V~-12V,单片机为TTL电平0V~+5V.,所以要用电平转换芯片转电平.2,通信协议.(串口通信协议)) 具体的协议内容与数据格式可查资料. 代码如下: #include reg52.h #define WriteDeviceAddress 0xa0 #defin
[单片机]
I2C总线协议的一些理解
1、无论读与写,都是在时钟线为低时把数据送到数据总线上,在高时采样数据,把数据锁存到内部,所以读之前先把时钟线拉低,做好准备(数据线为高表示释放数据线),为接下来读数据做好准备。也就是时钟信号为低时,数据线上的高低电平才允许变化,时钟信号为高时,数据总线上的数据必须保持稳定。   2、起始信号产生后,总线为被占用状态(SDA拉低);终止信号产生后,总线为空闲状态(SCL被释放了)。   3、接收器件收到一个完整的数据字节后有可能需要完成一些其它工作,如处理中断,可能无法立刻接收下一字节,这时从机将SCL拉成低电平,从而使主机处于等待状态。直到从机准备好接收下一字节,再释放SCL线使之为高,从而数据传送可继续进行。数据线上
[嵌入式]
I2C接口的数字温度传感器TMP101及其应用
摘要:TMP101是TI公司生产的12位低功耗、高精度数字温度传感器,较宽的温度测量范围和较高的分辨率使其可以广泛应用于许多温度测量场合。TMP101可通过串行总线接口方便地与数字系统相连,同时还具有关闭模式和报警输出。文中介绍了TMP101的内部结构和主要特性,并给出了与PrPMC800模块的接口应用。 关键词:温度传感器;I2C;SMBus;PrPMC800;TMP101 1 TMP101的引脚功能和主要特性 TMP101是TI公司生产的12位低功耗、高精度的数字温度传感器它采用与I2C和SMBus相兼容的2线数字接口,可应用于许多高分辨率和宽量程温度测量场合,如温度控制系统、个人计算机保护、电子测试仪器、办公设备以
[传感技术]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved