加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 通讯

i2c是总线通信协议。这里的协议是什么

时间:2024-01-24 04:21:14  来源:http://www.facechina.net  作者:admin

一、i2c是总线通信协议。这里的协议是什么

应该是协议的名字吧,协议就是规定一些通信双方都要执行的标准,用以完成通信,比方说规定双方传输数据的格式,类型。总线协议这块,我不是很熟悉,也就不知道别的协议了。

二、串行通讯方式 spi和 i2c各有何优点(适合在何种场合使用),两单片机板上相连,采用何种方式好.

1,SPI总线就是三根。 片选CS一根,这个由各自芯片决定,有高平或者低平的。这个其实是必须的,因为只有片选到了才能找到。和我用的总线74HC573(或者74LS373)锁存器一个道理。如果片选成功,就上第二根线SCL,这个上面就是时钟,这个时钟完全可以模拟,当然时钟上面是有时序的,用程序延时把时序调整好,模拟就没问题。最后就是I/O口,如果是三线的SPI,那么这根线就是数据双向传输的,如果是四根的SPI,这个我现在还没用过,就是一方入一方出,不过我觉得完全没必要,一根线数据来去就挺好。由于是一根或者两根线,那么数据就靠串行来去。2,I2C总线就是两根。 就是一根SCL时钟,另一个根SDA传数据,就两根,没有了I2C的那个片选CS端。因此在这个上面传输数据,必须靠I2C这两根唯二的的线表示启动、传输和停止等。电平就只有高低了,那么还能利用什么呢,就是上升沿和下降沿,总之,在这么两个线上其实好好多组合。第一类,电平组合类SCL和SDA的配合四种:高平+高平、高平+低平、低平+高平、低平+低平;第二类,电平SCKL和边沿SDA组合类:高平+上升沿、高平+下降沿、地平+上升沿、低平+下降沿。可以看出就这么两根线上可以利用的东西也不少,用这些组合就可以表示起动、停止等等,甚至根本就用不了这么多。退一万步讲,即使全部都用了,还可以串行继续组合么,还可以先SDA再SCL么,总之两根线都能被挖掘这么深,我不得不佩服那些飞利浦工程师们的创造力。从上面就明白了,如何表示所选择的芯片的启动,就靠这些组合。例如:SCL上高平上SDA上的上升沿或者下降沿,证明主机发送了芯片的启动要求。还有一个问题就是,如果I2C上挂了多个I2C器件,那么怎么知道启动那一个呢,因为它们又没有SPI的片选CS那个管脚,这个管脚可以通过类似三八译码器那样找到类型相同但是不同的芯片,I2C上又没有怎么办呢?I2C的器件上有几个管脚接地或者挂高(AT24C02就是,叫可编程管脚)就是地址,还有就是器件厂商也规定了I2C上发送的第一个字节就是芯片地址,前四个位0000~11111,这个最多可以表示16个不同类型的I2C器件(实际I2C器件根本没有这么多,而且0000和1111不能用,所以只剩下14个了。这个国际统一的规定,就是I2C的协议,《全国大学生电子设计竞赛——单片机应用技能》P171有说明,“I2C总线委员会”的规定)。剩下的3个位就是器件的地址,这个地址和I2C上发的地址对上了,就找到了,剩下最后一位是读写。然后在I2C上的两根线上写数据,先写芯片地址,再写找到的芯片内部的地址,最后是读或者是写这个地址,而且每发送一个字节必须从机给个应答,也就是链接的I2C器件给主机(一般是单片机或者是I2C接口)发送回来一个应答,而且应答是必须是收一个字节接一个应答那么交替。因此从这点上看来,I2C协议实现起来其实挺复杂的,就为了少一根线,做了多种协议,还有就是程序比SPI变得复杂。更重要的一点是,I2C总线上所接的器件,一种I2C最多可以接8个(因为控制字前四位是种类,最后一位是读写,只有三位留给地址了),如果不同种类的I2C都算进去,总共I2C上接的器件就是14*8=112个,尽管已经很多了,但至少说明了I2C总线上能挂的器件是有限的。3、但是和SPI比较一下就会发现,尽管I2C复杂一点,器件有限,但是优点还是非常多的,因为三线SPI总线上只有SCK和I/O才是真正的总线,可以公用,但是CS片选信号可是一对一的,如果SPI总线上接112个SPI器件,SCK和I/O总线可以共用,但是112的CS片选如何处理,难道用CPLD扩展逻辑门门么,显然是不现实的。而且各个器件的CS片选有的是高有的是低,也是个麻烦。这点看来,SPI编程比I2C尽管简单,但是硬件麻烦,I2C软件复杂,但是硬件会简单。总体来说还是I2C有更多好处,因为软件总比硬件问题好处理。4、共同的问题,如果在一些简单的单片机例如AT89S51上模拟I2C或者SPI总线的时候,时序中高低电平长短和晶振有关,因此当换用不同的晶振或者单片机时候,要改变时序中控制高低电平的延时因子。

