I2C通信协议详解和通信流程分析

2023-05-16

1、I2C通信特征

1.1、物理接口:SCL + SDA

(1)SCL(serial clock):时钟线,传输CLK信号,一般是I2C主设备向从设备提供时钟的通道。
(2)SDA(serial data): 数据线,通信数据都通过SDA线传输

1.2、通信特征:串行、同步、非差分、低速率

串行:只有一根数据线,每次传输一个bit位;
同步:主设备和从设备的工作时钟频率是一样的,主设备通过SCL时钟线给从设备提供时钟频率;
非差分:因为I2C通信速率不高,而且通信双方距离很近,一般是板级通信,所以使用电平信号通信;
低速率:I2C一般是用在同一个板子上的2个IC之间的通信,而且用来传输的数据量不大,所以本身通信速率很低。一般几百KHz,不同的I2C芯片的通信速率可能不同,具体在编程的时候要看自己所使用的设备允许的I2C通信最高速率,不能超过这个速率;

1.3、通信模式:主设备+从设备

(1)I2C通信时,通信设备之间的地位是平等的,分为主设备和从设备,其中主设备一个、从设备多个。主设备要主导整个通信过程,从设备根据I2C协议被动的响应主设备;
(2)在I2C通信中,没有规定谁做主设备、谁做从设备,是通信双方自己协商的。一个设备在同一时间只能做主设备或者从设备,但是有的设备可以通过软件配置来决定在此次通信时做主设备还是从设备。

1.4、可以多个设备挂在一条总线上

在这里插入图片描述

(1)I2C总线上可以挂载一个主设备和多个从设备,实现一对一(一个主设备 + 一个从设备)或者一对多(一个主设备 + 多个从设备)的通信;
(2)主设备负责调度总线,决定某个时间和其中一个从设备通信。在同一时间,只有主设备和其中一个从设备通信,其余的从设备处于等待状态,等待主设备与其通信;
(3)每个从设备在I2C总线上都有唯一的地址,主设备就是通过地址来区分不同的从设备,从而决定和哪一个从设备通信。

1.5、I2C总线的状态

空闲态:当SCL与SDA同时为高电平时,为空闲态;
忙态:主设备和从设备正在通信;
起始状态:当主设备在I2C总线上发出起始信号,开始一次通信;
停止状态:当主设备在I2C总线上发出停止信号,停止本次通信;

1.6、I2C总线协议

(1)主设备发送一个起始信号;
(2)主设备接着发送8bit数据,其中7位是从设备的地址,一位表示此次主设备是要读数据海思写数据;
(3)和主设备发送的地址匹配的从设备发出一个ack响应信号;
(4)主/从设备将数据发送到SDA总线上,每次传输都是8bit数据;
(5)主/从设备从SDA线上接收数据,并发送一个ACK响应信号;
(6)还可以接着n个发送和接收的过程;
(7)主设备发送停止信号,停止本次通信;

1.7、I2C从设备地址

(1)I2C通信的每次有效数据都是8bit,从设备地址是7bit,但是I2C主设备发送从设备地址时还是发送的8bit;
(2)在主设备发送从设备地址时,8bit数据中高7位是从设备地址,最低一位(LSB)是表示读写位;
(3)举例:KXTE9芯片的I2C地址固定为0b0001111(0x0f),最低位是1表示主设备读从设备,最低位是0则表示主设备写从设备。主设备读从设备时SAD是0b00011111,主设备写从设备SAD应该是0b00011110。

1.8、从设备地址知识补充

(1)一般从设备的地址都是固定的,在数据手册里可以查到,这也就是意味着在同一条I2C总线上,不能有两个及以上的同款从设备,不然就无法通过从地址来区分这两个设备。大多数的从设备地址都是固定的,因为没有必要同时接两个,比如重力传感器,你接一个就可以测出重力加速度,何必接两个。但是也有些设备需要同时接多个,比如一块EEPROM芯片(I2C接口)的容量不够就可能接两个。对于这种情况,生成EEPROM的厂家是做了预留的,EEPROM芯片的从地址一部分是固定的,一部分是通过给EEPROM芯片的引脚接高低电平来决定的。
(2)假设EEPROM芯片的7位地址,其中高5位是固定的0b111111,低两位是根据两个引脚的高低电平来确定,接高电平代表1,接低电平代表0。一块芯片把两个引脚接高电平,则从设备地址是0b11111111;另一块芯片把两个引脚把低电平,则从设备地址是0b111100。

