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

【嵌入式】STM32和I2C通信

一、简介

I2C(Inter IC Bus)是有飞利浦公司开发的一种通用数据总线,主要通过两个通信线SCL和SDA进行通信,其中SCL(Serial Clock)是时钟线,用于收发双方同步数据,SDA(Serial Data)是数据线,用于传输数据。是一种同步半双工的数据总线,其有数据应答功能,支持在总线上挂载多个设备。 不少的设备,比如说常用的0.42寸的OLED显示器,MPU6050加速度传感器,AT24C02存储器模块,DS3231实时时钟模块等,都是用I2C协议

二、硬件电路分析

I2C典型电路如下:

  • 所有I2C设备的SCL连在一起,SDA连在一起
  • 设备的SCL和SDA都需要设置为开漏输出模式
  • SCL和SDA各配置一个上拉电阻,阻值一般为4.7k欧姆
    在这里插入图片描述

在I2C中,支持总线挂载多设备,主要有一主多从,多主多从两个模式。在主从控制中,CPU作为总线的主机的权利很大,一般掌握着SCL和SDA的控制,而从机只有在申请发送数据或做出应答的时候,才能从主机中获取到SDA的控制权,而SCL的控制权任何时刻都是在主机手里的。

由于主机拥有SCL的绝对控制权,主机的SC应该L配置成推挽输出,而从机的SCL设置为浮空输入或者上拉输入,时钟信号由主机发送,所有从机负责接收并且对齐时钟信号。 对于SDA,主机和从机都可能会在输入和输出之间切换,而如果时钟同步没做好,可能会出现两个设备同时对SDA进行操作的情况,如果其中一个输出高电平,另外一个输出低电平,则会导致线路短路,另外,协调电路中各个设备,使得只有一个设备在发送信息,是一件很麻烦的事情。为了避免这种情况,I2C禁止所有设备输出强上拉的高电平,采用外置的弱上拉电阻加开漏输出的电路结构,这也是上述典型电路中的1、2点。

对于开漏输出,实际上的引脚的内部结构是只有下拉接负极的开关管,而没有接正极的上拉开关管,因此引脚只能输出0电平或者浮空,而由于外置了上拉电阻,则在浮空的时候,SDA会被外置电阻弱上拉为高电平,从而避免了同时有强下拉和强上拉的情况。这样子就杜绝了电源短路的情况。

并且这个设计开漏加弱上拉的模式,同时兼具了输入和输出的功能:如果需要输出,则直接使用开漏输出进行操作,而想要输入的时候,则不做操作,直接观察电平高低。另外,这个设计还有一个“线与”的性质,也就是只要有任意电路输出低电平,SDA总线就会处于低电平,这可以让CPU执行多主机模式下的时钟同步和总线仲裁,这是多主多从模式的基础。同时,如果发送SDA总线处于低电平状态,则表明有人正在占用SDA

总之,这个设计有三个优点:

  1. 避免线路短路
  2. 兼顾输入和输出
  3. 可实现多主多从

三、I2C时序基本单元

3.1 发送和接收数据

I2C规定,I2C的起始条件和终止条件如下:
在这里插入图片描述
起始和终止都是由主机控制,空闲的时候所有从设备都需要保持端口浮空。

发送一个字节:
SCL低电平期间,主机将数据一次放在SDA总线上,然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次重复八次,则发送一个字节。比如说首先主机拉低SCL,然后将SDA也拉低,表示发送一个0,然后保持SDA低电平,释放SCL,此时各个从设备负责读取SDA电平状态0,以此往复。如果主机进中断了,停止操作SCL和SDA,那么SCL和SDA则会保持当前状态,传输暂停,不会导致传输丢失的情况,这是同步时序的好处。
在这里插入图片描述

接收一个字节:
SCL低电平期间,从机将数据一次放在SDA线上,然后主机释放SCL,主机会在SCL高电平期间读取数据。所以SCL高电平期间SDA不允许有数据变化,依次重复八次,则主机接收一个字节

主机接收和发送的区别是,主机接受之前需要释放SDA,而发送之前需要拉低SDA

3.2 发送和接收应答

发送应答:主机接受完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,1表示非应答
接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答。主机在接受前需要释放SDA

左边为发送应答,右边为接收应答

3.3 数据帧分析

