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

细说STM32F407单片机IIC总线基础知识

目录

一、 I2C总线结构

1、I2C总线的特点

2、I2C总线通信协议

3、 STM32F407的I2C接口

二、 I2C的HAL驱动程序

1、 I2C接口的初始化

2、阻塞式数据传输

(1)函数HAL_I2C_IsDeviceReady()

(2)主设备发送和接收数据

(3)从设备发送和接收数据

(4)I2C存储器数据传输

3、中断方式数据传输

4、 DMA方式数据传输

5、其它


        I2C(Inter-Integrated Circuit)接口,有时也写作IIC或I²C接口,是一种串行数字总线接口。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C接口主要用于通信速率要求不高,以及多个器件之通信的应用场景。

        本文使用的开发板:旺宝红龙STM32F407ZGT6 KIT V1.0。

一、 I2C总线结构

        一个器件的I2C接口只有2根信号线,即双向串行数据线SDA和时钟信号线SCL。I2C是种多设备总线,一根I2C总线上可以挂载多个设备。

 

1、I2C总线的特点

  • I2C总线只有两根信号线,SDA是双向串行数据线,SCL是时钟信号线,用于数据收发的同步。
  • I2C总线上可以挂载多个设备,一般有一个主设备、多个从设备。MCU一般作为主设备,外围器件作为从设备。在I2C通信协议中,主动发起通信的器件就是主设备,被动进行响应的器件就是从设备。
  • I2C总线上每个器件有一个7位或10位的地址,主设备发起通信时,会首先发送目标设备地址,只有地址对应的从设备才会做出响应。
  • I2C总线的两根信号线有上拉电阻。当I2C器件空闲时,其输出接口是高阻态。当所有设备都空闲时,I2C总线上是高电平
  • I2C通信有标准模式和快速模式,标准模式传输速率为100kbit/s,快速模式传输速率为400kbit/s。

2、I2C总线通信协议

        I2C通信总是由主机启动,每个通信过程由起始信号开始,由停止信号结束。一个数据包有8位,每个数据包后有一个应答位(ACK)或非应答位(NACK)。例如,主设备向从设备发送1字节数据的时序图:

 

  • 起始位:当SCL是高电平时,SDA的下跳沿就是起始位,是启动一次I2C通信的起始信号。
  • 停止位:当SCL为高电平时,SDA的上跳沿就是停止位,是停止一次I2C通信的结束信号。
  • 数据位:在SCL的一个时钟周期内传输一个数据位,当SCL为低电平时,发送设备更新SDA的电平,当SCL为高电平时,接收设备读取SDA的电平就是有效的一位数据
  • 数据包:I2C数据通信一个数据包总是8位,也就是1字节的数据。
  • 应答信号:在发送完8位数据包后,发送设备在第9个SCL时钟周期采集接收设备的应答信号。若在SCL的第9个周期采集的SDA为低电平,就是应答信号ACK,如果采集的SDA是高电平,就是非应答信号NACK。

        在一次I2C通信过程中,可以传输多字节的数据。主机启动I2C通信后,发送的第一个字节是目标设备地址,后面再发送或接收的数据由具体器件的指令定义决定。I2C通信协议只是定义了基本的数据传输时序,并且通信时序由MCU的硬件I2C接口实现。

3、 STM32F407的I2C接口

        STM32F407芯片上有3个硬件I2C接口,记作I2C1、I2C2和I2C3,均支持I2C标准模式和I2C快速模式,还与系统管理总线(System Management Bus,SMBus)2.0兼容。STM32F407上的I2C接口具有如下特性。

  • 同一个I2C接口既可以工作于主模式,又可以工作于从模式。
  • 工作于从模式时,可以设置两个从设备地址,从而对两个从地址应答。
  • 使用7位或10位设备地址,还可以进行广播呼叫。
  • 支持不同的通信速度:标准模式传输速率为100kbit/s,快速模式传输速率为400kbit/s。
  • 带DMA功能的1字节缓存。

二、 I2C的HAL驱动程序

        I2C的HAL驱动程序头文件是stm32f4xx_hal_i2c.h和stm32f4xx_hal_i2c_ex.h。I2C的HAL驱动程序包括宏定义、结构体定义、宏函数和功能函数。I2C的数据传输有阻塞式、中断方式和DMA方式 

