当前位置: 首页 > news >正文

ARM32开发--IIC原理

知不足而奋进 望远山而前行


目录

文章目录

前言

目标

内容

I2C通讯规则

I2C写操作

I2C读流程

通讯信号

开始

结束

发送数据

bit发送

Byte发送

等待响应

接收数据

bit接收

Byte接收

发送响应

总结


前言

在现代消费电子和工业电子领域,各种类型的芯片如微控制器、传感器和存储器等,需要快速且可靠地进行数据交互。为了满足这一需求,I2C(Inter-Integrated Circuit)协议应运而生。I2C协议由飞利浦(现恩智浦半导体)公司开发,它利用两根线(时钟线和数据线)在多个设备之间传输数据,并且支持设备间的地址识别,从而实现设备间的互联互通。

本文将深入探讨I2C通讯的原理、信号传输过程以及软件和硬件实现方法。首先,我们将详细介绍I2C通讯的基本规则和流程,包括数据传输的开始、停止和等待响应的过程。其次,将详述如何在软件中实现I2C通讯,包括数据的发送和接收过程。最后,我们将探讨硬件I2C的工作原理和具体实现内容,以帮助读者深入理解这一通用的总线协议。


目标

  1. 理解I2C通讯原理
  2. 理解I2C通讯过程中的信号
  3. 理解软件I2C实现过程
  4. 理解硬件I2C的工作内容

内容

在消费电子、工业电子等领域,会使用各种类型的芯片,如微控制器、电源管理、显示驱动、传感器、存储器、转换器等,它们有着不同的功能。有时需要快速地进行数据交互。为了使用最简单的方式使这些芯片互联互通,I2C(Inter-Integrated Circuit)协议应运而生。

I2C协议(或称IIC)是由飞利浦(现在的恩智浦半导体)公司开发的一种通用的总线协议。它使用两根线(时钟线和数据线)来传输数据,支持多个设备共享同一条总线。 I2C协议通常用于连接微控制器、传感器、存储器和其他外围设备。

I2C通讯规则

I2C总线包括两根信号线:SDA(串行数据线)和SCL(串行时钟线)。这两根信号线共用一个总线,因此在总线上可以连接多个设备。在I2C总线上,每个设备都有一个唯一的地址,用于标识设备。

SCL线是时钟线,用于控制数据传输的速度和时序;SDA线是数据线,用于传输实际的数据.

I2C写操作

流程如下:

  1. 开始。
  2. 发送设备地址,等待从设备响应
  3. 发送寄存器地址,等待从设备响应
  4. 发送一个字节,等待从设备响应。这个操作是循环执行,直到没有数据。
  5. 停止。

I2C读流程

流程如下:

  1. 开始。
  2. 发送设备地址(写地址),等待从设备响应
  3. 发送寄存器地址,等待从设备响应。
  4. 开始
  5. 发送设备地址(读地址),等待从设备响应
  6. 接收一个字节,发送响应给从设备。这个操作是循环执行,直到没有数据。当是最后一个数据时,发送空响应。
  7. 停止。

通讯信号

开始

static void start() {SDA_OUT();SDA(1);delay_1us(5);SCL(1);delay_1us(5);SDA(0);delay_1us(5);SCL(0);delay_1us(5);
}

结束

static void stop() {SDA_OUT();SCL(0);SDA(0);SCL(1);delay_1us(5);SDA(1);delay_1us(5);
}
发送数据
bit发送

数据有效性:

  • SCL上升沿到下降沿这个阶段,SDA电平的高低,表示数据bit的1和0
  • 如果SDA电平在这个阶段发生变化,则无效,参考start和stop信号。
Byte发送

基于数据有效性,将byte按bit位变化为高低电平,发送出去。

static void send(uint8_t data) {uint8_t i;SDA_OUT();for(i = 0; i < 8; i++) {if(data & 0x80) {SDA(1);} else {SDA(0);}SCL(1);delay_1us(5);SCL(0);delay_1us(5);data <<= 1;}
}

等待响应

wait ack:Acknowledge character。表示等待响应,每发送一个数据,需要确认对方是否收到,就需要等待对方响应。

static uint8_t wait_ack() {int8_t retry = 10;SCL(0);SDA(1);SDA_IN();delay_1us(5);SCL(1);delay_1us(5);while(SDA_STATE() == 1 && retry > 0) {retry --;delay_1us(5);}if(retry <= 0) {stop();return 1;} else {SCL(0);SDA_OUT();}return 0;
}
接收数据
bit接收

Byte接收

static uint8_t recv() {uint8_t i, data;SDA_IN();data = 0;for(i = 0; i < 8; i++) {SCL(0);delay_1us(5);SCL(1);delay_1us(5);data <<= 1;data |= SDA_STATE();delay_1us(5);}SCL(0);return data;
}

