文档库 最新最全的文档下载
当前位置:文档库 › stm32 实现I2C流程图

stm32 实现I2C流程图

stm32 实现I2C流程图

实验八 IIC通信协议

实验八I2C通信协议 一、实验目的: 1、培养学生阅读资料的能力; 2、加深学生对I2C总线通信协议的理解; 3、加强学生对模块化编程的理解; 二、实验环境: 1、硬件环境:PC机一台、单片机实验板一块、母头串口交叉线、USB电源线; 2、软件环境:keil uVision2集成开发环境; STC-ISP下载上位机软件; 三、实验原理: 要学会I2C通信协议的编程,关键是要看懂并掌握其时序图,理解对I2C通信协议相关子程序的实验编写。I2C通信协议的总线时序图如下所示: I2C总线时序图 I2C相关子程序的详细介绍 1、起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 2、结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 起始信号和结束信号的时序图如下所示: 起始信号和结束信号的时序图 起始信号的流程如下:

1、SCL和SDA拉高,保持时间约为0.6us-4us; 2、拉低SDA,保持时间为约为0.6us-4us; 3、拉低时钟线 结束信号的流程如下: 1、SCL置高电平,SDA置低电平,保持时间约为0.6us-4us 2、SDA拉高,保持时间约为1.2-4us; 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。 若未收到应答信号,由判断为受控单元出现故障。应答信号的时序图如下所示: 应答时序图 发送时的应答信号 ;**********应答信号********** ACK: SETB SDA ;数据线置高 SETB SCL ;时钟线置高 ACALL DELAY JB SDA,$ ;等待数据线变低 ACALL DELAY CLR SCL ;时钟线置低 RET 注意:这里如果数据线一直为高将进入死循环,所以一般我们都会在这做一个容错的处理。具体的程序如下: ACK: MOV R4,#00H SETB SDA SETB SCL LOP0: JNB SDA,LOP DJNZ R4,LOP0 ;循环255次 LOP: ACALL DEL CLR SCL RET 接收时的应答信号

简单的I2C协议理解 i2c程序(调试通过)

简单的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。 五. 寻址约定

I2C总线协议规范 v2.1

THE I2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000