1、 I2C接口的初始化

        对I2C接口进行初始化配置的函数是HAL_I2C_Init(),其函数原型定义如下:

HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c)

     其中,hi2c是I2C接口的对象指针,是I2C_HandleTypeDef结构体类型指针。在STM32CubeIDE自动生成的文件i2c.c中,会为启用的I2C接口定义外设对象变量,例如,为I2C1接口定义的变量如下:

I2C_HandleTypeDef hi2c1; //I2C1接口的外设对象变量

        结构体I2C_HandleTypeDef的成员变量主要是HAL程序内部用到的一些定义,只有成员变量Init是需要用户配置的I2C通信参数,是I2C_InitTypeDef结构体类型。

2、阻塞式数据传输

        阻塞式数据传输使用方便,且I2C接口的传输速率不高,一般传输数据量也不大,阻塞式传输是常用的数据传输方式。

函数名

功能描述

HAL_I2C_IsDeviceReady()

检查某个从设备是否准备好了I2C通信

HAL_I2C_Master_Transmit()

作为主设备向某个地址的从设备发送一定长度的数据

HAL_I2C_Master_Receive()

作为主设备从某个地址的从设备接收一定长度的数据

HAL_I2C_Slave_Transmit()

作为从设备发送一定长度的数据

HAL_I2C_Slave_Receive()

作为从设备接收一定长度的数据

HAL_I2C_Mem_Write()

向某个从设备的指定存储地址开始写入一定长度的数据

HAL_I2C_Mem_Read()

从某个从设备的指定存储地址开始读取一定长度的数据

(1)函数HAL_I2C_IsDeviceReady()

        函数HAL_I2C_IsDeviceReady()用于检查I2C网络上一个从设备是否做好了I2C通信准备,其函数原型定义如下:

HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,uint32_t Trials,uint32_t Timeout);

        其中,hi2c是I2C接口对象指针,DevAddress是从设备地址,Trials是尝试的次数,Timeout是超时等待时间(单位是嘀嗒信号节拍数),当SysTick定时器频率为默认的1000Hz时,Timeout的单位就是ms。

(2)主设备发送和接收数据

        一个I2C总线上有一个主设备,可能有多个从设备。主设备与从设备通信时,必须指定设备地址。I2C主设备发送和接收数据的两个函数的原型定义如下:

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,uint8_t *pData,uint16_t Size,uint32_t Timeout);HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,uint8_t *pData,uint16_t Size,uint32_t Timeout);

        其中,pData是发送或接收数据的缓冲区,Size是缓冲区大小。DevAddress是从设备地址无论是发送还是接收,这个地址都要设置为I2C设备的写操作地址。Timeout为超时等待时间单位是嘀嗒信号节拍数。

        阻塞式操作函数在数据发送或接收完成后才返回,返回值为HAL_OK时表示传输成功,否则可能是出现错误或超时。

(3)从设备发送和接收数据

        I2C从设备发送和接收数据的两个函数的原型定义如下:

HAL_StatusTypeDef HAL_I2C_slave_Transmit(I2C_HandleTypeDef *hi2c,uint8_t *pData,uint16_t Size,uint32_t Timeout);HAL_StatusTypeDef HAL_I2C_slave_Receive(I2C_HandleTypeDef *hi2c,uint8_t *pData,uint16_t size,uint32_t Timeout)

        I2C从设备是应答式地响应主设备的传输要求,发送和接收数据的对象总是主设备,所以函数中无须设置目标设备地址。

(4)I2C存储器数据传输

        对于I2C接口的存储器,例如EEPROM芯片24C02,有两个专门的函数用于存储器数据读写。向存储器写入数据的函数是HAL_I2C_Mem_Write(),其原型定义如下:

HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,uint16_t MemAddress,uint16_t MemAddSize,uint8_t*pData,uint16_t Size,uint32_t Timeout);

        其中,DevAddress是I2C从设备地址,MemAddress是存储器内部写入数据的起始地址,MemAddSize是存储器内部地址大小,即8位地址或16位地址,有两个宏定义表示存储器内部地址大小。

