嵌入式 IIC(I2C)协议

简介: 嵌入式 IIC(I2C)协议

一、IIC(I2C)的介绍

 IIC(I2C)总线:是Philips公司推出的串行总线标准(为二线制,不包括地线)。总线上扩展的外围器件以及外设接口通过总线寻址,是具备总线仲裁和高低速设备同步(时钟线)等功能的高性能多主机总线。

作用:

串口:STM32跟电脑进行通信;

IIC:两个器件之间进行相互通信。(STM32跟AT24C02之间通信,所以两个通信的器件必须具备IIC总线接口)。

二、工作原理

串行数据线SDA和串行时钟线SCL构成的,可发送和接收数据。IIC 是由数据线和时钟线组成的。

硬件连接图:

所有挂接在I2C总线上的器件和接口电路都应具有I2C总线接口,且所有的SDA/SCL同名端相连总线上所有器件要依靠SDA发送的地址信号寻址,不需要片选线。

特点:

组成系统结构简单,占用空间小,芯片管脚的数量少,无需片选信号,价格低。

允许若干兼容器件共享总线,应用比较广泛。

总线的长度可达7.6m,传送速度:快速IIC 400kbps ,标准IIC 100kbps,高速IIC 1M bps。

支持多个组件。支持多主控器件(某时刻只能有一个主控器件)。

I2C总线上所有设备的SDA, SCL引脚必须外接上拉电阻

开发板上的AT24C02 接了STM32 的硬件IIC接口,但是 STM32的IIC硬件接口存在BUG.所以我们不用

它的硬件IIC接口,直接用IO口模拟的方法。 IIC的的通信速并不快,用IO口模拟的方法完全可以达到它的通信速度。

IO口模拟:读 、写 数据的过程都是通信代码来完成的,所以速度会比较慢。

硬件接口:读 、写 数据的过程由硬件功能自主完成。速度会比较快。

三、IIC总线协议

时序图:

 

从时序图可以得到 :

1. MSB--> 高位先发(IIC)  ; LSB : --> 低位先发(串口)

2.起始信号:SCL为高电平期间,SDA由高电平向低电平跳变。

void IIC_Start(void)
{
SCL=1;
SDA=1;
delay_us(5);
SDA=0;
delay_us(5);
SCL=0;
}

3.停止信号:SCL为高电平器件,SDA由低电平向高电平跳变。

4.应答信号:每个字节(8bit)传输完成后的下一个时钟信号,在SCL为高电平器件,SDA为低电平,则表示一个应答信号;

IIC里面应答信号非常重要,IIC要求:接收方没接收一个数据都必须要给发送方一个应答;

应答: 主机给从机的应答, 从机给主机的应答! ! ! !

主机可以给 2 种应答:

1. 主机给应答-------继续给数据

2. 主机给非应答-------不需要再给数据了

应答信号的产生:

在主机发送数据完成后, 从机就会给出应答信号, 应答信号就是SDA 拉为低电平! ! !

主机可以读取SDA的电平状态来判断 从机是否给出应答信号

主机接收到数据后, 主机把 SDA 拉为低电平表示应答, 拉为高电平表示非应答! ! ! !

注意: IIC 里面应答信号也需要一个完整的时钟周期! ! ! ! !

同样这个应答信号也是在 SCL

  1. 非应答信号:每个字节( 8bit) 传输完成后的下一个时钟信号, 在 SCL 为高电平期间, SDA 为高, 则表示一个非应答信号(ack)。
  2. 空闲状态: SCL为高电平,SDA为高电平。

注意: 起始和停止信号总是由主设备发出。 应答信号和非应答信号是由接收数据方发出,发送数据方则是检测这个信号。 主机和从机都可以发生应答信号和非应答信号。

四、IIC数据的发送和接收

  1. 数据的发送过程

IIC 属于串行通信, 数据位也是一个位一个位的发送, IIC 里面固定是高位先发送! ! !

IIC 通信在 SCL 变为低电平后给出数据, 高电平采样数据! ! ! !

发送数据:

低电平主机给数据

高电平从机采样数据

记得: IIC 采用模拟时序的时候, 时钟采用: 低—高—低

 

