了解I2C Primer、PMBus和SMBus通信协议

描述

作者:Mary Grace Legaspi and Eric Peňa

I2C或内部集成电路是建立设备之间通信的常用串行通信协议,特别是对于两个或多个不同的电路。I2C引物是最常用的 I2C. 本文将提供 I 的基本功能和标准2C 入门,主要用于解决通信实现过程中的正确用法。从我的基本原理2C,我们将介绍其变体子集系统管理总线 (SMBus) 和电源管理总线 (PMBus) 的可用性以及它们的差异。这三者中的每一个都有专门的功能,旨在满足不同的客户需求。

为什么它很重要?

I2C语言为设计人员在系统中的众多节点之间建立简单、双向、灵活的通信提供了好处。I2C语言通过仅使用两条双向线来发送和接收信息来降低复杂性。它还允许设计人员配置多个主节点系统IC之间的通信。I2C语言还有利于开发人员管理系统和电源,这使他们在最佳时间线内创建高质量产品的优势。

“沟通对那些从事沟通的人有用。”

——约翰·鲍威尔

通信协议在组织设备之间的通信方面起着重要作用。它根据系统要求以不同的方式设计,这些协议具有特定的、商定的规则来实现成功的通信。

你可能用过I2C如果您曾经构建过带有 LED 显示屏、传感器甚至加速度计模块的系统,仅举几例。I2C支持多个节点连接到单个主设备,多个主设备连接到多个节点的功能。如果您希望最大限度地让一个微控制器将数据记录到单个存储卡或将文本显示到单个 LCD,则此功能非常有用。

除了最常用的I2C Primer,我还有两个额外的变体2C,专注于系统和电源应用的用法。这些称为系统管理总线 (SMBus) 和电源管理总线 (PMBus)。

根据定义,内部集成电路(I2C)(也称为 Inter IC)是一种硬件通信协议,它使用与多主、多节点和串行通信总线的同步通信。同步通信意味着交换数据的两个(或多个)设备共享一条公共时钟线。I2C语言广泛用于将低速外设 IC 连接到处理器和微控制器。I2C总线由飞利浦设计,允许驻留在同一电路板上的组件之间轻松通信。

我2C 引物

接口

通过使用串行数据 (SDA) 线、串行时钟 (SCL) 线和用于承载所有通信的公共接地,可以最大限度地减少连接。

电源管理

图1.集成电路直接相互通信。

每根 I 中有两根电线2C 设备:

SDA是主设备和节点发送和接收数据的线路。

SCL 是传输时钟信号的线路。SCL 始终由 I 生成2C 主。该规范要求时钟信号的低相位和高相位的最小周期。

I2C总线仅使用两条双向线路:每个器件的 SDA 和 SCL,用于简单的 IC 间通信。

电源管理

图2.I2C 上拉电阻连接。

最重要的硬件部件是上拉电阻,由SDA和SCL线路使用。I2C兼容器件通过集电极开路或漏极开路引脚连接到总线,从而将线路拉低。当没有数据传输时,I2C总线线路在高电平状态下闲置;线条被动拉高。通过切换线路、拉低和释放高电平来发生传输。位在下降的时钟边沿上计时。

漏极开路输出需要一个上拉电阻(图2中的Rp)才能正确输出高电平。上拉电阻连接在输出引脚和输出电压(VDD在图 2) 中,这是高状态所需的。

四千七百欧姆(4700 Ω)是上拉电阻最常用的值,典型值为V抄送和 VDD(5 V)。

作为参考,屏蔽 2 AWG 双绞线电缆的电容范围为 100 pF/m 至 240 pF/m。因此,I 的最大总线长度2C 链路在 100 kBaud 时约为 1 米,在 10 kBaud 时约为 10 米。非屏蔽电缆通常具有小得多的电容,但只能在其他屏蔽外壳内使用。

表1总结了I2C.

 

特征 规格
电线 2
最大速度 标准模式 = 100 kbps 快速模式 = 400 kbps 高速模式 = 3.4 Mbps 超快模式 = 5 Mbps
同步还是异步? 同步
串行还是并行? 串行
最大电源数量 无限
最大节点数 1008

 

理论上,最大节点数为 27或 210用于寻址模式;但是,有 16 个地址是为特殊目的保留的。

