一:起始与终止
1:I2C起始条件
SCL高电平期间,SDA从高电平向低电平切换。
2:I2C终止条件
SCL高电平期间,SDA从低电平向高电平切换。
二:数据传输
1:进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定
SDA上的数据只能在SCL为低电平期间变化。
2:I2C总线每个CLK发送或接收一个位的数据(或地址)
在CLK上升沿,把数据bit(或地址)送到SDA线上
在CLK下降沿,从SDA线上读取数据bit
C程序实例:
void Start_I2c()
{
SDA=1;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;
_Nop();
_Nop();
}
void Stop_I2c()
{
SDA=0;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1;
_Nop();
_Nop();
_Nop();
_Nop();
}
void SendByte(uchar c)
{
uchar BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++)
{
if((c<
else SDA=0;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;
}
_Nop();
_Nop();
SDA=1;
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA==1)ack=0;
else ack=1;
SCL=0;
_Nop();
_Nop();
}
uchar RcvByte()
{
uchar retc;
uchar BitCnt;
retc=0;
SDA=1;
for(BitCnt=0;BitCnt<8;BitCnt++)
{
_Nop();
SCL=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
retc=retc<<1;
if(SDA==1)retc=retc+1;
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}
关键字:I2C总线 学习感想
引用地址:
I2C总线学习感想总结(一)
推荐阅读最新更新时间:2024-03-16 14:36
I2C总线C语言源程序
/*VIICC.H*/ #pragma db cd small #include intrins.h #include reg52.h #define NOP nop ( ); nop ( ); nop ( ); nop ( ) #define SDA P1^7 #define SCL P1^6 void sta( ); void cack( ); void stop( ); void mnack( ); void mack( ); void wrbyt(uchar shu); void wrnbyta(uchar slaw,uchar gg ,uchar n); void wrnbyt(uchar slaw,uchar
[单片机]
基于I2C总线的DS1629型智能温度传感器性能特点及应用
DS1629是美国DALLAS公司新推出的一种带实时日历时钟和I2C总线接口的智能 温度传感器 ,可广泛用于温度传感系统、数据记录器、个人计算机、个人数字助理和移动电话等设备中。
[嵌入式]
模拟I2C总线多主通信研究与软件设计
I2C总线(Inter IC BUS)是Philips公司推出的双向两线串行通信标准。由于它具有接口少、通信效率高等优点,现已得到广泛的应用 。它除了可以进行简单的单主节点通信外,还可以应用在多主节点的通信系统中。在多主节点通信系统中,如果两个或者更多的主节点同时启动数据传输,总线具有冲突检测和仲裁功能,保证通信正常进行并防止数据破坏。现在许多微控制器(MCU)都具有I2C总线接口,能方便地进行I2C总线设计。对于没有I2C总线接口的MCU,可以采用两条I/O接口线进行模拟 。目前,一些介绍模拟I2C的资料主要讲的是在单主节点系统中进行的通信,这使得模拟I2C总线的应用具有一定的局限性。本文根据总线仲裁的思想,提出一种多主节点通
[单片机]
STM32 I2C总线 自我总结学习
现在打算彻底搞清楚STM32的I2C总线通信----首先是对AT24C02的读写----手上有PCF8574的IO扩展芯片,也是I2C协议的,希望实现多个控制! STM32的I2C有自带的硬件驱动,也可以使用GPIO模拟-----先总结一下硬件驱动下的问题。 ----------------------------------硬件下-----以AT24C02与PCF8574为例--------------- ------第一部分是简单宏定义------- #define I2C_Speed 300000 //传输速率--挂载原件多时要求降低速率,自己在调试过程中出现过这样问题 #define I2C1_OWN
[单片机]
单片机模拟I2C总线及AT24C01应用实例
I 2 C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I 2 C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。 1. I2C总线特点 I 2 C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I 2 C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并
[单片机]
基于I2C总线的处理器的联网设计方案
随着微控制器的价格越来越低,功能越来越强大,电气设计人员发现在单板和多板系统中都使用多个小型控制器是一种更加经济高效的方法。这种辅助处理器能够减轻主处理器在耗时任务上面的处理开销,例如扫描键盘、显示控制器和电机控制。这些控制器也可以配置为各种各样的专用外设。 最近,我接受了一项任务:开发一种能够方便地适用于多种应用的接口(软/硬件),且要符合嵌入式处理器中常用的行业标准。在分析了一些典型应用之后,我们列出了一些针对该硬件接口的设计需求:常用于32位和8位处理器;能够得到常用外设器件的支持;外设接口代码量低于0.5kB;引脚数量少;数据带宽可达10kBps;RAM用量少;一条总线上支持多种外设;方便使用API;不需要外部
[嵌入式]
C51IO口模拟I2C总线驱动AT24C16 (EEPROM部分)
/* 名称:C51IO口模拟I2C总线驱动AT24C16 说明:关于EEPROM,即这里的AT24C16是一个特殊形式的FLASH存储器,不过其容量一般较少。比较适合于存储少量的数据。 AT24C16的通信接口是标准的I2C通信,即我们需要根据I2C通信协议来操纵EEPROM设备。 关于AT24C16的的各种操作,这里就不细讲了,简单介绍一下。 (1)、主机向AT24C16写一个字节:首先需要发送设备地址,然后发送需要访问的存储器地址。然后在发送要写入的数据。这里省略了开始、结束和确认等信号的产生。 (2)、指定页写入n个字节:和(1)的基本操作很类似。不同的是可以连续写入n个数据。这里要小注意一点的就是,写入的数
[单片机]
基于I2C总线的大型开关矩阵设计与实现
自动测试设备在军事及工业领域的应用越来越广泛,然而在电路单元尤其是电路板测试中,由于被测单元种类多,被测通道数量大,传统的开关矩阵体积大、切换速度慢、电气性能差。已不能满足现代测试仪器高速、便携的要求。本文介绍了一种采用USB接口,利用I2C总线传输数据,由CPLD控制多路复用器件的大型开关矩阵结构,具有较高的切换速度及较好的电气性能,并满足了小型化的要求。 2 系统结构及功能 开关矩阵主要实现自动测试设备与被测电路单元之间的信息交换,功能如下: (1)将程控电源系统输出的电源自动加至被测电路单元要求的引脚上; (2)将自动测试设备信号源分系统输出的信号转接至被测电路单元要求的引脚上; (3)将
[安防电子]