CONTENTS 1PREFACE. . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.1Version 1.0 - 1992. . . . . . . . . . . . . . . . . . . . 3 1.2Version 2.0 - 198. . . . . . . . . . . . . . . . . . . . . 3 1.3Version 2.1 - 1999. . . . . . . . . . . . . . . . . . . . 3 1.4Purchase of Philips I2C-bus components . . 3 2THE I2C-BUS BENEFITS DESIGNERS AND MANUFACTURERS. . . . . . . . . . . . . . .4 2.1Designer benefits . . . . . . . . . . . . . . . . . . . . 4 2.2Manufacturer benefits. . . . . . . . . . . . . . . . . 6 3INTRODUCTION TO THE I2C-BUS SPECIFICATION . . . . . . . . . . . . . . . . . . . . .6 4THE I2C-BUS CONCEPT . . . . . . . . . . . . . . .6 5GENERAL CHARACTERISTICS . . . . . . . . .8 6BIT TRANSFER . . . . . . . . . . . . . . . . . . . . . .8 6.1Data validity . . . . . . . . . . . . . . . . . . . . . . . . 8 6.2START and STOP conditions. . . . . . . . . . . 9 7TRANSFERRING DATA. . . . . . . . . . . . . . .10 7.1Byte format . . . . . . . . . . . . . . . . . . . . . . . . 10 7.2Acknowledge. . . . . . . . . . . . . . . . . . . . . . . 10 8ARBITRATION AND CLOCK GENERATION . . . . . . . . . . . . . . . . . . . . . .11 8.1Synchronization . . . . . . . . . . . . . . . . . . . . 11 8.2Arbitration . . . . . . . . . . . . . . . . . . . . . . . . . 12 8.3Use of the clock synchronizing mechanism as a handshake. . . . . . . . . . . 13 9FORMATS WITH 7-BIT ADDRESSES. . . .13 107-BIT ADDRESSING . . . . . . . . . . . . . . . . .15 10.1Definition of bits in the first byte . . . . . . . . 15 10.1.1General call address. . . . . . . . . . . . . . . . . 16 10.1.2START byte . . . . . . . . . . . . . . . . . . . . . . . 17 10.1.3CBUS compatibility. . . . . . . . . . . . . . . . . . 18 11EXTENSIONS TO THE STANDARD- MODE I2C-BUS SPECIFICATION . . . . . . .19 12FAST-MODE. . . . . . . . . . . . . . . . . . . . . . . .19 13Hs-MODE . . . . . . . . . . . . . . . . . . . . . . . . . .20 13.1High speed transfer. . . . . . . . . . . . . . . . . . 20 13.2Serial data transfer format in Hs-mode. . . 21 13.3Switching from F/S- to Hs-mode and back . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2313.4Hs-mode devices at lower speed modes. . 24 13.5Mixed speed modes on one serial bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 13.5.1F/S-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.2Hs-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.3Timing requirements for the bridge in a mixed-speed bus system. . . . . . . . . . . . . . 27 1410-BIT ADDRESSING. . . . . . . . . . . . . . . . 27 14.1Definition of bits in the first two bytes. . . . . 27 14.2Formats with 10-bit addresses. . . . . . . . . . 27 14.3General call address and start byte with 10-bit addressing. . . . . . . . . . . . . . . . . . . . 30 15ELECTRICAL SPECIFICATIONS AND TIMING FOR I/O STAGES AND BUS LINES. . . . . . . . . . . . . . . . . . . . 30 15.1Standard- and Fast-mode devices. . . . . . . 30 15.2Hs-mode devices. . . . . . . . . . . . . . . . . . . . 34 16ELECTRICAL CONNECTIONS OF I2C-BUS DEVICES TO THE BUS LINES . 37 16.1Maximum and minimum values of resistors R p and R s for Standard-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 39 17APPLICATION INFORMATION. . . . . . . . . 41 17.1Slope-controlled output stages of Fast-mode I2C-bus devices. . . . . . . . . . . . 41 17.2Switched pull-up circuit for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 41 17.3Wiring pattern of the bus lines. . . . . . . . . . 42 17.4Maximum and minimum values of resistors R p and R s for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 17.5Maximum and minimum values of resistors R p and R s for Hs-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 18BI-DIRECTIONAL LEVEL SHIFTER FOR F/S-MODE I2C-BUS SYSTEMS . . . . 42 18.1Connecting devices with different logic levels. . . . . . . . . . . . . . . . . . . . . . . . . 43 18.1.1Operation of the level shifter . . . . . . . . . . . 44 19DEVELOPMENT TOOLS AVAILABLE FROM PHILIPS. . . . . . . . . . . . . . . . . . . . . 45 20SUPPORT LITERATURE . . . . . . . . . . . . . 46

关于IIC的通信协议程序

#define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define _BV(bit) (1 << (bit)) #ifndef cbi #define cbi(reg,bit) reg &= ~_BV(bit) #endif #ifndef sbi #define sbi(reg,bit) reg |= _BV(bit) #endif extern uchar dog; /* void delay_1ms(uchar xtal) { uchar i; for(i=0;i<(uint)(143*xtal-2);i++) {;} } //2 延时nms void delay_ms(uchar m, uchar fosc) { uchar i; i=0; while(i

AT24C02数据存储I2C协议-串口通讯

/****************************************** 绿盾电子 X-13 多传感器开发板 功能:实现读写AT24C02型号的EEPROM存储。该类型存储器具有掉电数据保护功能,是单片 机项目开发中常用的芯片。AT24C02使用 I2C总线与的单片机通信,只需两根线即 可完成读写功能。 串口输出数据,串口是单片机程序调试种 最常用最重要的工具。在使用前需要主要 开发板当前晶振频率是否为11.0592MHz,如 不是,请更换晶振,或者自行计算定时器 数值。 时间:2011-8-23 ******************************************/ //头文件 #include "reg51.h" #include //宏定义 #define uchar unsigned char #define uint unsigned int