有了上面六个切片,我们就可以将它们组成一个完整的数据帧了。

指定地址写
主机首先需要发送一个字节确定发送的对象,该字节是从机的地址。从机地址分为7位地址和10位地址,其中7位地址是厂商按芯片型号赋值的,而后三位则是可变地址,使得在挂载多个相同型号的芯片的时候可以做出区分。这个就是指定从机步骤。而一个字节有8个位,其中7位用于标识从机,另外一位是读写位,用于表示主机要进行读操作还是写操作。

主机发送指定从机字节后,目标从机会立马对主机进行应答,也就是主机发送完指定从机字节之后,主机会释放SDA,此时目标从机立马下拉SDA,表示应答,而主机在下一个SCL高电平的时候读SDA,发现自己释放SDA后,SDA仍是低电平,根据线与设计,证明电路中有设备对SDA进行了下拉操作,也就是有设备做出了应答。

一般来说,指定地址写在从机应答后,主机写的第一个字节是指定写入从机的哪一个寄存器,接着再下一个字节是写入的值

指定地址读
接下来,则根据读写位,进行主机的读写操作。如果主机发送主机读命令,那么在指定从机之后,会立马进入主机读状态,但是此时还不知道主机需要读的是从机哪一个寄存器中的值,这怎么办呢?在支持I2C的设备中,寄存器地址一般都是线性紧挨排布的。而其中会有一个地址指针(假设位于0x19),用于指向寄存器,每次读一次,指针就会自增一次。因此比如要读取0xAA的寄存器,那么首先对指定从机发送一个写请求,将0x19的内存单元写为0xA9,然后终止。再发起一次主机读,然后指定从机接收到请求后,0x19自增1,变成0xAA,然后读出0xAA寄存器中的值。这个操作被称为**“指定地址读”**

相关文章:

【嵌入式】STM32和I2C通信

一、简介 I2C(Inter IC Bus)是有飞利浦公司开发的一种通用数据总线,主要通过两个通信线SCL和SDA进行通信,其中SCL(Serial Clock)是时钟线,用于收发双方同步数据,SDA(Serial Data)是数据线,用于传输数据。是一种同步半…...

如何使用Harmony OS控制外设——输入输出?

相关知识点 Hi3861开发板第一个示例程序演示 熟悉使用DevEco Device Tool插件进行程序烧录 熟悉串口调试工具sscom的使用 官方文档中控制核心板上LED的led_example.c讲解及演示 源码路径:applications/sample/wifi-iot/app/iothardware/led_example.cHarmony OS …...

1.1-数组-704. 二分查找★

704. 二分查找 ★ 力扣题目链接,给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,搜索 nums 中的 target,如果存在返回下标,否则返回 -1。n 将在 [1, 10000]之间。 可以假设 nums 中的所…...

人物百度百科怎么做?需要什么资料?

在互联网时代,百度百科作为国内最具权威性的知识分享平台,吸引了大量用户关注和参与。究竟哪些人适合创建和编辑人物百度百科呢?本文伯乐网络传媒将为您揭秘人物百度百科的适用人群,并详细介绍如何注册、登录、创建及维护人物百度…...

在基于Android相机预览的CV应用程序中使用 OpenCL

查看:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9.0在Android 开发简介 下一篇:在 MacOS 中安装 本指南旨在帮助您在基于 Android 相机预览的 CV 应用程序中使用 OpenCL ™。教程是为 Android Studio 20…...

网络分类简述与数据链路层协议(PPP)

实验拓扑 实验要求 1、R1和R2使用PPP链路直连,R2和R3把2条PPP链路捆绑为PPP MP直连按照图示配置IP地址 2、R2对R1的PPP进行单向chap验证 3、R2和R3的PPP进行双向chap验证 实验思路 给R1、R2的S3/0/0接口配置IP地址,已给出网段192.168.1.0/24R2作为主…...

Linux文件系列:磁盘,文件系统,软硬链接

Linux文件系列:磁盘,文件系统,软硬链接 一.磁盘相关知识1.磁盘机械构成2.磁盘物理存储3.磁盘逻辑存储1.LBA地址2.磁盘的分区和分组 二.文件系统和inode1.inode结构体2.文件系统1.Super Block(超级块)2.Group Descriptor Table(块组描述表GDT)3.inode Table4.Data Blocks5.Block…...