I2C是同步的,因此位的输出通过主节点和节点之间共享的时钟信号与位采样同步。时钟信号始终由主设备控制。

保留 I2C 节点地址

有 16 个保留 I2C 地址。这些地址对应于两种模式之一:0000 XXX 或 1111 XXX。表 2 显示 I2C地址保留用于特殊用途。

 

我2C 节点地址 R/W 位说明
0000 000 0 一般呼叫地址
0000 000 1 起始字节
0000 001 X CBUS地址
0000 010 X 保留用于不同的总线格式
0000 011 X 保留用于将来的目的
0000 1XX X 高速模式主码
1111 1XX X 保留用于将来的目的
1111 0XX X 10 位节点地址

 

我该怎么做2C 工作?

I2C 数据在消息中传输,消息被分解为数据帧。读写协议包含具有节点二进制地址的地址帧和另一个数据帧,其中包含正在传输的数据、开始和停止条件、重复开始位、读/写位以及每个数据帧之间的确认/不确认位。

时序规格表

I2C时序表也很重要,因为它允许工程师设计与总线要求兼容的IC。每个数据速率都有自己的时序规范,主节点和节点必须遵守该规范才能正确传输数据。

表3显示了时序规格表上可用的符号和参数。

 

象征 参数 单位
f标准及校正实验所 标准与校正实验所时钟频率 千 赫
t高清(斯塔) 保持时间(重复)启动条件 微秒
t低 标准及校正实验所引脚的低周期 微秒
t高 高周期 SCL 引脚 微秒
t苏(斯塔) 重复启动条件的设置时间 微秒
t高清(达特) 数据保持时间 微秒
t苏(嘎嘎) 数据设置时间
tr SDA信号的上升时间
tf SDA 信号的下降时间
t苏(中) 停止条件的设置时间 微秒

 

电源管理

图3.一个I2C消息。

I2C 传输子协议

通过总线传输是读取或写入操作。读写协议建立在一系列子协议之上,例如开始和停止条件、重复起始位、地址字节、数据传输位和确认/不确认位。

启动条件

顾名思义,启动条件总是发生在传输开始时,并由主设备启动。这样做是为了唤醒总线上的空闲节点设备。在 SCL 线路从高电平切换到低电平之前,SDA 线从高电压电平切换到低电压电平。参见图 4。

重复启动条件

在不发出停止条件的情况下,可以在传输过程中重复启动条件。这是一种特殊情况,称为重复启动,用于改变数据传输方向、重复传输尝试、同步多个 IC,甚至控制串行存储器。参见图 5。

地址框

地址帧包含 7 位或 10 位序列,具体取决于可用性(请参阅数据手册)。参见图 6。

I2C没有像 SPI 那样的节点选择行,因此它需要另一种方式让节点知道数据正在发送到它,而不是另一个节点。它通过寻址来实现这一点。地址帧始终是新消息中起始位之后的第一帧。

main 将要与之通信的节点的地址发送到与其连接的每个节点。然后,每个节点将从主节点发送的地址与其自己的地址进行比较。如果地址匹配,它将一个低压ACK位发送回主电源。如果地址不匹配,节点将不执行任何操作,并且 SDA 线路保持高电平。

读/写位

地址帧末尾包含一个位,用于通知节点主节点是要向其写入数据还是从中接收数据。如果主设备要向节点发送数据,则读/写位处于低电压电平。如果主节点从节点请求数据,则位处于高压电平。参见图 7。

ACK/NACK 位

消息中的每个帧后跟一个确认/不确认位。如果成功接收到地址帧或数据帧,则接收设备将向发送方返回ACK位。

图例:对于下图,白框表示节点,而蓝色框表示主节点。参见图 8。

电源管理

数据框

主节点检测到来自节点的ACK位后,第一个数据帧就可以发送了。数据帧始终为 8 位长,并以最高有效位优先发送。每个数据帧后面紧跟一个ACK/NACK位,以验证该帧是否已成功接收。在发送下一个数据帧之前,主节点或节点(取决于发送数据的人)必须接收 ACK 位。参见图 9。

停止条件

发送完所有数据帧后,主节点可以向节点发送停止条件以停止传输。停止条件是在SCL线路上从低到高转换后,SDA线路上的电压从低到高转换,而SCL线路保持高电平。