//引脚定义 sbit Scl= P3^6; //AT24C0x串行时钟sbit Sda= P3^7; //AT24C0x串行数据 //全局变量 uchar EEPROM_WriteBuffer[] = {"https://www.wendangku.net/doc/ab619613.html,"}; uchar EEPROM_ReadBuffer[20]; //函数声明 /******************************************/ //延时子函时, //参数 d_time 控制延时的时间 //作用,灯亮和熄灭必须持续一定时间,人眼才能看到 void delay(unsigned int time); /******************************************/ //延时子函数 //参数范围 0-65536 void delay(unsigned int time) //参数 time 大小 { //决定延时时间长短 while(time--); }

i2c通讯协议及程序

I2C通信协议简介 (2013-01-17 10:48:03) 转载▼ 分类:通讯协议 标签: 杂谈 ACK是acknowledge的意思,确认. 摒弃复杂的情况,这里只对I2C做简单的介绍。 一、I2C 总线的一些特征: ? 只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL ? 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器? 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏 ? 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s ? 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整 ? 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制 二、I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据 起始和结束:

bool I2C_Start(void) { SDA_H; SCL_H; I2C_delay(); if(!SDA_read)return FALSE; // SDA线为低电平则总线忙,退出 SDA_L; // 拉低SDA线(当SCL为高电平时,SDA由高电平向低电平跳变表示开始信号) I2C_delay(); if(SDA_read) return FALSE; // SDA线为高电平则总线出错,退出 SDA_L; //数据为准备好时,拉低SCL线 I2C_delay(); return TRUE; } 发出开始信号之后,设备在数据未准备好时,拉低SCL线,这样主设备可知从设备未发送数据,从设备在数据准备好,可以发送的时候,停止拉低SCL线,这时候才开始真正的数据传输 void I2C_Stop(void) { SCL_L; I2C_delay(); SDA_L; I2C_delay(); SCL_H; // SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据 I2C_delay(); SDA_H; I2C_delay(); }

I2C总线协议程序

C程序代码]I2C总线协议程序 程序代码 2009-10-11 14:05 阅读48 评论0 /**************************************************************** I2C总线协议程序 ****************************************************************/ #define NOP {_nop_();_nop_();_nop_();_nop_();} sbit SDA=P1^2; /*模拟I2C数据传送位*/ sbit SCL=P1^3; /*模拟I2C时钟控制位*/ bit ack; /*应答标志位*/ void Start_I2c() { SDA=1; NOP; SCL=1; NOP; SDA=0; NOP; SCL=0; NOP; } void Stop_I2c() { SDA=0; NOP;

