当前位置:首页 » 合同协议 » i方c协议

i方c协议

发布时间: 2020-12-29 21:30:16

A. 谁给我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. 低三位为引脚设定地址,可以由外部引脚来设定(并非所有器件都可以设定);

B. I2C协议怎么写

void delay_scl()
{
unsigned data i=10;
do
{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
while(--i);
}
void delay(unsigned char data k)//精确延时*0.1us
{
unsigned char data i=250;
do{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}//执行一个nop为1个时钟周期
while(--i);}
while(--k);//执行一个while为2个时钟周期
}

void i2c_init() //I2C的初始化:SDA和SCL都为高电平
{
sda=1;
delay_scl();
scl=1;
delay_scl();
}
void i2c_start() //开始信号
{
i2c_init();
sda=0;
delay_scl();
}
void i2c_stop() //停止信号
{
sda=0;
delay_scl();
scl=1;
delay_scl();
sda=1;
delay_scl();
}
void i2c_response() //应答信号
{
unsigned char xdata i;
scl=1;
delay_scl();
while((sda==1)&&(i<250))i++;
scl=0;
delay_scl();
}
void i2cwrite_byte(unsigned char data dat) //写1个字节
{unsigned char xdata i,temp;
temp=dat;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay_scl();
sda=CY;
delay_scl();
scl=1;
delay_scl();
}
scl=0;
delay_scl();
sda=1;
delay_scl();
}
unsigned char i2cread_byte() //读1个字节
{
unsigned char xdata i,k;
scl=0;
delay_scl();
sda=1;
delay_scl();
for(i=0;i<8;i++)
{
scl=1;
delay_scl();
k=(k<<1)|sda;
scl=0;
delay_scl();
}
return k;
}
void i2cwrite_add(unsigned char data address,unsigned char data dat) //写数据,1个字节地址位,1个字节数据
{
i2c_start();
i2cwrite_byte(0xEE); // 16进制Oxa0转成8bit二进制数:前7位是设备号,末位"0"表示向设备写入。
i2c_response();
i2cwrite_byte(address); //写地址
i2c_response();
i2cwrite_byte(dat); //写数据
i2c_response();
i2c_stop();
delay(100); //收到stop命令后,需twr时间来写数据,此期间不接收任何信息
}
unsigned char I2Cread_add(unsigned char data address) //读数据,1个字节地址位,函数返回数据值
{
unsigned char xdata dat;
i2c_start();
i2cwrite_byte(0xEE); //16进制Oxa0转成8bit二进制数:前7位是设备号,末位"0"表示向设备写入。
i2c_response();
i2cwrite_byte(address); //向设备写入需要查找的地址(移动设备内指针)
i2c_response();
i2c_start(); //刷新,再次查找设备
i2cwrite_byte(0xEF); // 16进制Oxa0转成8bit二进制数:前7位是设备号,末位"1"表示从设备读取。
i2c_response();
dat=i2cread_byte(); //读取数据
i2c_stop(); //读完后主机返回"非应答"(高电平),并直接发出终止信号
delay(10);
return dat;
}

C. 为什么会出现串口通信,I2C通信,SPI通信,UART通信等等这么多的通信协议,

UART用在与主机(比如计算机)接口外设相连。
I2C是由飞利浦公司提出的,用内于与芯片与芯片之间的通容信。
spi是摩托罗拉最先提出的,用于芯片与芯片间的通信,与i2c不同的是传输需要四根线,i2c传输需要两根线,所以速率比i2c快。
最早是没有统一的串行接口标准的,各个公司在自己的领域分别提出来,最终成为了通用的标准。

D. I2C数据协议

没有去查I2C的协议,但是读写位是LSB(低位)方向的,而读写位后发,所以可回以推测应该答是MSB(高位)先发的。

上面两段程序如果只从SDA的赋值情况的话(其他逻辑我没有细看),两段程序有可能都可以:
1. 先把最高位移到CY里面,再赋值,应该很好理解
2. 先由temp&0x80判断的temp的最高位,并把结果赋给SDA:这种赋值法要看编译器支持,因为SDA是一位,temp&0x80的结果是一个byte,也有写成SDA=(temp&0x80 != 0)就是把表达式的结果true or false当成1,0赋值给SDA, 实际上翻译过来就是
if(temp&0x80 != 0)
{
SDA=1;
}
else
{
SDA=0;
}
这些都要看编译器支持,然后才移位。怎么知道你的编译器是否支持这种写法呢?很简单,你要查看编译器生成的汇编文件,看看汇编代码是否正确。

不过强烈建议不要用这种写法,尽量让你的代码比较通用。