在 SCL 线路从低电平切换到高电平后,SDA 线从低电压电平切换到高压电平。参见图 10。

I 的步骤2C 传输:写入

举个例子 I2C传输写入位置的单个位置,见图11。

步骤 1

主设备通过将SDA线从高压电平切换到低电压电平,然后再将SCL线从高电平切换到低电平,将启动条件发送到每个连接的节点。

步骤 2

主节点向每个节点发送它想要与之通信的节点的 7 位或 10 位地址以及写入位。

例如,0x2D 7 位地址。添加等效于 0 的写入位,它将0x5A。

步骤 3

每个节点将从主地址发送到的地址与其自己的地址进行比较。如果地址匹配,节点通过将 SDA 线拉低一位来返回 ACK 位。如果来自主节点的地址与节点自己的地址不匹配,则节点将 SDA 线保留为高电平。

通过在 SCL 的第九个脉冲期间将 SDA 线降低到低电平,对于 NACK,将 SDA 线浮动到高电平,可以实现 ACK。

步骤 4

主发送或接收数据帧。

步骤 5

每个数据帧传输完毕后,接收设备向发送方返回另一个ACK位,以确认成功接收该帧。

步骤 6

为了停止数据传输,主设备通过在将SDA切换为高电平之前将SCL切换为高电平来向节点发送停止条件。

电源管理

I 的步骤2C 数据传输:读取

步骤 1

主设备通过将SDA线从高压电平切换到低电压电平,然后再将SCL线从高电平切换到低电平,将启动条件发送到每个连接的节点。

步骤 2

主节点向每个节点发送它想要与之通信的节点的 7 位或 10 位地址以及写入位。

例如,0x2D 7 位地址。添加等效于 0 的写入位,它将0x5A。

步骤 3

每个节点将从主地址发送到的地址与其自己的地址进行比较。如果地址匹配,节点通过将 SDA 线拉低一位来返回 ACK 位。如果来自主节点的地址与节点自己的地址不匹配,则节点将 SDA 线保留为高电平。

步骤 4

在初始启动、寻址和确认之后,由于主设备已经知道其节点和要指向的地址,因此某些设备具有重复的启动条件来清理事务。

注意:仅供阅读之用!

步骤 5

主节点向每个节点发送它想要与之通信的节点的 7 位或 10 位地址以及读取位。

例如,0x2D 7 位地址。添加等于 1 的读取位,它将0x5B。

步骤 6

每个节点将从主地址发送到的地址与其自己的地址进行比较。如果地址匹配,节点通过将 SDA 线拉低一位来返回 ACK 位。如果来自主节点的地址与节点自己的地址不匹配,则节点将 SDA 线保留为高电平。

步骤 7

在ACK位之后,主节点接收来自节点的数据帧。

步骤 8

传输完每个数据帧后,主器件向发送方返回另一个 ACK 位以确认成功接收帧,或者如果读取请求已完成,则主器件返回 NACK。

步骤 9

为了停止数据传输,主设备通过在将SDA切换为高电平之前将SCL切换为高电平来向节点发送停止条件。

具有多个节点的单个主节点

因为I2C使用寻址,可以从单个主节点控制多个节点。对于 7 位地址,128 (27) 唯一地址可用。使用 10 位地址并不常见,但提供 1024 (210) 唯一地址。要将多个节点连接到单个主电源,请使用 4.7 kΩ 上拉电阻将它们连接到 V抄送.

具有多个节点的多个电源

多个主设备可以连接到单个节点或多个节点。当两个主设备尝试通过SDA线路同时发送或接收数据时,同一系统中多个主设备的问题就出现了。

为了解决这个问题,每个主线都需要在传输消息之前检测SDA线路是低还是高。

如果SDA线较低,则意味着另一条主线控制了总线,主线应等待发送消息。如果 SDA 线路很高,则传输消息是安全的。要将多个电源连接到多个节点,请使用图13所示的图表,使用4.7 kΩ上拉电阻将SDA和SCL线路连接到V抄送.

电源管理

图 13.连接多个节点的多个电源。

仲裁

几个I2C多主设备可连接同一I2C 总线并发运行。通过持续监控SDA和SCL的启动和停止条件,他们可以确定总线当前是否处于空闲状态。如果总线繁忙,则主设备延迟等待I2C 转换,直到停止条件指示公共汽车再次空闲。