1.9、主要用途

I2C通常是用在板级通信的,距离很近,Soc和各种外设的通信就是I2C通信方式,比如触摸屏、各种sensor等,外设的数据手册里会说明通信方式;

2、I2C控制器的结构框图

在这里插入图片描述

(1)最左侧是I2C总线的时钟来源,来源是时钟系统的PCLK_PSYS,PCLK_PSYS经过分频后得到I2C总线的时钟频率,然后主设备会通过SCL线将时钟信号传给从设备;
(2)I2C总线的控制单元,里面包含两个重要的寄存器:I2CCON和I2CSTAT寄存器。控制单元会对PCLK_PSYS时钟信号进行两级分频,产生通信需要的时序信号,配置I2C设备的主从模式等,具体细节看两个寄存器的说明;
(3)Address Register和Comparator是当设备作为从设备时用到的,Address Register寄存器里保存的是自己作为从设备的地址,Comparator是比较器,比较此次从I2C设备收到的地址是否和自己的地址相等,如果相等则代表主设备要和自己通信,如果不相等,就不用对此次通信做任何处理。
(3)Shift Register和I2CDS:I2CDS寄存器是保存接收/发送的数据,Shift Register是移位寄存器,负责将I2CDS寄存器里的数据一位一位的发送SDA总线上,或者将总线上的数据一位一位的存到I2CDS总线上,这要看当时是发送模式还是接收模式。

3、I2C控制器的模式

(1)主设备发送模式;
(2)主设备接收模式;
(3)从设备发送模式;
(4)从设备接收模式;
备注:设备可以是上面四个模式中的任意一种,但是同一时间只能是其中的一种,要么是作为主设备要么是作为从设备。

4、I2C的时序分析

4.1、时序介绍

时序就是时间顺序,实际上在通信中时序就是通信线上按照时间顺序发生的电平变化,以及这些变化对通信的意义就叫时序,不对的通信的协议对时序的要求不同。

4.2、通信起始条件和结束条件

在这里插入图片描述

起始信号:在SCL为高电平的时候,SDA产生一个下降沿;
停止信号:在SCL为高电平的时候,SDA产生一个上升沿;

4.3、数据有效性

在这里插入图片描述

(1)SDA 线上的数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。SCL为高电平时表示有效数据,SDA为高电平表示“1”,低电平表示“0”;SCL为低电平时表示无效数据,此时SDA会进行电平切换,为下次数据表示做准备。
(2)数据有效性:在I2C总线通信时,在总线上传输的数据并不都是有效数据。比如开始信号和停止信号,并不代表什么实际的含义,只是通信协议里规定的。正因为我们的有效数据应该在SCL为高电平时SDA保持稳定,所以才能区分出开始信号和停止信号。

4.4、响应ACK

在这里插入图片描述

主/从设备在发送完一次数据后,需要一个ACK响应信号。每个通信周期传输8个数据,在第九个通信周期,发送端将SDA总线拉高,然后释放总线的控制权。如果接收端在第九个周期将SDA拉低,就是发出了ACK信号,如果在第几个周期SDA一直是高电平则代表没有发出ACK信号。

4.5、空闲态

在这里插入图片描述

空闲态:在I2C总线上没有主、从设备进行通信,此时SCL和SDA一直保持高电平;

5、I2C总线的读/写数据操作

在这里插入图片描述

5.1、写模式

(1)主设备发送开始信号;
(2)主设备接着发送8bit数据,其中7bit是从设备的地址,1bit表示此次主设备是要读数据还是写数据;
(3)从设备发送ACK响应信号;
(4)主设备将要写的数据每次发送8bit到SDA线上,从设备接收到发送ACK响应信号;
(5)当主设备发送完数据后,发送一个停止信号;

5.2、读模式

(1)主设备发送开始信号;
(2)主设备接着发送8bit数据,其中7bit是从设备的地址,1bit表示此次主设备是要读数据还是写数据;
(3)从设备发送ACK响应信号;
(4)从设备将数据每次发送8bit到SDA线上,主设备接收到发送ACK响应信号;
(5)当主设备接收完数据后,发送一个停止信号;

6、I2C的通信流程

6.1、I2C通信的主设备发送流程

在这里插入图片描述