SCL=1; NOP; SDA=1; NOP; } void Senduchar(uchar c) { uchar i; for(i=0;i<8;i++) { c<<=1; SDA=CY; NOP; SCL=1; NOP; SCL=0; NOP; } SDA=1; NOP; SCL=1; NOP; if(SDA==1) ack=0; else ack=1; SCL=0; NOP; } uchar Rcvuchar() {

uchar i,x=0; SDA=1; for(i=0;i<8;i++) { SCL=0; NOP; SCL=1; NOP; x=x<<1; if(SDA) x=x+1; NOP; } SCL=0; NOP; return(x); } void Ack_I2c(bit a) { SDA=a; NOP; SCL=1; NOP; SCL=0; NOP; } bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) { uchar i;

I2C协议代码

此模块包括发送数据及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,能很 方便的与用户程序进行连接并扩展。 需要注意的是,函数是采用延时方法产生SCL 脉冲,对高晶振频率要做一定的修改!! 说明: 1us机器周期,晶振频率要小于12MHz 返回1 则操作成功,返回0 则操作失败。 sla 为器件从地址,suba 为器件子地址。 ************************************************************************* ************/ #include "AT89X52.h" #include #define _Nop() _nop_() //定义空指令 sbit SDA = P1^3; //模拟I2C数据传输位 sbit SCL = P1^2; //模拟I2C时钟控制位 bit bdata I2C_Ack; //应答标志位 /************************************ I2C_Start ************************************ 函数名:void I2C_Start() 入口: 出口: 功能描述:启动I2C总线,即发送I2C初始条件 调用函数: 全局变量: 创建者:陈曦日期:2005-6-15 修改者:日期: ************************************************************************* *********/

void I2C_Start() { SDA = 1; //发送起始条件的数据信号 _Nop(); SCL = 1; _Nop(); //起始条件建立时间大于4.7us,延时 _Nop(); _Nop(); _Nop(); _Nop(); SDA = 0; //发送起始信号 _Nop(); //起始条件建立时间大于4us,延时 _Nop(); _Nop(); _Nop(); _Nop(); SCL = 0; //钳住I2C总线准备发送或接收数据 _Nop(); _Nop(); } /************************************ I2C_Stop ************************************ 函数名:void I2C_Stop() 入口: 出口: 功能描述:结束I2C总线,即发送I2C结束条件 调用函数: 全局变量: 创建者:陈曦日期:2005-6-15 修改者:日期: ************************************************************************* *********/

51单片机i2c协议示例程序

#include #include #define uint unsigned int #define uchar unsigned char sbit sda=P3^5; sbit scl=P3^4; void start_bit(); void stop_bit(); void slave_ack(); void no_ack(); void write_byte(uchar dat); uchar read_byte(); void write_date(uchar addr,uchar date); uchar read_date(uchar addr); void delay(uint x); void main() { uchar num; write_date(0x01,0xaa); delay(2); num=read_date(0x01); P0=num; while(1); } void start_bit() //开始位 { scl=1; _nop_(); sda=1; _nop_(); sda=0; _nop_(); scl=0; } void stop_bit() //停止位

{ sda=0; _nop_(); scl=1; _nop_(); sda=1; } void slave_ack() //应答信号 { _nop_(); _nop_(); scl=0; _nop_();; sda=1; _nop_(); _nop_(); scl=1; _nop_(); _nop_(); while(sda); //P0=0xfe; scl=0; } void no_ack() //无应答 { sda=1; _nop_(); scl=1; _nop_(); scl=0; } void write_byte(uchar dat) //写一个字节{ uchar i; scl=0; for(i=0;i<8;i++) { if(dat&0x80) sda=1; else sda=0;

关于I2C总线 LEGO 通讯协议 IIC总线

I2C通信总线 NXT的I2C通信总线能力很强大,使无限扩张的输入和输出成为可能。最初由飞利浦公司开发,I2C代表Inter-Integrated 电路。虽然I2C接口的物理位置在NXT输入端口上,但它实际上可以用于输入和输出。 因为I2C数据传输是顺序进行的,所以它只需要使用三根电线。一线用于发送和接收数据(SDA),而其他提供同步时钟信号(SCL)。SDA是第6针,时钟是第5针,也就是蓝色和黄色的NXT电缆。地是第2针或第3针,也就是黑色或红色的NXT电缆。 ■注意旧的NXT 固件I2C通信有一些问题,因此,请确保您正在运行1.05以上的固件。 ■注意如果您I2C程序出现挂起或崩溃,你需要重启I2C硬件电源,拔出连接线然后重新连接NXT。 I2C通讯 幸运的是,NXT支持详细的底层i2c通信,但您应该了解几个基本点。I2C 总线都有一个主——NXT——和多达127个从设备。然而,每个端口的硬件限制大约只能有八个从。每个从有一个特有的7 位地址。当NXT想要与设备通信时,它将发送这7位地址并加上一位读取控制位。然后从设备将会回复一个一位的应答。下图是具体通讯过程。 PCF8574 PCF8574:此I/O扩展器是最有用的I2C设备之一。它是单个的集成电路,其中包括八个针脚,可以输入或输出。下图所示,在其中只标记了P0 -P7八个I/O引脚。因为其他未标记的引脚在本系列教程中不会被使用。

You use address pins A0, A1, and A2 to generate one of eight possible addresses for the expander. That means you can have eight PCF8574s on the same I2C bus by connecting the address pins either high to VDD or low to VSS. A PCF8574 with all address lines tied to VSS will have the address 40 hexadecimal (0x40) or 64 decimal. There’s an alternate version of the part with an A suffix that has a base address of 70 hexadecimal (0x70) or 112 decimal. Figure 13-3 illustrates how to compute the address for the two devices. 使用地址针脚A0、A1、A2可以修改设备的物理地址。这意味着您可以通过将地址针脚连接到VSS或VDD在相同的I2C总线上连接八个PCF8574芯片。PCF8574所有地址针与VSS相连他的地址为0x40(十六进制)或64(十进制)。还有一个是升级版本PCF8574A 的地址为0x70(十六进制)或112(十进制)。如下图所示。

模拟I2C协议

模拟I2C协议 在现代电子系统中,有为数众多的IC需要相互之间以及与外界的通信。为了简化电路的设计,Philips公司开发了一种用于内部IC控制的简单的双向两线串行总线I2C(Intel-Integrated Circuit bus)。1998年当推出I2C总线协议2.0版本时,I2C协议实际上已经成为一个国际标准。 在进行FPGA设计时,经常需要和外围提供I2C接口的芯片通信。例如低功耗的CMOS实时时钟/日历芯片PCF8563、LCD驱动芯片PCF8574、键盘/LED 驱动器ZLG7290等都提供I2C接口。因此在FPGA中模拟I2C接口已成为FPGA 开发必要的步骤。 本章将详细讲解在FPGA芯片中使用VHD/Verilog HDL模拟I2C协议,以及编写TestBench仿真和测试程序的方法。 4.1 I2C总线解析 下面先对I2C协议中有关数据格式和时序的内容进行介绍,这里没有涉及的地方请参考THE I2C-SPECIFICATION VERSION2.1 JANUARY 2000. 4.1.1 I2C总线概述 I2C协议作为一个串行总线标准尽管没有并行总线的数据吞吐能力,但是它的以下特点使其有着广泛的应用。 ●只需要两条总线——串行数据线SDA和串行时钟线SCL; ●每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主/ 从节点关系软件设定地址,主节点可以发送数据或接收数据; ●是真正的多主总线,当两个或更多主节点同时初始化数据传输时,可 以通过冲突检测和仲裁防止数据被破坏; ●串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模 式下可达400kbit/s,高速模式下可达3.4Mbit/s; ●片上的滤波器可以滤去总线数据线上的毛刺波,保证数据完整; ●连接到相同总线的IC数量只受到总线的最大电容(400pF)限制。 总线不仅仅是互连的线,还包含系统通信的所有格式和过程。I2C总线结构上的特点保证了其应用时的简洁,另外其完备的协议避免了所有混乱、数据丢失和妨碍信息的可能性。

I2C通讯协议说明

第一章 I2C通讯协议基本内容 1.1I2C通讯协议简介 由PHILIPS开发的一个简单的双向两线总线,实现有效的IC控制,这个总线就称为Inter IC或I2C总线。现在I2C总线实际上已经成为一个国际标准,I2C 总线规范的版本也从1992年的VERSION 1.0经过1998年的VERSION 2.0发展到2000年的VERSION 2.1。在加强功能的同时也在满足现在对总线速度更高,电源电压更低的要求。 I2C总线具有以下特性: 1)只要求两条总线线路:一条串行数据线(SDA );一条串行时钟线(SCL)。 2)每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址;主机可以作为主机发送器或主机接收器。 3)它是一个真正的多主机总线。如果两个或更多主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据被破坏。 4)串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 。快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s。 I2C 总线支持任何IC 生产过程(NMOS CMOS 双极性),两线――串行数据(SDA)和串行时钟(SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址编码,而且都可以作为一个发送器或接收器(由器件的功能决定)。很明显地,存储器则既可以作接收器又可以作发送器。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见表1-1)。主机在发送数据前负责对总线的初始化并产生允许传输的时钟信号。此时,任何被寻