#define I2C_MEMADD_SIZE_8BIT 0x00000001U  //8位存储器地址
#define I2C_MEMADD_SIZE_16BIT 0x000000100 //16位存储器地址

        参数pData是待写入数据的缓冲区指针,Size是待写入数据的字节数,Timeout是超时等待时间。使用这个函数可以很方便地向I2C接口存储器一次性写入多字节的数据。从存储器读取数据的函数是HAL_I2C_Mem_Read),其原型定义如下:

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,uint16_t MemAddress,uint16_t MemAddSize,uint8_t *pData,uint16_t Size,uint32_t Timeout);

        使用I2C存储器数据传输函数的好处是,可以一次性传递地址和数据,函数会根据存储器的I2C通信协议依次传输地址和数据,而不需要用户自己分解通信过程。

3、中断方式数据传输

        一个I2C接口有两个中断号,一个用于事件中断,另一个用于错误中断。HAL_I2C_EV_IRQHandler()是事件中断ISR中调用的通用处理函数,HAL_I2C_ER_IRQHandler()是错误中断ISR中调用的通用处理函数。

        I2C接口的中断方式数据传输函数,以及各个传输函数关联的回调函数如表:

函数名

函数功能描述

关联的回调函数

HAL_I2C_Master_Transmit_IT()

主设备向某个地址的从设备发送
一定长度的数据

HAL_I2C_MasterTxCpltCallback()

HAL_I2C_Master_Receive_IT()

主设备从某个地址的从设备接收
一定长度的数据

HAL_I2C_MasterRxCpltCallback()

HAL_I2C_Master_Abort_IT()

主设备主动中止中断传输过程

HAL_I2C_AbortCpltCallback()

HAL_I2C_Slave_Transmit_IT()

作为从设备发送一定长度的数据

HAL_I2C_SlaveTxCpltCallback()

HAL_I2C_Slave_Receive_IT()

作为从设备接收一定长度的数据

HAL_I2C_SlaveRxCpltCallback()

HAL_I2C_Mem_Write_IT()

向某个从设备的指定存储地址开
始写入一定长度的数据

HAL_I2C_MemTxCpltCallback()

HAL_I2C_Mem_Read_IT()

从某个从设备的指定存储地址开
始读取一定长度的数据

HAL_I2C_MemRxCpltCallback()

所有中断方式传输函数

中断方式传输过程出现错误

HAL_I2C_ErrorCallback()

        中断方式数据传输函数的参数定义与对应的阻塞式传输函数类似,只是没有超时等待参数Timeout。例如,以中断方式读写I2C接口存储器的两个函数的原型定义如下:

HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,uint16_t MemAddress,uint16_t MemAddSize,uint8_t *pData,uint16_t Size);HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,int16_t MemAddress,uint16_t MemAddSize,uint8_t *pData,uint16_t Size);

        中断方式数据传输是非阻塞式的,函数返回HAL_OK只是表示函数操作成功,并不表示数据传输完成,只有相关联的回调函数被调用时,才表示数据传输完成

4、 DMA方式数据传输

        一个I2C接口有I2C_TX和I2C_RX两个DMA请求,可以为DMA请求配置DMA流,从而进行DMA方式数据传输。I2C接口的DMA方式数据传输函数,以及DMA流发生传输完成事件(DMA_IT_TC)中断时的回调函数如表:

函数名

函数功能描述

关联的回调函数

HAL_I2C_Master_Transmit_DMA()

向某个地址的从设备发送一
定长度的数据

HAL_I2C_MasterTxCpltCallback()

HAL_I2C_Master_Receive_DMA()

从某个地址的从设备接收一
定长度的数据

HAL_I2C_MasterRxCpltCallback()

HAL_I2C_Slave_Transmit_DMA()

作为从设备发送一定长度的
数据

HAL_I2C_SlaveTxCpltCallback()

HAL_I2C_Slave_Receive_DMA()

作为从设备接收一定长度的
数据

HAL_I2C_SlaveRxCpltCallback()

HAL_I2C_Mem_Write_DMA()

向某个从设备的指定存储地
址开始写入一定长度的数据

HAL_I2C_MemTxCpltCallback()

HAL_I2C_Mem_Read_DMA()

从某个从设备的指定存储地
址开始读取一定长度的数据

HAL_I2C_MemRxCpltCallback()

        DMA传输函数的参数形式与中断方式传输函数的参数形式相同,例如,以DMA方式读写I2C接口存储器的两个函数的原型定义如下:

HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,uint16_t MemAddress,uint16_t MemAddSize,uint8_t *pData,uint16_t Size);HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c,uint16_t DevAddress,uint16_t MemAddress,uint16_t MemAddSize,uint8_t *pData,uint16_t Size);

        DMA传输是非阻塞式传输,函数返回HAL_OK时只表示函数操作完成,并不表示数据传输完成。DMA传输过程由DMA流产生中断事件,DMA流的中断函数指针指向I2C驱动程序中定义的一些回调函数。I2C的HAL驱动程序中并没有为DMA传输半完成中断事件设计和关联回调函数。

5、其它

        一个I2C从设备有两个地址,一个是写操作地址,另一个是读操作地址。例如开发板上的EEPROM芯片24C02的写操作地址是0xA0,读操作地址是0xA1,也就是在写操作地址上加1。在I2C的HAL驱动程序中,传递从设备地址参数时,只需设置写操作地址,函数内部会根据读写操作类型,自动使用写操作地址或读操作地址。但是在软件模拟I2C接口通信时,必须明确使用相应的地址。

        IIC总线判断高低电平;SPI总线判断边沿。 

相关文章:

细说STM32F407单片机IIC总线基础知识

目录 一、 I2C总线结构 1、I2C总线的特点 2、I2C总线通信协议 3、 STM32F407的I2C接口 二、 I2C的HAL驱动程序 1、 I2C接口的初始化 2、阻塞式数据传输 (1)函数HAL_I2C_IsDeviceReady() (2)主设备发送和接收数据 &#…...

从头开始学MyBatis—04缓存、逆向工程、分页插件

介绍了MyBatis的缓存、逆向工程和分页插件的使用 目录 1.Mybatis的缓存 1.1MyBatis的一级缓存 1.2MyBatis的二级缓存 1.3二级缓存的相关配置 1.4MyBatis缓存查询的顺序 1.5整合第三方缓存EHCache 1.5.1添加依赖 1.5.2各jar包功能 1.5.3创建EHCache的配置文件ehcache.x…...

Artec Space Spider助力剑桥研究团队解码古代社会合作【沪敖3D】

挑战:考古学家需要一种安全的方法来呈现新出土的陶瓷容器,对比文物形状。 解决方案:Artec Space Spider, Artec Studio 效果:本项目是REVERSEACTION项目的一部分,旨在研究无国家社会中复杂的古代技术。研究团队在考古地…...

《探索PyTorch计算机视觉:原理、应用与实践》

《探索PyTorch计算机视觉:原理、应用与实践》 一、PyTorch 与计算机视觉的奇妙相遇二、核心概念解析(一)张量:计算机视觉的数据基石(二)神经网络:视觉任务的智慧大脑(三)…...

【C#设计模式(21)——状态模式(State Pattern)】

前言 状态模式:在对象内部发生改变时改变其行为,使得对象在不同的状态下具有不同的行为表现。 代码 #region 状态模式-类/// 抽象 交通灯状态public abstract class TrafficLightState{public abstract void Display();}//红灯public class RedLight : TrafficLight…...

nvm日常使用中常用命令总结

日常开发vue项目中,不同的项目 我们可能需要安装不同的node版本,但是为了方便切换node,我们一般会安装一个名称为nvm的工具,这里总结一下,nvm常用的命令: 1、为了查看可用的 Node.js 版本,你可…...

【数据仓库】SparkSQL数仓实践

文章目录 集成hive metastoreSQL测试spark-sql 语法SQL执行流程两种数仓架构的选择hive on spark数仓配置经验 spark-sql没有元数据管理功能,只有sql 到RDD的解释翻译功能,所以需要和hive的metastore服务集成在一起使用。 集成hive metastore 在spark安…...

PessimisticLock

想象你和你的朋友都想去图书馆借同一本非常受欢迎的小说。为了确保你们中的一位能够成功借到这本书,图书馆采用了悲观锁机制来管理借阅过程。 悲观锁的方式 查看书籍状态:当你到达图书馆并决定要借这本小说时,你先告诉图书管理员你想借这本…...

【Maven】属性管理

1. 属性 问题导入 定义属性有什么好处&#xff1f; 1.1 属性配置与使用 ①&#xff1a;定义属性 <!--定义自定义属性--> <properties><spring.version>5.2.10.RELEASE</spring.version><junit.version>4.12</junit.version> </prop…...

微信小程序性能优化、分包