发送响应

static void send_ack(){// 主机发送ACK响应// 主机获取SDA控制权,进入输出模式SDA_OUT();// 拉低SDASDA(0);DELAY();// 拉高SCLSCL(1);DELAY();// 拉低SCLSCL(0);DELAY();	
}
static void send_nack(){// 主机发送NACK响应// 主机获取SDA控制权,进入输出模式SDA_OUT();// 拉高SDASDA(1);DELAY();// 拉高SCLSCL(1);DELAY();// 拉低SCLSCL(0);DELAY();
}

总结

I2C协议作为一种高效的通信协议,广泛应用于微控制器、传感器和其他外围设备之间的数据交互。通过本文的学习,我们深入理解了I2C通讯的关键概念和步骤:

  1. 通讯原理和信号: I2C协议使用时钟线(SCL)和数据线(SDA)在多个设备之间传输数据,每个设备通过唯一的地址进行识别。

  2. 通讯过程: 包括数据的发送(写操作)和接收(读操作)流程,以及等待响应(ACK/NACK)的处理方式。

  3. 软件实现: 展示了如何在软件中实现I2C通讯,包括发送数据、接收数据以及等待和发送响应的方法。

  4. 硬件实现: 解释了硬件I2C的工作原理,包括控制信号的生成和处理,以及如何在电路中实现I2C接口。

通过对这些内容的学习,读者可以全面掌握I2C协议的运作机制,为在实际应用中使用I2C进行设备间通讯提供了坚实的理论基础和实践指导。

相关文章:

ARM32开发--IIC原理

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 I2C通讯规则 I2C写操作 I2C读流程 通讯信号 开始 结束 发送数据 bit发送 Byte发送 等待响应 接收数据 bit接收 Byte接收 发送响应 总结 前言 在现代消费电子和工业电子领域&#xff0c;各种类型的…...

列表、集合、字典的相关练习

1、使用列表推导式&#xff0c;输出1~100的所有素数 输入下面代码 # 定义一个辅助函数用来判断是否是素数 def is_prime(num):if num < 1:return Falsefor i in range(2, int(num**0.5) 1): #int函数将结果转换为整数&#xff0c;向下取整if num % i 0:return Falsere…...

填报志愿选大学专业,文科生如何选专业?

读文科的同学接触的专业知识相对广泛&#xff0c;往往被认为是“万金油”&#xff0c;他们仿佛什么都能做&#xff0c;但是和专业技能类知识不同&#xff0c;缺乏技术支持&#xff0c;从而使得文科专业的就业方向和前景远远比不上理科专业那么明朗&#xff0c;对于众多文科生而…...

如何实现跨域

如何实现跨域 当浏览器执行JS脚本时&#xff0c;会检测脚本要访问的协议&#xff0c;域名&#xff0c;端口号是不是和当前网址一致&#xff0c;不一致就是跨域。 跨域是不允许的&#xff0c;这种限制叫做浏览器的同源策略&#xff0c;简单就是浏览器不允许一个源加载脚本与其…...

从零开始利用树莓派+扬声器,实现简单的蓝牙音箱,手机连接放歌

背景 树莓派4B自带蓝牙和Wifi, 无需外接 USB dongle; 蓝牙最常见的应用是近距离传输数据,比如蓝牙传文件,蓝牙音箱等。正好家里有个普通的usb供电的便携音箱; 本文用树莓派蓝牙+普通音箱,实现简单的蓝牙音箱。 大致分为三个部分: kernel/driver层的ALSA驱动框架蓝牙音…...

今年的就业环境不容乐观,你想好怎么应对了吗

今年的就业环境不容乐观&#xff0c;你想好怎么应对了吗 毕业生进入职场的历程往往充满挑战和未知&#xff0c;尤其是在当前经济环境下&#xff0c;失业问题愈发凸显。本文通过分享几位年轻人的真实经历&#xff0c;剖析大学生及职场人士面临的困境&#xff0c;并提供应对策略…...

测试 halcon measure_projection 算子

期望结果完全相同&#xff0c;但是下面的测试结果和halcon的差值如下: [0.132838, 0.231991, 0.265157, 0.296903, 0.0998573, 0.165907, 0.230686, 0.130266, 0.0977104, 0.197109, 0.198173, 0.197086, 0.190943, 0.177665, 0.163521, 0.146541, 0.161362, 0.166666, 0.2281…...

网络安全岗位必须知道到:高性能抓取,多线程,异步逆向分析(Js逆向破解/APP逆向破解)反爬原理和解决方法,不然你的Python会有Bug

JS逆向破解和APP逆向破解以及反爬技术是网络安全和数据保护领域的重要话题。 遵循安全开发的最佳实践&#xff0c;包括输入验证、数据加密、权限管理等&#xff0c;以减少安全漏洞的出现。 坚决维护网络安全及开发安全&#xff0c;杜绝一切被爬&#xff0c;非法爬取数据的行为…...