址的器件都被认为是从机 表1-1 这里我们举个例子说明I2C总线的主机从机和接收器发送器的关系,但是这种关系并不是持久的,只是由当时的数据的传输方向决定,如下所示: 1 假设微控制器A 要发送信息到微控制器B . 微控制器A(主机)寻址微控制器B(从机) . 微控制器A(主机-发送器)发送数据到微控制器B(从机-接收器) . 微控制器A 终止传输 2 如果微控制器A 想从微控制器B 接收信息

I2C协议总结

I2C协议总结 串行总线I2C由数据线SDA和时钟线SCL构成,可实现完善的双工同步数据传输,能方便的构成多机系统和外围器件扩展系统,I2C采用器件地址的硬件设置方法,通过软件进行寻址。 I2C总线系统中,以共同挂接的I2C总线作为通信手段的每个器件均构成I2C总线的一个器件节点。根据节点是否带有智能,可将这些节点分为主器件节点和外围器件节点。主器件节点可作为主控器,用来对总线进行主动控制。在一次通信过程中,由主控器负责向总线上发送启动信号、同步时钟信号、被控器件地址码、重启动信号和停止信号等。而被控器(即受控器件)可分别由这两种节点充当 。 如果在系统中同时存在2个或2个以上的主器件节点企图控制总线,则形成总线冲突状态。由于I2C引入了同步时钟和总线仲裁机制,即使出现总线冲突也不会造成信息丢失。 发生总线冲突时,为了避免信息丢失,需要进行总线仲裁以决定谁是主控器。总线仲裁是通过裁定SDA线上的控制权来解决的。时钟同步是连接到SCL线上的所有器件进行“线与”实现的。只要有一个器件向SCL输出低电平,SCL就为低电平。因此SCL线的低电平时间由时钟低电平期最长的器件决定,而高电平时间由时钟高电平期最短的器件决定,由此形成了时钟的同步。 下图所示为一次完整的通信过程的时序。 图1 i2c总线数据传送时序 (注:图中,SCL线上1~7位为7位地址码,第8位为读写位R\~D,第9位为ACK应答位,紧接着的为第一个数据字节,然后是一位应答位,后面继续第2个数据字节。) 如图所示,主控器在检测到总线空闲(数据线SDA和时钟线SCL同时处于高电平状态)时,首先发送一个启动信号S(在时钟线SCL保持高电平期间,数据线SDA上电平被拉低),它标志着一次数据传输的开始。之后主控器发送一个地址字节包括7位地址码和一个读写位。被控器收到地址字节后反馈一个应答信号ACK=0,主控器接收到ACK后开始发送第一