性能优化是任何应用开发中的重要组成部分&#xff0c;尤其是在移动环境中。对于微信小程序而言&#xff0c;随着用户量的增加和应用功能的丰富&#xff0c;性能优化显得尤为关键。良好的性能不仅提升用户体验&#xff0c;还能增加用户留存率和应用的使用频率。我们将探讨如何在…...

TDengine 新功能 VARBINARY 数据类型

1. 背景 VARBINARY 数据类型用于存储二进制数据&#xff0c;与 MySQL 中的 VARBINARY 数据类型功能相同&#xff0c;VARBINARY 数据类型长度可变&#xff0c;在创建表时指定最大字节长度&#xff0c;使用进按需分配存储&#xff0c;但不能超过建表时指定的最大值。 2. 功能说明…...

【Maven】工程依赖下载失败错误解决

在使用 Maven 构建项目时&#xff0c;可能会发生依赖项下载错误的情况&#xff0c;主要原因有以下几种&#xff1a; 下载依赖时出现网络故障或仓库服务器宕机等原因&#xff0c;导致无法连接至 Maven 仓库&#xff0c;从而无法下载依赖。 依赖项的版本号或配置文件中的版本号错…...

windows系统下使用cd命令切换到D盘的方法

windows系统下使用cd命令切换到D盘的方法 系统环境配置 win10系统原装C盘后期自己安装的硬盘D盘 python3.8安装在D盘中 问题说明 winR打开终端&#xff0c;使用 cd d:命令&#xff0c;无法将当前目录切换到D盘 解决方法 方法一&#xff1a;使用下面这条命令 cd /d d:运…...

嵌入式小白

1、看门狗 看门狗”就是一个计数器&#xff0c;由于位数有限计数器能够装的数值是有限的(比如8位的最多装256个数、16位的最多装65536个数)&#xff0c;从开启“看门狗”那刻起&#xff0c;它就开始不停的数机器周期&#xff0c;数一个机器周期就计数器加&#xff11;&#xf…...

xilinx 芯片使用vivado导出pindelay文件——FPGA学习笔记24

1、创建一个空的工程 2、在TCL命令窗输入 link_design -part xc7a35tfgg484-2&#xff08;芯片型号&#xff09;回车 3、输入write_csv xc7a35tfgg484-2(文件类型和文件名字) 回车&#xff0c;导出文件在该目录下 4、导出文件...

自研开发哪有什么捷径

许多同行看我平台成长得这么快&#xff0c;都在借机问我是不是有什么现成的模板可借鉴&#xff0c;开源的资源取巧一下。我就寻思哪有这么多现成的模板&#xff0c;有这巧劲去找好用的开源软件&#xff0c;不如踏踏实实自己设计。要我说&#xff0c;做研发的&#xff0c;除了得…...

【Mac】终端改色-让用户名和主机名有颜色

效果图 配置zsh 1.打开终端&#xff0c;进入.zshrc配置 cd ~ vim .zshrc2.添加如下配置并保存 # 启用命令行颜色显示 export CLICOLOR1 ## 加载颜色支持 autoload -U colors && colors # 配置 zsh 提示符 PROMPT"%{$fg_bold[red]%}%n%{$reset_color%}%{$fg_bol…...

ShenNiusModularity项目源码学习(6:访问控制)

ShenNius.Admin.API项目中的控制器类的函数如果需要访问控制&#xff0c;主要是调用ShenNius.Infrastructure项目下的AuthorityAttribute特性类实现的。AuthorityAttribute继承自ActionFilterAttribute抽象类&#xff0c;后者用于在调用控制器操作函数前后自定义处理逻辑&#…...

STM32F103RCT6学习之三:串口

1.串口基础 2.串口发送 1&#xff09;基本配置 注意&#xff1a;实现串口通信功能需在keil中设置打开Use Micro LIB&#xff0c;才能通过串口助手观察到串口信息 2)编辑代码 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration-------------…...

js 计算税率错误——如何处理

处理方法 var 税额Number(price_notax)*Number(tax_rate)/100;税额税额.toFixed(2);var 含税单价Number(price_notax)Number(税额);var 非小计Number(price_notax)*Number(common_num);var 含税小计Number(含税单价)*Number(common_num);含税小计含税小计.toFixed(2); 税额税额…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Docker 本地安装 mysql 数据库

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