E. 51单片机串口通信,和I2C串口通信协议有什么区别和相同

I2C总线是内部总线,用来连接内部系统内的芯片。比如mcu和存储器、键盘现专实芯片、ad转换等等。
串口通属信是用来和系统外部的设别通信的。比如设备和设备之间通信。
I2C和串口在通信协议上可以做到一样,也可做到不一样,这取决与具体的情况。
mcu和2402通信,mcu和电脑通信它们之间的协议软件可以做到完全一样
比如mcu发送1 2402和电脑发送2。

F. 同步串口协议SSI(包括SPI)和I2C的区别

区别:SPI:高速同步串行口。
3~4线接口,收发独立、可同步进行 UART:通用异步串行口。
按照标准波特率完成双向通讯,速度慢 SPI:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口 Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片。
有一点要注意的是,它提供了RS-232C数据终 端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了 。
作为接口的一部分,UART还提供以下功能: 将由计算机内部传送过来的并行数据转换为输出的串行数据流。
将计算机外部来的串行 数据转换为字节,供计算机内部使用并行数据的器件使用。
在输出的串行数据流中加入 奇偶校验位,并对从外部接收的数据流进行奇偶校验。
在输出数据流中加入启停标记, 并从接收数据流中删除启停标记。
处理由键盘或鼠标发出的中断信号(键盘和鼠票也是 串行设备)。
可以处理计算机与外部串行设备的同步管理问题。
有一些比较高档的UART 还提供输入输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理数 据前在其缓冲区内存储16字节数据,而通常的UART是8250。
现在如果购买一个内置的 调制解调器,此调制解调器内部通常就会有16550 UART。
I2C:能用于替代标准的并行总线,能连接的各种集成电路和功能模块。
I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。
总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。
多路微控制器能在同一个I2C总线上共存。

G. I2C协议从机怎么发送ACK信号啊,就是把SDA拉低,要怎么编程实现啊

以复AT89c52单片机为例,主机发送指令过程中制,当需要判断SDA是否被拉低时,先值高SDA,然后反复读取SDA电平,当SDA=0时就判断SDA被拉低了,在一定时间内没有读取到SDA=0就判断出错。
汇编举例:
aACK: MOV R7,#0 ;
LOOP: CLR C ;
MOV C, IO_SDA ;
NOP;
JNC IO_SDA , LOOP_OK ;有确认信号转
DJNZ R7, LOOP ;
LOOP_ERR: //一定时间内没有检测到ACK信号。
......

LOOP_OK: //一定时间内检测到ACK信号。
......

H. I2C串行总线协议是什么

I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。


更加详细的可以去【周立功】了解更多的。

I. i2c协议的问题,请问主机如果读从机的数据,怎么知道从机(假如是传感器芯片)正好想发送数据呢

作为从机,只能接收主机的指令,不能主动发送数据。所以必须明白专,所有的通信都是属由主机发起的,主机要读取从机的数据,首先向从机发送读数据指令,从机接收到之后,发出应答信号,就会想主机发送要求的数据。当然,如果从机是遵循I2C的传感器芯片,肯定有对应的指令格式,你得先看看数据手册。

J. SCCB传输协议 ,I2C协议,I2S 这3种协议的差异

SCCB可以当做I2C,只不过不能连发。I2S是音频的,和这两个没关系。
回SCCB是简化的I2C协议,SCCB的总线答时序与I2C基本相同,它的响应信号ACK被称为一个传输单元的第9位,分为Don’t care和NA。SCCB没有重复起始的概念,因此在SCCB的读周期中,当主机发送完片内寄存器地址后,必须发送总线停止条件。不然在发送读命令时,从机将不能产生Don’t care响应信号。
I2S是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。I2S协议规定在高电平的时候传输左通道信息,在低电平时候传输右通道信息.
I2c能用于替代标准的并行总线,能连接的各种集成电路和功能模块。

热点内容
美发店认证 发布:2021-03-16 21:43:38 浏览:443
物业纠纷原因 发布:2021-03-16 21:42:46 浏览:474
全国著名不孕不育医院 发布:2021-03-16 21:42:24 浏览:679
知名明星确诊 发布:2021-03-16 21:42:04 浏览:14
ipad大专有用吗 发布:2021-03-16 21:40:58 浏览:670
公务员协议班值得吗 发布:2021-03-16 21:40:00 浏览:21
知名书店品牌 发布:2021-03-16 21:39:09 浏览:949
q雷授权码在哪里买 发布:2021-03-16 21:38:44 浏览:852
图书天猫转让 发布:2021-03-16 21:38:26 浏览:707
宝宝水杯品牌 发布:2021-03-16 21:35:56 浏览:837