I2C协议简介

I2C协议规范 一.I2C协议 I2C协议是有PHILIPS公司在1992年最先提出,乃PHILIPS公司专利。只要购买Philips的I2C元件同时传递了一个在Philips的I2C专利下,在I2C系统 使用元件使系统符合由Philips定义的I2C规范的许可证。任何使用I2C的元件 都必须得到PHILIPS公司的授权。 二.I2C总线的特征 1.只要求两条总线线路一条串行数据线(SDA)一条串行时钟线(SCL)。 同时SDL和SCL都是双向线路,分别通过上拉电阻连接到正的电源电压。 2.每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主 机/从机关系软件设定地址;主机可以作为主机发送器或主机接收器。 3.它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输 可以通过冲突检测和仲裁防止数据被破坏。 4.串行的8位双向数据传输位速率在标准模式下可达100kbit/s。快速模 式下可达400kbit/s。高速模式下可达3.4Mbit/s。 5.片上的滤波器可以滤去总线数据线上的毛刺波,保证数据完整。 6.连接到相同总线的IC数量只受到总线的最大电容400pF限制。 三.I2C总线的概念 I2C两线――串行数据SDA和串行时钟SCL线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别。无论是微控制器,LCD 驱动器,存储器或键盘接口,都可以作为一个发送器或接收器,由器件的 功能决定。很明显LCD驱动器只是一个接收器,而存储器则既可以接收又 可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被 看作是主机或从机。主机是初始化总线的数据传输并产生允许传输的时钟 信号的器件。此时任何被寻址的器件都被认为是从机。在I2C总线上,无 论主机是接受方还是发送方,时钟信号永远是主机控制。 四.总线数据有效性 SDA线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。 五.起始和停止条件 在I2C总线中,唯一出现SCL高电平SDA电平变化的是被定义为起始S和停止P的情况。其中一种情况是在SCL线是高电平时SDA线从高 电平向低电平切换,这个情况表示起始条件。当SCL是高电平时SDA线 由低电平向高电平切换,表示停止条件。

