MPU6050应用详解

2023-05-16

MPU6050应用详解

最近项目上要用到 MPU6050 陀螺仪,以前没有接触过它。虽然在网上很容易就可以找到了需要的代码。实现了一部分功能。但是却还是对陀螺仪的工作原理不太了解,它的代码也需要分析一下,I2C通信、相关寄存器也要熟悉。我看网上多是在Arduino开发板实现的,那么在 C51单片机板上怎么实现呢,又或者 S5PV210 上怎么实现呢?带着这些问题,开始 MPU6050 的开发。

一、型号

我看了一下型号为 GY-521 MPU6050模块 三维角度传感器6DOF 三轴加速度计电子陀螺仪

可在官网下载最新的芯片手册和寄存器映射和描述,参看:MPU6050 官网

二、查看芯片手册

(1)产品简介

MPU-60X0是世界上第一款集成 6 轴MotionTracking设备。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器 DMP( DigitalMotion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其 I2C或SPI接口输出一个9轴的信号( SPI接口仅在MPU-6000可用)。 MPU-60X0也可以通过其I2C接口连接非惯性的数字传感器,比如压力传感器。
MPU-60X0对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的,陀螺仪可测范围为±250, ±500, ±1000, ±2000°/秒( dps),加速度计可测范围为±2, ±4,±8, ±16g。
一个片上1024字节的FIFO,有助于降低系统功耗。和所有设备寄存器之间的通信采用 400kHz的 I2C接口或 1MHz的 SPI接口( SPI仅MPU-6000可用)。 对于需要高速传输的应用, 对寄存器的读取和中断可用 20MHz的SPI。另外,片上还内嵌了一个温度传感器和在工作环境下仅有±1%变动的振荡器。芯片尺寸4×4×0.9mm,采用QFN封装(无引线方形封装),可承受最大 10000g的冲击,并有可编程的低通滤波器。
关于电源, MPU-60X0可支持 VDD范围 2.5V±5%, 3.0V±5%,或 3.3V±5%。另外MPU-6050还有一个 VLOGIC引脚,用来为 I2C输出提供逻辑电平。 VLOGIC电压可取1.8±5%或者VDD。

(2)产品特征

数字输出6轴或9轴的旋转矩阵、四元数(quaternion)、欧拉角格式(EulerAngleforma)的融合演算数据。
具有131 LSBs/°/sec 敏感度与全格感测范围为±250、 ±500、 ±1000与±2000°/sec 的3轴角速度感测器(陀螺仪)。
可程式控制,且程式控制范围为±2g、 ±4g、 ±8g和±16g的3轴加速器。
移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移。
数字运动处理(DMP:DigitalMotion Processing)引擎可减少复杂的融合演算数据、 感测器同步化、 姿势感应等的负荷。 运动处理数据库支持 Android、 Linux与Windows 内建之运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求。
以数位输出的温度传感器
以数位输入的同步引脚(Syncpin)支援视频电子影相稳定技术与GPS
可程式控制的中断(interrupt)支援姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、 high-G中断、零动作感应、触击感应、摇动感应功能。
VDD供电电压为2.5V±5%、 3.0V±5%、 3.3V±5%; VDDIO为1.8V±5%
陀螺仪运作电流: 5mA, 陀螺仪待命电流: 5uA; 加速器运作电流: 500uA, 加速器省电模式电流: 40uA@10Hz
高达 400kHz 快速模式的 I2C,或最高至 20MHz 的 SPI 串行主机接口(serial hostinterface)
内建振荡器在工作温度范围内仅有±1%频率变化。 可选外部时钟输入 32.768kHz或19.2MHz

(3)使用说明

《1》引脚输出和信号描述

《2》典型用法

《3》所需电容规格

需要了解的小知识点:

电容的基本单位是F(法拉),其它单位还有:毫法(mF)、微法(uF)、纳法(nF)、皮法(pF)。
由于单位F 的容量太大,所以我们看到的一般都是μF、nF、pF的单位。
换算:1F=1000000μF,1μF=1000nF=1000000pF

电容规格:Ceramic, X7R, 0.1μF ±10%, 2V  是什么意思呢?

参看:全系列电容规格书

Ceramic

陶瓷介质

X7R

温度系数/特性:工作温度范围 -55℃~125℃ (军工级)

    元器件级别主要是指其工作温度范围,如下:
    商业级:0℃~+70℃
    工业级:-40℃~+85℃
    汽车级:-40℃~125℃
    军品级:-55℃~+125℃

0.1μF ±10%

0.1μF 容量,容差是±10%

2V

额定电压,以此也可以选择电容尺寸

三、电路图

到此,硬件部分看完了!!

/

上面简单的介绍了 MPU6050,里面有好多概念不明白,3轴、6轴、9轴、加速度计、磁力针、DMP等等。

都是什么玩意。。。啊!!这道题我不会做,太难了!

带着这些问题,继续看芯片手册。

一、概述

MPU-60X0由以下几个关键块和功能组成:

1、带有16位ADC和信号调理的三轴MEMS速率陀螺仪传感器
2、具有16位ADC和信号调理的三轴MEMS加速度传感器
3、数字运动处理器(DMP)引擎
4、主I2C和SPI(仅MPU-6000)串行通信接口
5、用于第三方磁力计和其他传感器的辅助I2C串行接口
6、时钟
7、传感器数据寄存器
8、FIFO
9、中断
10、数字输出温度传感器
11、陀螺仪和加速度计自检
12、偏见和LDO
13、充电泵

其系统结构图:

接下来就一一的开始看。

二、带有16位ADC和信号调理的三轴MEMS陀螺仪

MPU-60X0由三个独立的振动MEMS速率陀螺仪组成,可检测旋转角度X轴,Y轴和Z轴。 当陀螺仪围绕任何感应轴旋转时,科里奥利效应就会产生电容式传感器检测到的振动。 所得到的信号被放大,解调和滤波产生与角速度成比例的电压。 该电压使用单独的片内数字化16位模数转换器(ADC)对每个轴进行采样。 陀螺仪传感器可以全面范围的被数字编程为每秒±250,±500,±1000或±2000度(dps)。 ADC样本速率可以从每秒8,000个采样点编程到每秒3.9个采样点,并且可由用户选择低通滤波器可实现广泛的截止频率。

三、具有16位ADC和信号调理的三轴MEMS加速度计

MPU-60X0的3轴加速度计为每个轴使用单独的检测质量。 加速沿着一条特定轴在相应的检测质量上引起位移,并且电容式传感器检测到该位移位移有差别。 MPU-60X0的架构降低了加速度计的敏感度制造变化以及热漂移。 当设备放置在平坦的表面上时,将进行测量在X和Y轴上为 0g,在Z轴上为+ 1g。 加速度计的比例因子在工厂进行校准并且在名义上与电源电压无关。 每个传感器都有一个专用的sigma-delta ADC来提供数字输出。 数字输出的满量程范围可以调整到±2g,±4g,±8g或±16g。

四、数字运动处理器(DMP)

嵌入式数字运动处理器(DMP)位于MPU-60X0内部,可从主机处理器中卸载运动处理算法的运算。 DMP从加速度计,陀螺仪以及其他第三方传感器(如磁力计)获取数据,并处理数据。结果数据可以从DMP的寄存器中读取,或者可以在FIFO中缓冲。 DMP可以访问其中的一个MPU的外部引脚,可用于产生中断。
DMP的目的是卸载主机处理器的时序要求和处理能力。通常,运动处理算法应该以高速运行,通常在200Hz左右,以提供低延迟的精确结果。即使应用程序以更低的速率更新,这也是必需的。例如,一个低功率的用户界面可能会以5Hz的速度更新,但运动处理仍然应该以200Hz运行。 DMP可以作为一种工具使用,以最大限度地降低功耗,简化定时,简化软件架构,并在主机处理器上节省宝贵的MIPS,以便在应用中使用。

五、主要 I2C 和 SPI 串行通信接口

MPU-60X0使用 SPI(仅MPU-6000)或 I2C 串行通信至系统处理器接口。 与系统处理器通信时,MPU-60X0始终充当从属设备。 LSB的 I2C 从地址的地址由引脚9(AD0)设置(一般接地)。
MPU-60X0与其主机之间的通信逻辑电平如下:
    MPU-6000:与主机通信的逻辑电平由VDD上的电压设置
    MPU-6050:与主机通信的逻辑电平由VLOGIC上的电压设置

六、辅助I2C串行接口

MPU-60X0 具有一个辅助 I2C 总线,用于与片外3轴数字输出磁力计进行通信或其他传感器。 

两种工作模式:

I2C Master Mode,此时MPU-60X0作为主设备与外接传感器通信; 

Pass-Through Mode, 此时仅用作连接, 允许MPU和外接传感器同时和芯片通信。

因为我没有用到磁力针,这部分不详讲。

到此就搞清楚了:

GY-521MPU6050 是三维角度传感器,为全球首例集成六轴传感器的运动处理组件。

这里的六轴,代表的是它内置了一个三轴 MEMS 陀螺仪、一个三轴 MEMS 加速度计,一个数字运动处理引擎(DMP)。它还有用于第三方的数字传感器接口的辅助 I2C 串行接口,比如当辅助 I2C 串行接口连接到一个三轴磁力计,MPU6050 能提供一个完整的九轴融合输出到其主 I2C 端口。 

下图标明了传感器的参考坐标系( XYZ组成右手系)以及 3个测量轴和旋转方向。

旋转的正向可用右手螺旋定则判断

        

七、内部时钟生成

MPU-60X0具有灵活的时钟方案,允许多种内部或外部时钟源用于内部同步电路。这个同步电路包括信号调理和
ADC,DMP以及各种控制电路和寄存器。片内PLL提供了灵活性允许输入产生这个时钟。
产生内部时钟的允许的内部源是:
    内部张弛振荡器
    任何X,Y或Z陀螺(在整个温度范围内变化±1%的MEMS振荡器)
允许的外部时钟源是:
    32.768kHz方波
    19.2MHz方波
生成内部同步时钟源的选择取决于外部的可用性来源以及对功耗和时钟精度的要求。这些要求将是最多的可能因操作模式而异。例如,在一种模式中,最关心的是电量消耗,用户可能希望操作MPU-60X0的数字运动处理器进行处理加速计数据,同时保持陀螺仪关闭。在这种情况下,内部张弛振荡器是一个好时钟选择。但是,在另一种陀螺仪激活的模式下,选择陀螺仪作为时钟源提供更精确的时钟源。时钟精度非常重要,因为时序误差直接影响数字运动处理器(以及任何处理器的扩展)执行的距离和角度计算。还有启动条件要考虑。当MPU-60X0首次启动时,设备使用其内部时钟,直到编程从另一个来源操作。这允许用户例如等待使MEMS振荡器在被选为时钟源之前稳定下来。

八、传感器数据寄存器

传感器数据寄存器包含最新的陀螺仪,加速度计,辅助传感器和温度测量数据。 它们是只读寄存器,可通过串行接口访问。 这些寄存器的数据可以随时读取。 但是,可以使用中断函数来确定新数据何时可用。

九、FIFO

MPU-60X0包含一个可通过串行接口访问的1024字节FIFO寄存器。 FIFO配置寄存器决定哪个数据写入FIFO。 可能的选择包括陀螺仪数据,加速计数据,温度读数,辅助传感器读数和 FSYNC 输入。 FIFO 计数器跟踪 FIFO 中包含的有效数据字节数。 FIFO寄存器支持突发读取。 中断功能可用于确定新数据何时可用。

十、中断

中断功能通过中断配置寄存器进行配置。 可配置的项目包括INT引脚配置,中断锁存和清除方法以及中断触发器。 可触发中断的项目有:

(1)时钟发生器锁定到新的参考振荡器(用于切换时钟源); 

(2)可以读取新数据(来自FIFO和数据寄存器); 

(3)加速度计事件中断; 

(4)MPU-60X0 没有收到辅助传感器的确认I2C总线。 

中断状态可以从中断状态寄存器读取。

十一、数字输出温度传感器

片上温度传感器和ADC用于测量MPU-60X0芯片温度。 ADC的读数可以从FIFO或传感器数据寄存器读取。

十二、偏压和LDO

偏压和LDO部分产生MPU-60X0所需的内部电源和参考电压和电流。 其两个输入是一个2.375至3.46V的未调整VDD和一个1.71V至VDD(仅MPU-6050)的VLOGIC逻辑参考电源电压。 在REGOUT,LDO输出被一个电容旁路。

十三、电荷泵

板载电荷泵产生MEMS振荡器所需的高电压。 其输出在CPOUT旁边被一个电容旁路。

转载于:https://www.cnblogs.com/zhb123456/p/10628713.html

相关资源:MPU6050中文资料_mpu6050中文资料,mpu6050中文数据手册-嵌入式...

(74条消息) MPU6050应用详解_weixin_30835933的博客-CSDN博客

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

MPU6050应用详解 的相关文章

  • STM32 USART 一些问题

    SECTION 1 1 2 3 4 5 6 7 8 9 10 11 12 13
  • 数据缓冲策略 —— 无缓冲、行缓冲、全缓冲(缓冲区大小测试)

    printf打印数据时 xff0c 一般会先把数据放入C缓冲区 xff0c 然后再刷新到内核缓冲区 xff0c 最后再写入硬件 这个过程中 xff0c 数据从C缓冲区迁移到内核缓冲区的操作我们称为缓冲 xff08 也可以理解为刷新 xff0
  • K210 FreeRTOS多任务多核系统调度

    一 目的 众所周知 xff0c K210这款AI新品是一款64bit 双核芯片 xff0c 其支持裸机编程 xff0c 并且官方也提供freertos sdk xff0c 方便开发者在其上进行多任务应用开发 那么如何进行任务创建和多核开发呢
  • keil如何添加h文件_KEIL 那些编辑技巧与方法

    当然了 xff0c 很多人现在更多的是使用 VSCode 或者 SI 等软件进行编辑 xff0c 但不可否认的是 xff0c 还有很多道友还是选择 KEIL 作为编辑软件的 xff0c 本篇笔记作为一个编辑技巧的总结 关于 KEIL 软件的
  • 关于keil C51 案例 加入头文件

    1 先在工程下面建立一个 h文件 xff0c 例如delay h 在其中写入要加入的函数声明 xff0c 或者其他的一些预定义 xff1a ifndef DELAY H define DELAY H include lt reg52 h g
  • "extern C", 你真的懂了吗?

    在c 43 43 prime书中看到过 xff0c 在DLL和lib中看到过 xff0c 但是每次看过就不求甚解地一扫而过 心里知道有extern c这个语句 xff0c 却不知道该用在哪里 xff0c 又能起到什么作用 唉 xff0c 想
  • 内存或寄存器定义和赋值

    在嵌入式中 xff0c 会经常遇到寄存器 内存的数据传输 xff0c 如何向寄存器中写入数据呢 xff1f 现举例说明 xff1a define rDISRC0 volatile unsigned 0x4b000000 DMA 0 Init
  • Makefile的文件格式,详解规则

    构建规则都写在Makefile文件里面 xff0c 要学会如何Make命令 xff0c 就必须学会如何编写Makefile文件 1 概述 Makefile文件由一系列规则 xff08 rules xff09 构成 每条规则的形式如下 xff
  • 只声明而不定义变量

    如果想声明一个变量而不定义它 xff0c 就在变量前面添加关键字extern xff0c 而且不要显式地初始化变量 extern int i 声明i而非定义i extern int j 61 0 定义 int k 声明并且定义 注意 xff
  • vector 与 智能指针使用注意事项

    看以下代码 xff0c 执行时会有什么问题 xff1f include lt vector gt include lt stdio h gt include lt stdlib h gt include lt memory gt class
  • SystemV 共享内存(一)—— 共享内存的创建与释放(shmget / shmctl)

    匿名管道和命名管道都是基于文件 的进程间通信 xff0c SystemV方案是在OS内核层面 专门为进程间通信设计的一个方案 xff0c 然后通过系统调用 xff08 system call xff09 给用户提供通信接口 SystemV方
  • TTL 485 232 全双工 半双工 单工---精简总结

    全双工 xff1a 双向2车道 半双工 xff1a 双向1车道 单工 xff1a 单向车道 1 从单片机软件编程角度来说 xff0c RS232 RS485都是转换为TTL电平方式与单片机通信 xff08 CAN收发器把差分信号转化为TTL
  • STM32F4-ADC-常规通道-转换模式配置-总结

    STM32F4 ADC常规通道转换的模式配置 模式选择 此寄存器定义 xff1a 是否自动循环 这两个寄存器定义 xff1a Scan mode xff08 是否轮询序列 xff09 和Discontinuous mode xff08 是否
  • 单片机 裸机 架构

    以前是 while xff08 1 xff09 43 软件定时器 43 中断标志 的框架 xff0c 现在的项目我想尝试一下新的框架 xff0c 简单来说是 主状态机 43 大量子状态机 43 软件定时器 的方式 xff0c 这其中状态机和
  • USART---串口发送数据

    xfeff xfeff while USART1 gt SR amp 0X40 61 61 0 等待发送结束 解析 xff1a USART1 gt SR xff1a 串口 状态 寄存器 USART1 gt SR amp 0X40 即串口状态
  • STM32---串口初始化

    u8 USART RX BUF USART REC LEN 接收缓冲 最大USART REC LEN个字节 bit15 xff0c 接收完成标志 bit14 xff0c 接收到0x0d bit13 0 xff0c 接收到的有效字节数目 u1
  • stm32---RS485初始化

    u8 RS485 RX BUF 64 接收缓冲 最大64个字节 u8 RS485 RX CNT 61 0 接收到的数据长度 函数 xff1a RS485 Init 功能 xff1a 串口初始化配置 参数 xff1a Baud 波特率 备注
  • 定时器0,中断,控制LED闪烁(1s亮,1s灭)---2018-11-07

    include lt reg52 h gt include lt stdio h gt define uchar unsigned char define uint unsigned int sbit LED 61 P2 2 void ti
  • AM2322温湿度传感器(地址0XB8)---I2C总结(I2C_ModBus协议)

  • 数码管---共阳---共阴---段选码---位选码---总结

    共阴极 xff1a 位选为低电平 xff08 即0 xff09 选中数码管 各段选为高电平 xff08 即1接 43 5V时 xff09 选中各数码段 0 f 共阴数码管段选 表 xff0c 无小数点 xff1a unsigned char

随机推荐

  • ubuntu怎样通过终端打开firefox?

    1 直接输入firefox 按回车 2 首先打开火狐浏览器 xff0c 鼠标移到屏幕最顶端 xff0c 出现菜单栏 工具栏 xff0d xff0d 附加组件选项 如下图所示 也可以在火狐浏览器界面 使用快捷键 shift 43 Ctrl 4
  • 重新认识 IP地址

    目录 一 什么是网段划分 二 如何分配子网中的IP xff1f 三 IP地址的分类 1 早期划分方式 1 早期分类方式 2 早期分类的局限性 2 CIDR划分 xff08 子网掩码划分 xff09 1 基本思路 2 实现方式 四 IP地址的
  • Linux服务器下抓包工具tcpdump分析

    概述 说到抓包分析 xff0c 最简单的办法莫过于在客户端直接安装一个Wireshark或者Fiddler了 xff0c 但是有时候由于接口调用无法在客户端抓包 xff0c 只能在服务器上抓包 xff0c 这种情况下怎么办呢 xff1f 本
  • MATLAB 常用转义字符

    MATLAB常用转义字符收录如下 Single quotation mark nbsp Percent character nbsp Backslash nbsp a Alarm nbsp b Backspace nbsp f Form f
  • 利用MATLAB解决人工神经网络模拟预测问题研究

    利用MATLAB解决人工神经网络模拟预测问题研究 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 人工神经网络根据模仿人脑的工作原理抽象出来的一种算法 人工神经网络 artigicial neutral ne
  • Visual Studio 2008学习过程(之一)起步

    以前 xff0c 在使用MATLAB开发一些软件 xff0c 虽然它的数值计算方面的功能很强大 xff0c 但是界面不是很好看 xff0c 很难做出来漂亮的软件 xff0c 所以萌生了用VS和MATLAB联合编程的想法 这样可以使软件更加强
  • 如何用servlet写网页访问量计数器?

    如何用servlet写网页访问量计数器 xff1f 1 原料 l MyEclipse l Tomcat l html 2 步骤 1 新建工程 项目栏鼠标右键 New Web Project xff0c 这里我起名为 xff1a myexm4
  • 提示:请安装TCP/IP协议.error=10106。解决方案

    有朋友使用电脑的时候会出现如下错误 xff0c 如何解决该问题是本文写作的目的 提示错误 xff1a 图 1 解决 方案 xff1a 1 删除两个注册表选项 xff1b 按下windows键 43 R键 xff0c 输入regedit xf
  • 防止头文件被重复包含

    前言 为了避免同一个文件被include多次 xff0c C C 43 43 中有两种方式 xff0c 一种是 ifndef方式 xff0c 一种是 pragma once方式 方式一 xff1a ifndef SOMEFILE H 或写为
  • 有趣的网站分享——pornhub风格生成器

    寄语 要说logo设计 xff0c pornhub的logo设计让人印象深刻 xff0c 黑底白字 xff0c 配上一小撮橙色 xff0c 给人极强的冲击力 这不 xff0c 有一个有意思的程序员弄了一个网站 xff0c 专门生成pornh
  • 大小端存储问题

    1 什么是数据的高低位 数据的高位在左 xff0c 低位在右 2 什么是内存的高低位 2 什么是大端存储 小端存储 简单记就是 xff1a 小端 xff1a 低低 xff08 数据低位在内存低位 xff09 大端 xff1a 高低 xff0
  • 【A星算法的优化方案】

    当地图很大的时候 xff0c 或者使用A星算法的寻路频率很高的时候 xff0c 普通的A星算法就会消耗大量的CPU性能急剧下降 xff0c 普通的A星性能还是不过关 接下来我们讲讲A星寻路在遇到性能瓶颈时的优化方案 一 长距离导航 当距离很
  • Java工具类:String与DateTime类型的相互转换

    1 String 转 DateTime 在转换之前需要引入 hutool 依赖 String datestr 61 34 2022 5 19 34 DateTime datetime 61 DateUtil parse datestr 2
  • Iterator迭代器的一般用法

    Iterator迭代器的一般用法 迭代器 xff08 Iterator xff09 迭代器是一种设计模式 xff0c 它是一个对象 xff0c 它可以遍历并选择序列中的对象 xff0c 而开发人员不需要了解该序列的底层结构 迭代器通常被称为
  • socket编程---fgets和fputs函数使用理解

    这一节是继续上一节socket05的讨论 xff0c 来探讨在使用socket进行通信中遇到的一些函数使用理解误区 1 fgets的使用注意点 在写socket通信 xff08 代码见上一篇中 xff0c 只是将sendbuf和recvbu
  • Tarjan算法详细讲解

    Tarjan算法讲解的博客网上找到三篇比较好的 现在都转载了 个人只研究了第一篇 正如博主所说 讲的标比较详细 清晰 剩下两篇也可以看一下 卿学姐视频讲解 https www bilibili com video av7330663 以下内
  • 中文乱码在线恢复网站

    乱码恢复
  • GCC自带的一些builtin内建函数

    title GCC自带的一些builtin内建函数 date 2021 02 27 18 57 00 description 一些GCC自带的内建 bulitin 函数的接口及实现 一 GCC内建函数 最近在刷 leetcode 的时候遇到
  • Shell脚本实用小技巧-教你屏蔽执行命令的所有显示信息,包含错误信息

    前言 xff1a 在Linux中 xff0c 有个 dev null的东西 xff0c 人们一般称之为黑洞 xff0c 大概的意思就是东西就像黑洞一样 xff0c 任何东西丢进去都会消失 xff0c 那么下面就开始进行一些小案例去认识一下这
  • MPU6050应用详解

    MPU6050应用详解 最近项目上要用到 MPU6050 陀螺仪 xff0c 以前没有接触过它 虽然在网上很容易就可以找到了需要的代码 实现了一部分功能 但是却还是对陀螺仪的工作原理不太了解 xff0c 它的代码也需要分析一下 xff0c