(1)通过操作I2CCON寄存器,将设备配置成主发送模式;
(2)将从设备的地址写到I2CDS寄存器中;
(3)往I2CSTAT寄存器写0xF0,让I2C控制器产生一个开始信号;
(4)移位寄存器将I2CDS里的数据发送到SDA总线上;
(5)在收到ACK信号后,中断被挂起,需要中断处理程序来处理;
(6)中断处理程序判断是否是要结束本次通信;
(7)如果不是结束本次通信,则将新的数据写到I2CDS寄存器中,然后清中断挂起标志,将数据发送到SDA总线上,等待ACK信号,进入下一次判断;
(8)如果是要结束本次通信,则往I2CSTAT寄存器中写0xD0,产生一个停止信号,清中断挂起标志,等停止信号发送完毕则结束本次通信;

6.2、I2C通信的主设备接收流程

在这里插入图片描述

(1)通过操作I2CCON寄存器,将设备配置成主接收模式;
(2)将从设备的地址写到I2CDS寄存器中;
(3)往I2CSTAT寄存器写0xB0,让I2C控制器产生一个开始信号;
(4)移位寄存器将I2CDS里的数据发送到SDA总线上;
(5)在收到ACK信号后,中断被挂起,需要中断处理程序来处理;
(6)中断处理程序判断是否是要结束本次通信;
(7)如果不是结束本次通信,则从I2CDS寄存器中读取数据,清中断挂起标志,移位器将SDA上的数据再存到I2CDS寄存器中,进入下一次循环判断;
(8)如果是要结束本次通信,则往I2CSTAT寄存器中写0x90,产生一个停止信号,清中断挂起标志,等停止信号发送完毕则结束本次通信;

6.3、I2C通信的从设备接收流程

在这里插入图片描述

(1)通过操作I2CCON寄存器,将设备配置成从接收模式;
(2)在SDA总线上检测到开始信号,I2CDS寄存器接收到数据;
(3)将I2CDS寄存器中接收到的数据和I2CADD寄存器中保存的地址进行比较;
(4)判断是否匹配;
(5)如果不匹配,则表示主设备不是和自己通信,不用再进行下面的步骤;
(6)I2C地址匹配则中断产生,告诉设备主设备要和自己通信,并发送一个ACK信号;
(7)从SDA总线上读取数据、处理数据,并发送一个ACK信号,然后清中断;
(8)判断是否要停止本次通信,也就是有没有检测到主设备发送停止信号;
(9)如果不停止通信,则再次从SDA总线上将数据读取到I2CDS寄存器中,然后产生中断,重复之前的步骤;
(10)如果是停止本次通信,则不再做响应即可;

6.4、I2C通信的从设备发送流程

在这里插入图片描述

(1)通过操作I2CCON寄存器,将设备配置成从发送模式;
(2)在SDA总线上检测到开始信号,I2CDS寄存器接收到数据;
(3)将I2CDS寄存器中接收到的数据和I2CADD寄存器中保存的地址进行比较;
(4)判断是否匹配;
(5)如果不匹配,则表示主设备不是和自己通信,不用再进行下面的步骤;
(6)I2C地址匹配则中断产生,告诉设备主设备要和自己通信,并发送一个ACK信号;
(7)写数据到I2CDS寄存器,然后清中断;
(8)判断是否要停止本次通信,也就是有没有检测到主设备发送停止信号;
(9)如果不停止通信,则将I2CDS寄存器中的数据发送到SDA总线上,然后产生中断,重复之前的步骤;
(10)如果是停止本次通信,则不再做响应即可;

7、I2CCON寄存器

在这里插入图片描述>(1)bit0-3:配置I2C时钟信号的二级分频系数;
(2)bit4:中断挂起标志;
(3)bit5:I2C总线的发送/接收使能;
(4)bit6:配置I2C时钟信号的一级分频系数;
(5)bit7:配置I2C总线是否要在每次通信周期的末尾发送ACK响应信号;

8、I2CSTAT寄存器

在这里插入图片描述

(1)bit0:判断上一次的通信周期是否收到ACK响应信号;
(2)bit1:I2C总线的地址清零标志;
(3)bit2:I2C总线从设备的地址标志位;
(4)bit3:I2C的总线总裁标志位;
(5)bit4:发送/接收使能位;
(6)bit5:如果是读,0代表总线空闲,1代表总线忙;如果是写,写0则I2C控制器发出一个停止信号,写1则I2C控制器发出一个开始信号;
(7)bit6-7:配置设备的模式;

9、分析KXTF9-2050芯片的I2C通信协议

