自学内容网 自学内容网

I2C同步通信

概念

I2C总线只有两根双向信号线,一根是数据线 SDA,另一根是时钟线SCL。他是一种同步串行半双工通信总线方式。该总线允许同时连接多个设备(芯片)。每块芯片在总线上拥有特定的地址。其优点是通信速率快,器件封装小。

作为一种通信方式,IIC总线在某一时刻,总线只允许有一个设备处于发送状态,所发生的数据被总线上所有的设备所接收。IIC通信协议包含有设备地址,只有发送方携带的地址与某个接收方的地址相同时,接收方才真正执行相关的指令。
其模式如下:
其各个设备间可按特定的设备号相互通信。总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而
当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。

流程

IIC的发送数据流程如下:

在SCL时钟处于高电平的时候,SDA发送一个低电平(起始位),从而其他设备停止发送数据,进入聆听状态,然后主设备发送7位从机地址以及一位数据方向地址,其中方向地址为1时主机接收数据,为0时发送数据,在时钟位为低电平时,数据线才能产生电位变化(假如发送0010,发送到第二个0时,要发送第三个数字时,必须等到时钟线为低)。发送完一帧数据后(8位数据,先发MSB,再发LSB)必须再发送一位应答位,若应答(0),则可以继续发送或发送一位中止信号停止发送,若无应答(保持1),则发送一位中止信号。中止信号为高电平,必须在SCL高电位下才能更改。

电位变化:

         

SDA发送内容:

配制

IIC通信是通过主芯片外接AT24C02芯片实现的,AT24C02芯片引脚如图:

不同的开发板使用不同的引脚链接AT24C02的SCL和SDA引脚,按操作手册来配制,以S3C2440ARM为例:

通过看原理图得知SCL的引脚链接的是GPE14引脚:

翻阅S3C2440手册,得知IIC要配制GPE引脚(GPECON寄存器)、IICCON寄存器、INTMOD/INTMSK中断寄存器

GPE引脚使用14、15,按手册给相应的位赋值,

按需要功能配制IICCON:

中断INTMOD为:

中断INTMSK为:

按图表与功能配制代码如下:

功能为:允许ACK应答,中断使能,IIC时钟分频为512,发送时钟分频因子0+1=10,允许IIC中断

编写代码

中断辅助函数

手册要求在每次发送接收完毕后,IICCON第4位必须清零,所以要编写一个手动清零函数:

int a=0;
void icc_handleer(void)//IIC控制器会在收到和发送完ACK之后产生中断,从而引用该函数
{
    a=1;
}
......
void do_and_wait_ask()
{
    a=0;
    IICCON &=~(0x01<<4);
    while(a==0)
    {
        delay(4000);//等待AT24c20写入或输出数据
    }
}
写函数

向AT24C20写入数据,从而使其发送给从设备

slvAddr:从设备地址

读函数

向AT24C20读取数据,从而使主设备接收


原文地址:https://blog.csdn.net/weixin_69286552/article/details/138034805

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!