lua网站开发中如何制作自定义模块

自定义模块是FastWeb框架的重要拓展功能&#xff0c;用来扩展和增强服务的能力。通过自定义模块&#xff0c;开发者可以轻松添加特定的功能和特性&#xff0c;使得网站开发更加灵活和高效。本文将演示如何添加自己的模块作为FastWeb的拓展&#xff0c;为框架的壮大与支持提供重…...

线性规划问题——单纯形算法

第一步&#xff1a;化“约束标准型” 在每个等式约束中至少有一个变量的系数为正&#xff0c;且这个变量只在该约束中出现。在每个约束方程中选择一个这样的变量称为基本变量。 剩下变量称为非基本变量。 一个简单的栗子 上图是一个约束标准型线性规划的例子。 等式1&#x…...

ADS基础教程20 - 电磁仿真(EM)参数化

EM介绍 一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号 四、总结 一、引言 参数化EM仿真&#xff0c;是在Layout环境下创建参数&#xff0c;相当于在原理图中声明变量。 二、参数化设置 1.参数定义 1&#xff09;在Layout视图&#xff0c;菜单栏中选中EM&g…...

NAND flash测试-雷龙发展

文章目录 一、简介 二、速度测试 最近比较忙&#xff0c;也一直没空发什么文章&#xff0c;这算是新年第一篇吧&#xff0c;正好最近收到了一个雷龙的flash芯片&#xff0c;先拿来玩一下吧。 有兴趣的小伙伴可以去雷龙官网找小姐姐领取一个免费试用。 一、简介 大概样子就是上面…...

CMake的学习之路

目录 一、基础命令 二、编译选项和设置 三、文件和目录操作 四、控制流命令 五、其他命令 六、CMake构建级别 CMake是一个跨平台的自动化建构系统&#xff0c;它使用一种人类可读的配置文件&#xff08;CMakeLists.txt&#xff09;来控制软件编译过程。以下是CMake中的一些…...

算法体系-22 第二十二节:暴力递归到动态规划(四)

一 最小距离累加和 1.1 描述 给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角 沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和 返回最小距离累加和 1.2 分析...

Docker:利用Docker搭建一个nginx服务

文章目录 搭建一个nginx服务认识nginx服务Web服务器反向代理服务器高性能特点 安装nginx启动nginx停止nginx查找nginx镜像拉取nginx镜像&#xff0c;启动nginx站点其他方式拉取nginx镜像信息通过 DIGEST 拉取镜像 搭建一个nginx服务 首先先认识一下nginx服务&#xff1a; NGI…...

docker Pulling fs layer 含义

在使用Docker时&#xff0c;当你执行 docker pull 命令来获取一个新的镜像&#xff0c;控制台输出中可能会出现 "Pulling fs layer" 的信息。这是Docker拉取镜像过程中的一个步骤&#xff0c;下面是对这一过程的解释&#xff1a; Docker 镜像是由一系列的层&#xf…...

c#中上传超过30mb的文件,接口一直报404,小于30mb的却可以上传成功

在一次前端实现上传视频文件时,超过30mb的文件上传,访问接口一直报404,但是在Swagger中直接访问接口确是正常的,且在后端控制器中添加了限制特性,如下 但是却仍然报404,在apifox中请求接口也是报404, 网上说: 在ASP.NET Core中,配置请求过来的文件上传的大小限制通常…...

VRRP跟踪接口及认证(华为)

#交换设备 VRRP跟踪接口及认证 一、相关概念 1.VRRP跟踪接口 当 VRRP 的 Master 设备的上行接口出现问题, 而 Master 设备一直保持 Active 状态&#xff0c;那么就会导致网络出现中断&#xff0c;所以必须要使得 VRRP 的运行状态和上行接口能够关联。在配置了 VRRP 元余的网…...

梯度提升树GBDT系列算法

Boosting方法的基本元素与基本流程&#x1f4ab; 在Boosting集成算法当中&#xff0c;我们逐一建立多个弱评估器&#xff08;基本是决策树&#xff09;&#xff0c;并且下一个弱评估器的建立方式依赖于上一个弱评估器的评估结果&#xff0c;最终综合多个弱评估器的结果进行输出…...

探索智慧农业系统架构的设计与应用

随着科技的不断进步和农业现代化的推进&#xff0c;智慧农业正逐渐成为农业发展的重要趋势。智慧农业系统架构的设计与应用&#xff0c;将农业生产与信息技术相结合&#xff0c;为农业生产提供了新的思路和解决方案。本文将深入探讨智慧农业系统架构的设计与应用&#xff0c;从…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...