参考博客:《通过KXTF9-2050芯片分析I2C协议》。

推荐

给大家推荐一款嵌入式工程师的学习神器,里面包含C语言、linux、操作系统等嵌入式工程师必备的知识点,不仅可以学习知识点还有配套的练习题、大厂面试题。博主在入门嵌入式行业时也是在这个平台学习,如果你是想入门嵌入式或者是找工作,都强烈推荐你使用这个网站。
《学习神器点这里》
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

I2C通信协议详解和通信流程分析 的相关文章

  • 解析I2C通信协议

    一 I2C的概念 1 I2C总线是PHLIPS公司推出的一种串行总线 xff0c I2C总线只有两根双向信号线 其中一根是数据线SDA xff0c 另一根是时钟线SCL 2 每个接到I2C总线上的器件都有唯一的地址 发送数据到总线上的称为发
  • I2C总线和触摸屏驱动移植实战-linux驱动开发第9部分-朱有鹏-专题视频课程

    I2C总线和触摸屏驱动移植实战 linux驱动开发第9部分 9306人已学习 课程介绍 本课程是linux驱动开发的第9个课程 xff0c 主要内容是linux的I2C子系统以及电容触摸屏驱动的移植 学习本课程的核心点在于I2C子系统 xf
  • I2C通信之EEPROM-第1季第15部分-朱有鹏-专题视频课程

    I2C通信之EEPROM 第1季第15部分 3173人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第1季第15个课程 xff0c 主要讲解了EEPROM的编程和使用 xff0c 其中重点是I2C接口 xff0c I2C是物
  • camera调试:i2c不通如何排查?

    这篇文章介绍一下在调试camera驱动的过程 xff0c 最常见的一个问题 xff0c i2c不通导致驱动注册不上 xff0c 应该如何排查 常见的报错log如下 xff1a 1 973566 T1 gc8034 4 0037 driver
  • PX4代码中LIDAR-Lite v3激光测距仪I2C驱动

    调试LIDAR Lite v3激光测距仪 xff0c 通读了PX4代码中驱动相关的部分 在这里做一下记录 飞控硬件是pixhawk1 xff0c PX4软件版本为1 7 3 按照官方教程进行接线和配置 xff0c 链接为 https doc
  • 【技术分享】GD32硬件I2C调试中的问题与解决过程-续

    使用GD32303C EVAL开发板和MPL3115A2模块测量气压或高度数据 xff0c 两者间使用硬件I2C进行通讯 上次调试发现官方例程 xff08 单一I2C读写功能 xff09 可以正常读写MPL芯片的寄存器 xff0c 而我建立
  • 关于I2C和SPI总线协议

    关于I2C和SPI总线协议 IICvs SPI 现今 xff0c 在低端数字通信应用领域 xff0c 我们随处可见IIC Inter Integrated Circuit 和 SPI Serial Peripheral Interface
  • I2C驱动体系结构一:驱动软件概念与对应硬件的关系

    一 概念 xff1a 1 设备 xff1a struct device xff1a 该数据结构是对物理设备的软件抽象 xff0c 比如I2C slave xff08 对应i2c client xff09 和I2C 适配器 xff08 对应i
  • I2C通讯协议介绍

    2019独角兽企业重金招聘Python工程师标准 gt gt gt I2C总线是PHLIPS公司在20世纪80年代推出的一种串行总线 具有引脚少 xff0c 硬件实现简单 xff0c 可扩展性强的优点 I2C总线的另一优点是支持多主控 xf
  • Linux控制I2C/SMBus设备

    平台 xff1a 树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1 2 I2C是Philips开发的一种两线通信协议 xff0c 常用于一些对速度要求不高的小型器件上 SMBus是系统管理总线 xff0c 基
  • I2C总线

    目录 1 硬件概述 1 1 常用器件 1 2 总线结构 1 3 工作原理 2 协议概述 2 1 传输格式 2 2 传输特点 2 3 读和写 2 4 时钟同步和总线仲裁 3 转换器概述 4 缓存器概述 1 硬件概述 1 1 常用器件
  • STM32基础---BH1750 硬件 IIC 驱动程序+ 测试demo

    STM32基础 BH1750 硬件 IIC 驱动程序 测试demo STM32CudeMx MDK ARM BH1750 简介 产品介绍 产品特点 测量程序步骤 指令集合结构 从 写指示 到 读出测量结果 的测量时序实例 STM32Cube
  • 外设驱动库开发笔记22:ADXL345三轴数字加速度计驱动

    移动设备的广泛应用增加对移动过程中各种参数的检测需求 ADXL345三轴数字加速度计可以用来检测加速度 进而测量倾斜角度等 在这一篇中 我们将讨论ADXL345三轴数字加速度计驱动程序的设计与实现 1 功能概述 ADXL345是一款小而薄的
  • 尝试通过 I2C 从 Arduino 获取数据时,出现 IOError:[Errno 121] python(树莓派)上的 smbus 远程 I/O 错误

    我遇到了问题 在启动通过 I2C 从 Arduino 请求数据的脚本时 python 有时会在我的 raspberry pi 3 上抛出这个 IOError 电气连接是完美的 所以这不是问题 此外 我在使用 i2cget y 1 0x04
  • 如何为连接到 I2C gpio 扩展器的虚拟 mdio-gpio 设备配置 ACPI *.asl

    我正在使用 Q7 模块 x86 并尝试在 Linux 上使用 ACPI SSDT Overlay 配置我们的外设 但我对此很挣扎 我想我误解了ACPI的一些核心概念 Problem CPU gt I2C gt PCA9575 GPIO Ex
  • 在 U-Boot 中使用 I2C 读取多个字节

    我的 Freescale p1022tw 板的 I2C 驱动程序有问题 U Boot 的控制台上有一个从 I2C 设备读取的命令 i2c md chip address 0 1 2 of objects 当我从 id 为 0x60 地址为
  • 在 Raspberry Pi 上使用 Python smbus - 与语法混淆

    我正在尝试在 Raspberry Pi 上使用 python smbus 使用 I2C 与 MMA7660 加速计芯片进行通信 在下面的代码中 我正在读取芯片的寄存器 0x 00 0x01 0x02 和 0x03 并且我得到的值完全相同 查
  • 使用 C++ 和 i2c 工具从虚拟 i2c 写入和读取

    我正在尝试使用 C 写入和读取 I2C 总线 我的I2C总线是虚拟的 第一件事是加载内核模块i2c stub 我可以通过 bash 完成所有事情 现在我将其移植到 C 我可以打开i2c总线 获取特定地址的i2c总线 但无法读写 我正在虚拟化
  • ESP8266 I2C从机不确认数据

    我有一个 TM4C123 处理器作为 I2C 主处理器 一个 ESP8266 作为从处理器 对于 ESP 我使用的是 Arduino IDE 并在 2 5 2 版安装了 ESP8266 支持 它应该支持 I2C 从模式 但是 我无法让它工作
  • 如何转换温度传感器得到的值?

    我在ST工作Temperature sensor hts221 我用I2C与传感器的命令通信 我从文档中看到类似以下文字 enter code here Temperature data are expressed as TEMP OUT

