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读取数据,从而使主设备接收

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
I2C通信协议的代码实现可以通过编程语言如C语言来实现。在STM32开发板上,可以使用硬件I2C控制器来实现I2C通信。你可以参考引用中提供的链接,这些链接提供了关于STM32下模拟I2C的C语言实现和I2C协议的基本原理的文章。这些文章可以帮助你理解和实现I2C通信协议的代码。 要实现I2C通信协议的代码,你需要了解I2C协议的基本原理和时序要求,以及如何在硬件上配置和使用I2C控制器。通常,你需要使用两根线,即SCL和SDA线,其中SCL线用于传输同步脉冲信号,SDA线用于半双工传输信号。你还需要使用适当的I/O接口或者I2C控制器来控制通信。 在代码实现中,你需要根据具体的应用场景和设备需求,使用适当的库函数或者底层操作来进行I2C通信的初始化、数据传输和设备操作。具体的代码实现可以根据你的开发板和目标设备的硬件和软件要求而有所不同。 因此,你可以参考引用中提供的文章和代码示例,以便更好地理解和实现I2C通信协议的代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [I2C协议+实现源码](https://blog.csdn.net/weixin_41995541/article/details/89843330)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值