但是,可能会发生两个主要设备同时开始传输的情况。在传输过程中,电源不断监控SDA和SCL。如果其中一个检测到SDA在应该高的时候很低,它会假设另一个主干处于活动状态并立即停止其传输。此过程称为仲裁。两个电源都生成一个起始位并继续传输。

如果电源碰巧选择了相同的逻辑电平,则不会发生任何事情。

一旦主电源试图施加不同的逻辑电平,主电源就会宣布信号低电平,从而宣布获胜;失败者检测到逻辑不匹配并放弃其传输。

花点时间欣赏一下这种安排的简单性和有效性:

获胜者继续传输而不会中断 - 没有损坏的数据,没有驱动程序争用,不需要重新启动事务。

从理论上讲,失败者可以在仲裁过程中监控节点地址,如果它恰好是寻址节点,则做出适当的响应。

如果竞争主线都从同一节点请求数据,仲裁过程不会不必要地中断任一事务 — 不会检测到不匹配,并且节点会将其数据输出到总线,以便多个主线可以接收它。

时钟拉伸

这也称为时钟同步。

注:I2C规范未指定时钟拉伸的任何超时条件,也就是说,任何设备都可以根据需要按住 SCL。

在I2C通信协议中,时钟速度和信号始终由主器件产生。由 I 产生的信号2C 主设备提供主节点连接之间的同步。

在某些情况下,节点或子节点未完全工作,需要在从主节点接收生成的时钟之前放慢速度。这是通过一种称为时钟拉伸的机制实现的。

在时钟拉伸期间,为了降低总线速度,允许节点按住时钟。在主侧,有必要在其高电平状态之后回读时钟信号。然后它必须等到线达到高状态。

带宽

虽然时钟延长是一种常见的做法,但对带宽方面有影响。在使用时钟延伸时,共享总线之间的总带宽可能会显著降低。即使使用这种技术,总线性能也必须可靠且快速。有必要涵盖使用时钟拉伸的估计效果,尤其是在 I2由多个设备共享的C总线。

时钟拉伸允许 I2C 节点设备强制主设备进入等待状态。节点设备在需要更多时间来管理数据时(例如,存储接收的数据或准备传输另一个数据字节)时,可能会执行时钟延伸。这通常发生在节点设备接收并确认一个字节的数据之后。

其中I2C节点设备需要时钟延长?

是否需要时钟拉伸取决于节点设备的功能。下面是两个示例:

处理设备(如微处理器或微控制器)可能需要额外的时间来处理中断、接收和管理数据以及执行适当的功能。

更简单的设备(如EEPROM)不在内部处理数据,因此不需要时钟拉伸来执行其任何功能。

I2C数据手册示例概述

根据不同的公司和制造商,在创建数据表方面有不同的方法。首先,图13显示了一个示例数据手册和基本数据手册2C 详细信息,包括寄存器和电子规格。

电源管理

图 15.微控制器内存图。

表 4 显示了最常用的 I2C 寄存器。名称和描述可能因数据手册而异,但功能和用法是通用的。

 

名字 描述
I2C_ADDR1 主地址字节 1
I2C_ADDR2 主地址字节 2
I2C_BYT 起始字节
I2C_ID 节点地址设备 ID
I2C_MCTL 主控
I2C_MRX 主接收数据
I2C_SCTL 节点控制
I2C_SRX 节点接收
I2C_STAT 主和节点先进先出状态

 

我创造2C 可能因使用情况而异。表 5 显示了基本 I 的样本2C 驱动程序 API 要求。

 

主要 节点
初始化
 
Tx 处理器 Tx 处理器
接收处理器 接收处理器
事件中断
 
错误中断
 

 

SMBus

众所周知,SMBus 用于需要关键参数监控的应用。它最常用于计算机主板和嵌入式系统应用。它具有温度、电源电压、风扇监视器和/或控制集成芯片的附加监控规范。

SMBus 是一条 2 线总线,类似于 I2飞利浦在1980年代开发的C总线。两个主要信号是时钟或SMBCLK和数据或SMBDAT。我2C 引物和 SMBus 相互兼容,但存在显着差异,例如:

