首页 > 其他分享 >【esp32 项目】使用I2C第一篇——I2C的科普

【esp32 项目】使用I2C第一篇——I2C的科普

时间:2024-06-10 22:34:10浏览次数:14  
标签:字节 高电平 esp32 发送 科普 信号 I2C 设备

https://www.eepw.com.cn/zhuanlan/315431.html

 

天我们来玩儿I2C。

I2C概述

I2C全称是Inter-Integrated Circuit,是飞利浦半导体公司(06年迁移到NXP了)在1982年发明的,是使用非常广泛的一种通信协议,很多传感器、存储芯片、OLED等,都是在使用I2C。标准输出模式下能达到100kbps的传输速率,快速模式下能达到400kbps的传输速率,高速模式下能达到3.4Mbps,超高速下最快能达到5Mbps。

与UART一样,IIC仅用两条线在设备间通信:

image.png

 

SCL -- 时钟信号

SDA -- 数据信号

I2C主机与从机之间共享时钟信号,时钟始终由主机控制,总线下面可以挂多个设备,是一种同步,多主,多从,半双工的通信协议,下面我们简单介绍一下通信原理:

image.png

 

默认情况下,两条线都被上拉,SCL=1,SDA=1。

启动与停止信号:

通信开始,要先发开启动信号,结束的时候,要发送结束信号。

开始信号由主设备发出启动,具体为在SCL高电平期间,SDA从高电平切换到低电平;

停止信号由主设备发出结束,具体为在SCL高电平期间,SDA从低电平切换到高电平;

image.png

 

当然,在传输过程中,有时候需要更改数据方向,重新传输等,我们没必要发停止信号,直接重新发启动信号启动即可。

image.png

 

地址字节

我们的总线上可能挂很多从设备,在我们主设备发送了启动信号之后,总线上的从设备就都被“唤醒”了,等着主设备发送地址宠幸。所以这里有一个从机地址的概念,从机地址以8位字节发送的,MSB在前,最后一位表示接下来读或写,所以高7位构成了从机地址,也可以看出,同一个总线上,可以寻址128个从设备。

一旦从设备的地址匹配,就继续读取最后一位,低电平代表写入,高电平代表读取。其它从设备就忽略后面的数据。

ACK与NACK

在每个字节传输之后,接收设备发送一个应答信号,确认或者不确认,接收设备通过在SCL高电平期间,将SDA拉低生成一个确认信号ACK,拉高生成一个不确认信号NACK,这里ACK主要用于表示字节正确传输了,NACK表示数据传输有错误,需要从新发送。应答信号主设备,从设备都可以产生,比如,主设备从从设备读取最后一个字节的数据后,就要发送NACK结束传输。

image.png

 

数据信号

数据以8位字节格式传输,高字节在前,传输的字节数量没有限制,但是每个字节后面必须要有一个数据接收方产生的应答信号。传输过程中,SCL为低的时候,SDA数据可以改变,SCL为高的时候,SDA的数据必须稳定。

image.png

 

命令字节

当写入或读取从设备中特定寄存器时,主机首先要向已寻址的从机写入寄存器地址,其实也是一个数据字节,我们这里称之为命令字节。

写入设备

主设备在发出启动信号之后,紧着着发送要操作从设备的地址,最后一位为低电平表示接下来写入数据,然后在时钟信号下一位一位的写入数据,在从设备发出ACK应答之后,发送结束信号结束通信。

image.png

 

读取数据

主设备在发出启动信号之后,紧着着发送要操作从设备的地址,最后一位为高电平表示接下来读取数据,然后接管SDA数据线并在时钟的控制下向主设备发送数据,主设备同样要在每个字节接收完毕的时候发送ACK响应,当主设备不想接收的时候,就在最后一个字节接收后发送NACK响应,然后恢复对总线的控制并发送结束信号。

SCL的控制权始终在主机这里。

image.png

 

当然,实际还要很多组合传输协议,这里由于篇幅问题就不展开说了,基本上大同小异,我们根据不同设备的数据手册来传输就可以啦。I2C还有很多特性,快速命令,仲裁,多主控等等,普通的应用接触不到,感兴趣的小伙伴自行研究下。

 

