【嵌入式学习】--i2c协议

本文介绍了I2C通信协议的基本原理,包括其双线结构、主从设备角色以及最大挂载设备数量。详细阐述了起始和结束信号、数据传输时序,并给出了51单片机控制At24c02存储器的示例代码,展示了如何发送和接收数据。
摘要由CSDN通过智能技术生成

一、简介

I2C由时钟线(SCL)和数据线(SDA)两根线构成通信线路,总线空闲时通过上拉电阻拉高电平。I2C是一种主从结构(Master/Slave)总线,总线上每个设备都可以作为主机或从机,主设备通常是CPU,用来产生传输的时钟信号,并初始化总线的数据传输,而从设备只能被动响应主机请求。

二、如何操作不同I2C设备

因为一个I2C总线可以接多个从设备,这就需要主机通过地址来确定与哪个从机进行通信。I2C总线上的每个从设备都有一个唯一的7bit物理识别地址。因为I2C地址全0表示广播地址,所以一个I2C总线理论最多能挂载2^7 - 1=127个从设备。

三、时序图

在这里插入图片描述
起始信号:
SCL为高电平,SDA产生一次下降沿。

结束信号:
SCL为高电平,SDA产生一次上升沿。

数据传输:
SCL为低电平区间,SDA为高则传输1,为低则传输0.

主从机发送数据流程:

主机发送数据:
1.主机发送起始信号
2.主机发送从机地址,相应地址的从机发出ACK进行响应。
3.主机向从机发送数据,每位数据从机接收到就响应一次ACK。
4.主机发送完数据后,发送一个结束信号,结束本次发送。

从机发送数据:
1.主机发送起始信号
2.主机发送从机地址,相应地址的从机发出ACK进行响应。
3.从机向主机发送数据,每位数据主机接收到就响应一次ACK。
4.主机接收完数据后,发送一个结束信号,结束本次发送。

源码(以51单片机控制At24c02为例)

#include"i2c.h"
#include "intrins.h"

/*******************************************************************************
* 函数名         : Delay10us()
* 函数功能		   : 延时10us
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void Delay10us()
{
   
	_nop_();_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值