SMBus逻辑电平门限是固定的,与器件的电源电压不成比例。这允许具有不同电源电压的器件在同一引物上工作。例如,一个 SMBus 可能具有由 1.8 V、3.3 V 和 5 V 供电的设备。

它们都以高达 100 kHz 的相同速度运行,但 I2C 引物有 400 kHz 和 2 MHz 版本。

SMBus 提供最小时钟速度,并限制时钟在一个事务中可能延长的数量。违反超时限制会导致所有 SMBus 设备重置其 I/O 逻辑以允许总线重新启动。这增强了总线的鲁棒性。

两者的超时也不同。我2C 引物没有超时,而 SMBus 有超时 — 对于 10 kHz 的最小时钟速度,请考虑 35 ms。

数据包错误检查 (PEC) 最初是为 SMBus 定义的。在每个事务的末尾添加一个数据包错误代码字节。

剩下的一些差异涉及传输类型、警报线、挂起线以及断电或上电。

SMBus 设备每次收到时都必须确认 (ACK) 自己的地址,这是一项明确要求,无论设备可能正在执行其他操作。这确保了主设备可以准确地确定总线上哪些设备处于活动状态。

所有 SMBus 事务都通过指定的 SMBus 协议之一执行。

SMBus 包括一个可选信号 SMBALERT#,节点设备可以使用该信号快速通知主主机或系统主机它具有主主机的信息,例如报告故障情况。

电源管理

图 16.SMBus 拓扑。

SMBus 上拉电路

电源管理

图 17.SMBus 上拉电路。

中小企业地址

SMBus 地址的长度为 7 个二进制位,通常表示为 4 位,后跟 3 位,后跟字母 b,例如 0001 110b。这些地址占据总线上 8 位字段的高 7 位。但是,此字段的低位具有另一个语义含义,该含义不是 SMBus 地址的一部分。

电源管理

图 18.节点地址。

7位目标地址从主设备发送到总线上的一个或多个设备(例如常规呼叫地址)。

请注意,开始和停止条件是转换,而不是位,并且在符号上方显示时没有位计数数字。当显示在事务图中时,重复开始也是一个过渡,而不是一个位,并且在符号上方显示没有位计数。

电源管理

图 19.SMBus 消息。

SMBus 定时测量

 

象征 参数 单位
f中小企业 SMBus工作频率 千 赫
t布夫 停止和启动之间的总线空闲时间 微秒
T高清-STA (重复)启动条件后的保持时间 微秒
T苏斯塔 重复启动条件设置时间 微秒
t苏(中) 停止条件设置时间 微秒
t高清(达特) 数据保持时间
t苏(嘎嘎) 数据设置时间
t超时 检测时钟低超时 女士
t低 时钟低周期 微秒
t高 时钟高电平周期 微秒

 

PMBus:重新定义电源管理

除了SMBus之外,还有一个变体,PMBus,它是一种开放标准的电源管理协议。这种灵活且高度通用的标准允许基于模拟和数字技术的设备之间进行通信,并提供真正的互操作性,这将降低设计复杂性并缩短电源系统设计人员的上市时间。

PMBus 用于具有电源控制和管理组件的电源的数字管理。它具有支持电源管理要求的命令和结构。这意味着我2C primer 和 PMBus 在电气要求和命令语义上兼容且可互操作。

电源管理中的基本参数之一是监控过压电平,PMBus 提供了用于设置和读取它的命令。通过添加到 I 的可用功能2C primer 和 SMBus,PMBus 充当现有标准之上的协议层,尤其是 SMBus。

I2C规范仅描述了 2 线总线的物理层、时序和流量控制。我2C 规范不描述消息的格式(如 SMBus 协议),也不描述消息的内容。

PMBus 规范是一个完整的电源管理协议。它包括如何将位和字节从一个设备获取到另一个设备(即传输);它还描述了一种命令语言,该语言赋予这些位和字节以意义。

寻址

对于冗余系统,一旦电源安装在系统中,最多有三个信号来设置电源的地址位置:地址 2、地址 1 和地址 0。对于非冗余系统,电源设备地址位置应为 B0h。

硬件

电源中的设备应符合 SMBus 2.0 高功率规范2五DD-基于电源和驱动器(对于 VDD= 3.3 V)。该总线的工作电压为3.3 V。