SPI与I2C通讯协议

1.SPI通信协议 SPI通讯协议为串行同步接口通讯协议。SPI总线可进行全双工数据传输,SPI接口较快,传输速度高达5Mbps。SPI连接多个从设备时,只要给每个从设备配一片选信号。如下图,加译码器(或者不同的I/O口)选中设备,即可由一个主设备、多个从设备组成。 ①SPI通信时有四种信号:SDI(数据输入)、SDO(数据输出)、SCK(时钟)、CS(从设备使能信号)。 ②数据传输方向:MOSI(主出/从入)、MISO(主入/从出)。 ③SPI通信时可以实现全双工,数据传输过程时先传输最高位,先将CS引脚拉低,选中从设备,然后通过SCLK输出时钟,在MOSI引脚上输出数据,同时在MISO上获得数据。④SPI通信时主设备控制时钟,没有数据交换时时钟线要么是高电平要么是低电平,并不像UART或者IIC通信有专门的通信周期,通信起始信号,通信结束信号。 2.I2C通信协议 I2C通信协议用于串行外设接口、近距离传输的器件中。总线在传送数据过程中共有三种类型信号,分别是:开始信号、结束信号和应答信号。 ①由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。数据可以双向传送,高速I2C总线一般可达400kbps以上。用I2C通信的芯片最常用的是EEPROM芯片。 ②两线制:SCL(时钟)、SDA(数据)。 ③起始信号:SCL为高电平期间,SDA由高变低后开始传送数据; ④终止信号:SCL为高电平期间,SDA由低变高后结束传送数据。 ⑤应答信号:接收数据的设备在接收到8bit数据后,向发送数据的设备发出应答信号(低电平脉冲),表示已收到数据。 数据传输时序图

总结两种总线的异同点: ①I2C总线不是全双工,两根线SCL与SDA。SPI总线实现全双工,四根线SCK、CS、MOSI、MISO。 ②I2C总线是多主机总线,通过SDA上的地址信息来锁定从设备。SPI总线只有一个主设备,主设备通过CS片选来确定从设备。 ③I2C总线传输速度在100kbps~4Mbps。SPI总线传输速度更快,可以达到30MHz。 ④I2C总线空闲状态下SDA与SCL都是高电平。SPI总线空闲状态MOSI、MISO、SCK 是由时钟决定的 ⑤I2C总线SCL高电平时SDA下降沿标志传输开始,上升沿标志传输结束。SPI总线CS拉低标志传输开始,CS拉高标志传输结束 ⑥I2C总线是SCL高电平采样。SPI总线因为是全双工,因此是沿采样,具体要根据时钟决定。一般情况下Master Device是SCK的上升沿发送,下降沿采集。 ⑦I2C总线和SPI总线数据传输都是MSB在前,LSB在后(串口是LSB在前) ⑧I2C总线和SPI总线时钟都是由主设备产生,并且只在数据传输时发出时钟 ⑨I2C总线读写时序比较固定统一,设备驱动编写方便。SPI总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。

相关文档