GPT4.0

GPT4.0 支持官网所有功能以及所有第三方GPTS,完全同步官网。无需魔法,填写授权码直达官网。全天超18小时维护,无需担心不稳定。没有永久卡,3.5免费提供,4.0可以按需下单即可,不存在跑路。 需要的联系...

软件工程(双语)

教材《软件工程 实践者的研究方法》 双语教学,但目前感觉都是在讲没用的 ”过程决定质量,复用决定效率” 介绍 软工的本质 程序数据结构算法 软件程序文档(需求、模型、说明书) 软件应用: 系统软件 应用 工程/科学…...

网络——套接字编程UDP

目录 端口号 源端口号和目的端口号 认识TCP协议和UDP协议 网络字节序 socket编程接口 socket常见接口 sockaddr结构 UDP socket bind recvfrom sendto 编写客户端 绑定INADDR_ANY 实现聊天功能 端口号 在这之前我们已经说过源IP地址和目的IP地址,还有…...

FPGA_AD9361

1.集成12位DAC和ADC的一款器件,2个输入模拟通道和2个输出模拟通道 2.• TX频段:47 MHz至6.0 GHz • RX频段:70 MHz至6.0 GHz 3.SPI配置成LVDS或CMOS接口,也可以还可以选择FDD(频分双工——全双工,操作时需…...

探讨Java代码混淆加固工具

摘要 本篇博客将介绍几种常用的Java代码混淆工具,如ProGuard、Allatori Java Obfuscator、VirboxProtector、ipaguard和DashO。我们将深入探讨它们的特点、功能以及在保护Java应用程序安全方面的作用。此外,还将强调在使用Java代码混淆工具时需要注意的安…...

Linux——du, df命令查看磁盘空间使用情况

一、实现原理: df 命令的全称是Disk Free ,显而易见它是统计磁盘中空闲的空间,也即空闲的磁盘块数。它是通过文件系统磁盘块分配图进行计算出的。 du 命令的全称是 Disk Used ,统计磁盘有已经使用的空间。它是直接统计各文件各目…...

数据库实验(一)SQL Server触发器

目录 触发器的定义 触发器和存储过程的区别 触发器的优点 触发器的作用 触发器的分类 DML触发器 DDL触发器 登录触发器 触发器的工作原理 inserted表 deleted表 创建触发器 编程要求 测试要求: 实验代码: 触发器的定义 触发器是建立在触…...

添加网址到主页

基于localStorage的网址收藏夹-CSDN博客 为了通过安卓菜单添加网址到主页中,调试了几个小时,主要踩了几个坑。 1.localStorage 通过域名隔离,需要加载主页才能读写。 2.WebView 可以不显示,但是 JS 代码要放在 window.onload 中…...

消息中间件如何实现高可用

消息中间件实现高可用的方式有很多种,常见的方法包括: 集群部署:通过在多台服务器上部署消息中间件实例,构成一个集群,提高整体系统的可用性。当一台机器出现故障时,其他机器可以继续提供服务。主从复制&a…...

Hbase 王者荣耀数据表 HBase常用Shell命令

大数据课本: HBase常用Shell命令 在使用具体的Shell命令操作HBase数据之前,需要首先启动Hadoop,然后再启动HBase,并且启动HBase Shell,进入Shell命令提示符状态,具体命令如下: $ cd /usr/local…...

家用智能洗地机哪个牌子好?4款型号让你解锁高效省力生活体验

在今天的社会中,随着生活节奏的加快,人们对于家庭清洁的需求不断增加。传统的清洁方法已经无法满足现代家庭的需求。因此,洗地机作为一种高效、方便的清洁工具,已经成为了许多家庭首选的清洁设备。然而,在市场上&#…...

Linux--进程(1)

目录 前言 1.冯诺依曼体系结构 2. 操作系统(Operator System)--第一个被加载的软件 3.进程 3.1基本概念 3.2Linux中的PCB 3.3通过系统调用创建子进程-fork初识 fork:创建一个子进程 为什么要创建子进程? fork的原理: 进一步了解fo…...

Qt登录页面

#include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget) {ui->setupUi(this);//接收动图QMovie *mv new QMovie(":/pictrue/luori.gif");ui->loglab->setMovie(…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...