电源

电源中的设备应符合 SMBus 2.0 高功率规范2C 基于 VDD 的电源和驱动器(对于 VDD= 3.3 V)。该总线的工作电压为3.3 V。

引体向上

只有弱上拉电阻应位于电源内部的 SCL 或 SDA 线路上。主上拉电阻由系统提供,可连接到3.3 V或5 V。对于系统设计,主上拉电阻应位于电源外部,并从备用轨获取电源。

数据速度

电源中的 PMBus 设备应以 100 kbps SMBus 全速运行,并尽可能避免使用时钟拉伸,因为它会减慢总线速度。

总结

表 8 提供了规格方面的一般视图和摘要:信号、定时和电气2C Primer、SMBus(用于高功率和低功率)和 PMBus。

I2C Primer、SMBus 和 PMBus 相关?

SMBus 最初是为了促进电池管理系统而开发的,它使用 I2C硬件,但增加了二级软件,最终允许设备热插拔而无需重新启动系统。PMBus 通过定义一组专门设计用于管理电源转换器的设备命令来扩展 SMBus,公开设备属性,例如测量的电压、电流、温度等。一般来说,I2C Primer、SMBus 和 PMBus 设备可以共享总线,不会出现任何重大问题。

I2C、SMB、PMB 优势

仅使用两根电线

带交流/不适用钻头

众所周知的协议

支持多个主设备和多个节点

硬件没有UART那么复杂

广泛使用的方法

数据传输速率比 SPI 慢

数据框的大小限制为 8 位

实现比 SPI 更复杂的硬件

电源管理

图 20.SMBus 定时测量。

 

使用的地址 主寻址用于大多数具有两个寻址引脚的服务器电源 如果电源上提供了三个寻址引脚,则为其他地址
系统寻址地址2/地址1/地址0 0/0/0 0/0/1 0/1/1 0/1/1 1/0/0 1/0/1 1/1/0 1/1/1
PMBus 设备读取地址 B0h/B1h B2h/B3h B4小时/B5小时 B6小时/B7小时 B8h/B9h BCh/BDh 贝/贝赫

 

使用案例

传感器读数

传感器写入

EEPROM,温度传感器,触摸屏,接近

传输和控制用户指示的操作

与多个微控制器通信

消费类电子产品

系统管理

电源管理

调试

 

规范 我2C 引物 SMBus
高功率| 低功耗
PMBus
信号 数据包错误检查
(可选) SMBALERT
(可选)

块大小限制
— —



 
— —

32 字节
— —

32 字节
— —

255 字节
定时 数据速率:
标准模式 快速模式 快速模式增强版 高速

模式 时钟

速度

总线超时
总线主请求延迟
(最小值) SCL 保持时间(最大值) 数据保持时间
(最小值)

 
100 kbps 400 kbps

1 Mbps 3.4 Mbps
0 Hz 至
3.4 MHz
— — —



 
100 kbps
— — — —
10
kHz 至 100 kHz
25 毫秒至 35 毫秒 50 μs



2 毫秒

300 ns
 
100 kbps
— — — —
10
kHz 至 100 kHz
25 毫秒至 35 毫秒 50 μs



2 毫秒

300 ns
 
100 kbps 400 kbps

— — 10 kHz 至 400 kHz
25 毫秒至 35 毫秒 50 微秒 —


2 毫秒

300 纳秒
 
电气 每总线段电容负载(最大值) 上升时间(最大值) 0.4 V 时的上拉电流(最大值) 每个器件的漏电流(最大值) VIL 输入逻辑 低阈值(最大值) VIH 输入逻辑高阈值(最小值) VOL 输出逻辑 低阈值(最大值)





 
400 pF
100 kHz 时为 1 μs,400 kHz
时为 300 ns 3 mA(标准和快速模式)
±10 μA
0.3 VDD或 1.5 V 0.7 V
抄送或 3 V 0.4 V
 
400 pF
1 微秒
4毫安 ±10 微安

0.8 V 2.1 V 2.4 V


 

1 μs
350 μA ±5 μA

0.8 V 2.1 V 0.4 V

 
400 pF
100 kHz 时为 1 μs,400 kHz
时为 300 ns 4 毫安
±10 μA
0.8 V 2.1 V 0.4 V

 

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分