随机推荐

  • 比较两个List是否相等

    1 直接使用equals 比较 众所周知 xff0c 两个列表具有完全相同的元素并且具有完全相同的顺序时 xff0c 它们是相等的 因此 xff0c 如果我们业务要求两个list顺序一致 xff0c 可以使用equals xff08 xff
  • JVM-StringTable(三)

    一 常量池与串池StringTable的关系 span class token keyword public span span class token keyword class span span class token class n
  • SpringBoot常用拦截器(HandlerInterceptor,ClientHttpRequestInterceptor,RequestInterceptor)

    一 SpringBoot常用拦截器 下面3种拦截器 xff0c 都是http拦截器 xff0c 在处理业务逻辑之前对http请求信息进行处理 xff0c 比如获取请求头 xff0c 请求参数 xff0c 设置请求头 xff0c 请求参数等等
  • JAVA多线程基础篇-join方法的使用

    一 概述 join 是Thread类中的一个方法 xff0c 它的作用是将当前线程挂起 xff0c 等待其他线程结束后再执行当前线程 xff0c 即当前线程等待另一个调用join 方法的线程执行结束后再往下执行 通常用于在main主线程内
  • BindingException:Invalid bound statement (not found)异常

    一 前言 本文的mybatis是与springboot整合时出现的异常 xff0c 若使用的不是基于springboot xff0c 解决思路也大体一样的 二 从整合mybatis的三个步骤排查问题 但在这之前 xff0c 我们先要知道整合
  • SQL中case when用法详解及使用案例

    一 语法 Case具有两种格式 简单Case函数和Case搜索函数 简单Case函数格式 xff1a CASE 列名 WHEN 条件值1 THEN 选项1 WHEN 条件值2 THEN 选项2 ELSE 默认值 END Case搜索函数 x
  • 想入行C++游戏脚本制作?首先听听7年经验大佬怎么说?

    先自我介绍一下 xff0c 七年的程序开发经验 xff0c 在小一线城市税后2W多点 xff0c 本应过着很舒适的生活 xff0c 每天喝点小酒 xff0c 玩玩游戏 但自从入了A股 xff0c 一切都改变了 xff0c 如今的我 xff0
  • 大学刚毕业,用10000小时,走进字节跳动拿了offer

    前言 xff1a 没有绝对的天才 xff0c 只有持续不断的付出 对于我们每一个平凡人来说 xff0c 改变命运只能依靠努力 43 幸运 xff0c 但如果你不够幸运 xff0c 那就只能拉高努力的占比 2020年7月 xff0c 我有幸成
  • tensorflow中tfrecord数据操作

    前言 xff1a 为了更加展示tfrecord数据的相关操作 xff0c 笔者后续又写了一个实践的简单例子进一步解释 xff0c 具体可以看 xff1a TFrecords 制作数据集小例子 xff08 多标签 xff09 爱吃火锅的博客
  • 软件测试阶段

  • VR技术类毕业论文文献有哪些?

    本文是为大家整理的VR技术主题相关的10篇毕业论文文献 xff0c 包括5篇期刊论文和5篇学位论文 xff0c 为VR技术选题相关人员撰写毕业论文提供参考 1 期刊论文 运动炫科技 智慧赢未来 VR技术在体育领域内的应用与展望 期刊 xff
  • CentOS7防火墙添加端口

    CentOS7防火墙添加端口 CentOS防火墻添加端口比较简单 xff0c 三步走 xff08 皆以root用户执行 xff0c 或者用sudo命令 xff09 xff1a 1 查看开发的端口 firewall span class to
  • 手写一个--生产者消费者模式

    文章目录 前言wait notify方法实现生产者消费者模型1 使用Object的wait notify 方法2 使用Lock和Condition的await signal 方法3 使用BlockingQueue阻塞队列方法 前言 生产者消
  • C语言中static关键字用法和作用

    static修饰的对象 xff1a static关键字可以修饰 xff1a 局部变量 全局变量 函数 static修饰后改变了什么 xff1f 1 改变了生存周期 xff1b 就是一个变量 函数从分配内存去表示到回收内存的过程 2 改变了作
  • c语言中NULL到底是什么?

    C语言中NULL到底是什么 xff1f 1 NULL在C C 43 43 中定义为 xff1a ifdef cplusplus 定义这个符号就表示当前是C 43 43 环境 define NULL 0 在C 43 43 中NULL就是0 e
  • register关键字详解

    前言 xff1a 编译器的优化很大程度上就是通过数据流分析 调整读取内存的顺序等 xff0c 减少CPU对内存的读写 因为内存的运行速度相对于CPU是很慢的 xff0c 计算机中添加cache就是为了解决CPU和内存运行速度差异过大的问题
  • 海思烧录工具HiTool的使用方法以及烧录uboot

    1 什么是HiTool HiTool是海思公司提供的用于海思芯片的烧录工具 xff0c 可用于烧录uboot kernel rootfs等 这里只是简单的介绍用HiTool通过串口去烧写uboot xff0c 更加仔细的使用方法可以参考海思
  • /etc/profile文件简单介绍

    什么是 etc profile文件 etc profile文件为系统的每个用户设置环境变量信息 此文件的修改会影响到所有用户 想了解更多细节内容可以用 xff1a vi etc profile 命令进行查看 etc profile文件和 b
  • 五月再不跳槽,就晚了

    从时间节点上来看 xff0c 3月 4月是每年跳槽的黄金季 xff01 之后的五月也会放出一些岗位 以 BAT 为代表的互联网大厂 xff0c 无论是薪资待遇 还是平台和福利 xff0c 都一直是求职者眼中的香饽饽 xff0c 大厂经历 在
  • I2C通信协议详解和通信流程分析

    1 I2C通信特征 1 1 物理接口 xff1a SCL 43 SDA 1 SCL serial clock xff1a 时钟线 xff0c 传输CLK信号 xff0c 一般是I2C主设备向从设备提供时钟的通道 2 SDA serial d