void IIC_Send_byte(u8 data)
{
int i=8;
While(i--)
{
SCL=0;
if(data&0x80)
{
SDA=1
}
}
else
SDA=0;
data<<=1;
SCL=1;
}

2.数据的接收过程

IIC 通信在 SCL 变为低电平后给出数据, 高电平采样数据! ! ! !

接收数据:

低电平从机给数据

高电平主机采样数据

记得: IIC 采用模拟时序的时候, 时钟采用: 低

注意: SCL 的高电平的持续时间! ! ! ! !

高电平时间: 标准 IIC 4.0  us, 快速 IIC 0.6  us

低电平时间: 标准 IIC 4.7  us, 快速 IIC 1.3  us

u8 IIC_res_byte(void)
{
  u8 data=0;
  u8 i=8;
  while(i--)
{
  data<<=1;
  SCL=1;
  if(SDA)
    Data |= 0x01;
 }
}


相关文章
|
数据采集 搜索推荐 数据处理
探索数据的无尽可能性:网络爬虫与数据抓取技术
本文将深入探讨网络爬虫与数据抓取技术的重要性和应用,介绍其在信息收集、市场分析、学术研究等领域的广泛应用。我们将探索这一技术的原理、挑战和发展前景,并展望未来数据抓取技术的潜力。
705 0
|
10天前
|
人工智能 安全 Linux
2026年OpenClaw(Clawdbot) Linux部署:本地搭建+ZeroNews访问+云上部署教程
2026年初,OpenClaw(前身为Clawdbot)凭借“私有化运行+全权限实操”的创新定位,迅速成为AI领域的现象级开源项目。这款被称为“真正能做实事的AI”的工具,打破了传统聊天机器人的功能局限,可在本地设备或服务器上独立运行,通过WhatsApp、Telegram等常用聊天软件接收指令,完成文件读写、邮件管理、系统运维等实操任务,所有数据本地存储,隐私安全性拉满。
1298 9
|
算法 IDE 开发工具
火爆全网开源额温枪同平台之华大HC32L136 SDK开发入门
火爆全网开源额温枪同平台之华大HC32L136 SDK开发入门
764 1
|
Web App开发 前端开发 数据可视化
20K star!让网页设计秒变手绘风,这个开源库太有创意了!
嗨,大家好,我是小华同学。Rough.js 是一个仅8KB的轻量级图形库,能为网页元素赋予自然的手绘质感,支持手绘风格渲染、全类型图形和跨平台兼容。它适合数据可视化、教育课件、原型设计等场景,具有设计友好、性能卓越、扩展性强等优势。
492 12
|
人工智能 测试技术
陶哲轩联手60多位数学家出题,世界顶尖模型通过率仅2%!专家级数学基准,让AI再苦战数年
著名数学家陶哲轩联合60多位数学家推出FrontierMath基准测试,评估AI在高级数学推理方面的能力。该测试涵盖数论、实分析等多领域,采用新问题与自动化验证,结果显示最先进AI通过率仅2%。尽管存在争议,这一基准为AI数学能力发展提供了明确目标和评估工具,推动AI逐步接近人类数学家水平。
486 37
|
芯片
一文搞懂I2C协议-硬件基础
I2C总线是由飞利浦在80年代初设计的,以允许位于同一电路板上的组件之间能够轻松通信。其大大简化了电路的设计,早期的电视机中很多地方用到了I2C这种通信方式。飞利浦半导体于2006年迁移到了NXP。I2C名称翻译为“ Inter IC”。有时,该总线称为IIC或I²C总线。I2C总结的基本的特征
1770 0
|
芯片
STM32速成笔记(五)—串口通信
本文介绍了串口通信的概念,用途以及一些相关概念。介绍了如何进行printf重定向,如何根据接收到的特定信息,执行特定操作。此外,本文以通过上位机发送特殊指令控制LED亮灭的小项目,给出了详细的配置方法和程序设计。
943 0
STM32速成笔记(五)—串口通信
|
API 调度 芯片
FreeRTOS 延时函数和软件定时器 详解
FreeRTOS 延时函数和软件定时器 详解
FreeRTOS 延时函数和软件定时器 详解