标签:字节,高电平,esp32,发送,科普,信号,I2C,设备
From: https://www.cnblogs.com/FBsharl/p/18241159

相关文章

  • 【esp32 项目】使用esp32的wifi
    原文:《老宇哥带你玩转ESP32:13终于到WiFi功能的使用了》链接:https://www.eepw.com.cn/zhuanlan/315164.html 今天我们来说说ESP32的WiFi。ESP32的WiFi我们之所以使用ESP32做一些小项目,最重要的就是看中了ESP32的WiFi功能,ESP32相当于一个强大的单片机+无线WiFi+蓝牙多合一......
  • 科普计算机的相关知识【上】
    一、计算机硬件1.主板(Motherboard)定义:主板是计算机系统的核心,承载着CPU、内存和扩展卡等关键组件。功能:主板负责连接和协调各个硬件组件,确保它们能够正常工作。主要芯片:包括BIOS芯片(提供基本的输入输出功能)、北桥芯片(负责高速数据传输和内存控制)和南桥芯片(负责低速数据传......
  • 【esp32 项目】中断读取按键
    原理图:图 按键部分图 单片机部分程序:KEY_USR 引脚配置成上拉输入在Arduino中,配置一个IO为上拉输入可以使用pinMode()函数和digitalWrite()函数。pinMode()函数用于设置引脚模式,而digitalWrite()函数用于设置上拉电阻。以下是一个示例代码,展示如何将Arduino的数字引脚3配......
  • 基于ESP32+arduino+platformIO驱动小米模组接入米家app(以温湿度传感器为例)
    1.选择开发板以及开发环境1.ESP32-C3-DevKitC-02作为主控(以下称为ESP32模块)相关文档:ESP32-C3-DevKitC-02-ESP32-C3-—ESP-IDF编程指南latest文档https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitc-02.ht......
  • FRDM-MCXN947开发板之i2c应用
    介绍MCXN947NXPFRDM-MCXN947开发板是一款基于MCXN947MCU的低成本评估板,MCU集成了双核ArmCortex-M33微控制器和一个神经处理单元(NPU)。开发板由一个MCXN947控制器和一个64Mbit外部串行闪存组成。该板还具有P3T1755DPI3C温度传感器,TJA1057GTK/3ZCANPHY,以太网PHY,SDHC电路......
  • 如何在 Proteus 中添加 esp32 库进行仿真
    前言:    最近有B站粉丝问到如何使用proteus进行ESP32仿真,然后自己去查阅了很多资料进修了一下,整理了出这篇文章,分享一下如何将ESP32库添加到proteus中并进行仿真。  在Proteus中添加ESP32库进行仿真下面具体介绍步骤:1.打开Proteus,转到"库"->"库管理"......
  • 真正的物理学科普
    物理学是研究自然界中物质和能量之间相互作用的科学,它涉及了广泛的领域,包括力、运动、能量、电磁、光学、声学、热力学等。物理学的主要目标是探索并解释自然现象的规律和原理,以建立对世界运行机制的理论框架。物理学大厦的建造,背后必然少不了他们:伽利略、牛顿、爱因斯坦......
  • ESP32-C3模组上实现蓝牙BLE配网功能(1)
    本文内容参考:《ESP32-C3物联网工程开发实战》乐鑫科技蓝牙的名字由来是怎样的?为什么不叫它“白牙”?特此致谢!一、蓝牙知识基础1.什么是蓝牙?(1)简介蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特......
  • STM32和ESP32哪个更适合初学者
    对于初学者来说,STM32和ESP32都有各自的优点和适用场景,但考虑到初学者的学习曲线和资源可用性,以下是对两者的一些比较和建议:STM32优点:丰富的教程和社区支持:STM32拥有庞大的用户群体和活跃的社区,这意味着你可以找到大量的教程、示例代码和解答问题的资源。完善的开发环境:STM32......
  • 新手学习STM32还是ESP32
    对于新手来说,选择学习STM32还是ESP32取决于个人的学习目标和背景。以下是针对这两种微控制器的详细分析,以便您做出更明智的选择:STM321.处理器架构与性能STM32采用单核或多核处理器架构,基于ARMCortex®-M0,M0+,M3,M4和M7内核。这些内核具有高性能,优化的指令集和较大的内存,能够......