I2C具有以下优点:1. 硬件简单,资源消耗少。只有时钟和数据线。2. 时钟同步和仲裁的实现原理也很简单,以开漏/集电极开路门以线路逻辑简单实现。3. 协议设计精巧、易用、灵活。数据、地址、指令都可以传。4. 使用广泛,现在几乎所有的IC厂商都在芯片上集成了I2C。5. Philips 对I2C协议的IP已经过期,license上几乎不用考虑。

三、谁给我I2C通信协议,要详细的。

一. 技术性能: 工作速率有100K和400K两种; 支持多机通讯; 支持多主控模块,但同一时刻只允许有一个主控; 由数据线SDA和时钟SCL构成的串行总线; 每个电路和模块都有唯一的地址; 每个器件可以使用独立电源 二. 基本工作原理: 以启动信号START来掌管总线,以停止信号STOP来释放总线; 每次通讯以START开始,以STOP结束; 启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R. /W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据; 当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号; 每个数据字节在传送时都是高位(MSB)在前; 写通讯过程: 1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线; 2. 发送一个地址字节(包括7位地址码和一位R/W); 3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK); 4. 主控收到ACK后开始发送第一个数据字节; 5. 被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束; 6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线; 读通讯过程: 1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线; 2. 发送一个地址字节(包括7位地址码和一位R/W); 3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK); 4. 主控收到ACK后释放数据总线,开始接收第一个数据字节; 5. 主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束; 6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线; 四. 总线信号时序分析 1. 总线空闲状态 SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高; 2. 启动信号START 时钟信号SCL保持高电平,数据信号SDA的电平被拉低(即负跳变)。启动信号必须是跳变信号,而且在建立该信号前必修保证总线处于空闲状态; 3. 停止信号STOP 时钟信号SCL保持高电平,数据线被释放,使得SDA返回高电平(即正跳变),停止信号也必须是跳变信号。 4. 数据传送 SCL线呈现高电平期间,SDA线上的电平必须保持稳定,低电平表示0(此时的线电压为地电压),高电平表示1(此时的电压由元器件的VDD决定)。只有在SCL线为低电平期间,SDA上的电平允许变化。 5. 应答信号ACK I2C总线的数据都是以字节(8位)的方式传送的,发送器件每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。 6. 无应答信号NACK 在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途: a. 一般表示接收器未成功接收数据字节; b. 当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。 五. 寻址约定 地址的分配方法有两种: 1. 含CPU的智能器件,地址由软件初始化时定义,但不能与其它的器件有冲突; 2. 不含CPU的非智能器件,由厂家在器件内部固化,不可改变。 高7位为地址码,其分为两部分: 1. 高4位属于固定地址不可改变,由厂家固化的统一地址; 2. 低三位为引脚设定地址,可以由外部引脚来设定(并非所有器件都可以设定);

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
相关文章
    无相关信息
栏目更新
栏目热门