news 2026/10/1 14:42:37

OpenHarmony I2C驱动开发实战:设备树配置、HDI接口与排障指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenHarmony I2C驱动开发实战:设备树配置、HDI接口与排障指南

1. 从一根线说起:I2C 在 OpenHarmony 里到底扮演什么角色

搞 OpenHarmony 设备开发的朋友,绕不开的一个话题就是外设接入。你拿到一块 RK3568 或者 Hi3861 的开发板,想把温湿度传感器、OLED 屏、EEPROM 这些玩意儿接上去,第一个撞上的大概率就是 I2C 总线。为什么?因为它引脚少、协议简单、挂载设备多,两根线就能拉一串外设,性价比极高。

但简单归简单,真到了 OpenHarmony 的 HDF 驱动框架里,I2C 的用法和裸机开发完全不是一回事。裸机时代你可能直接操作寄存器,或者调个 HAL 库函数就完事了。到了 OpenHarmony 这边,你得理解 HDF 驱动模型、设备树配置、HDI 接口层、内核态与用户态的交互方式。这一套东西串起来,新手很容易懵。

这篇内容就是把我自己在 OpenHarmony 上折腾 I2C 的完整经验梳理出来。从总线基本原理、设备树怎么写、驱动怎么注册、到实际排障时怎么用逻辑分析仪抓波形,全部覆盖。不管你是刚接触 OpenHarmony 驱动开发的新手,还是从 STM32 裸机转过来的老手,都能从中找到可以直接抄作业的部分。

核心关键词:I2C 总线、OpenHarmony、设备树、排障、HDI。这几个词贯穿全文,我会围绕它们把整个链路讲透。

2. I2C 总线核心原理快速回顾

2.1 两根线凭什么能挂 100 多个设备

I2C 全称 Inter-Integrated Circuit,中文叫集成电路总线。物理层就两根线:SDA(串行数据线)和SCL(串行时钟线)。两根线都是开漏输出,所以必须接上拉电阻,典型值 4.7kΩ 到 10kΩ 之间。上拉电阻的作用是在没有设备拉低总线时,把电平拉到高电平,保证总线空闲状态是高的。

为什么两根线能挂这么多设备?核心在于设备地址寻址。每个 I2C 从设备都有一个 7 位(或 10 位)地址,主机发起通信时,第一帧就是地址帧,包含 7 位地址加 1 位读写方向位。总线上所有从设备都会收到这个地址,但只有地址匹配的那个才会响应。这就像一条街上有很多户人家,邮递员喊门牌号,只有对应门牌号的人出来收信。

标准模式下 I2C 速率 100kbps,快速模式 400kbps,高速模式能到 3.4Mbps。OpenHarmony 里常见的传感器、OLED 屏大多跑在 100k 或 400k 模式。

2.2 时序图不用背,但要理解三个关键信号

很多人一看到 I2C 时序图就头大,其实你只需要抓住三个关键信号:

  • 起始条件(Start):SCL 为高电平时,SDA 从高变低。这是通信开始的标志。
  • 停止条件(Stop):SCL 为高电平时,SDA 从低变高。这是通信结束的标志。
  • 应答信号(ACK/NACK):每传输完 8 位数据,接收方在第 9 个时钟周期把 SDA 拉低表示 ACK,保持高表示 NACK。

数据传输过程中,SDA 的电平变化必须发生在 SCL 为低电平期间,因为 SCL 为高时 SDA 变化会被误认为是起始或停止条件。这是 I2C 协议最容易踩的坑之一。

注意:如果你用软件模拟 I2C,时序控制不精确,很容易在 SCL 高电平期间误改 SDA,导致总线锁死。硬件 I2C 控制器则不存在这个问题。

2.3 硬件 I2C 和软件 I2C 怎么选

在 OpenHarmony 开发中,你会面临这个选择。硬件 I2C 用的是 SoC 内置的 I2C 控制器,优点是速率稳定、不占 CPU、时序精准。软件 I2C 是用 GPIO 模拟的,优点是引脚灵活、不受控制器数量限制,缺点是速率低、占 CPU、时序容易受中断干扰。

我的建议很直接:能用硬件 I2C 就用硬件 I2C。RK3568 这类芯片一般有 6 个以上的硬件 I2C 控制器,基本够用。只有当你需要接大量低速设备、硬件控制器不够用时,才考虑软件 I2C 扩展。OpenHarmony 的 HDF 框架对两种方式都支持,但硬件 I2C 的驱动成熟度明显更高。

3. OpenHarmony 下 I2C 驱动框架拆解

3.1 HDF 驱动模型里的 I2C 长什么样

OpenHarmony 的驱动框架叫 HDF(Hardware Driver Foundation),它把驱动分成内核态和用户态两部分。I2C 驱动涉及的核心模块包括:

  • I2C Core:提供统一的 I2C 控制器和设备管理接口,屏蔽不同 SoC 的差异。
  • I2C Controller Driver:具体 SoC 的 I2C 控制器驱动,比如 RK3568 的 I2C 控制器驱动。
  • I2C Device Driver:挂载在 I2C 总线上的具体设备驱动,比如 SSD1306 OLED 驱动、BH1750 光照传感器驱动。

这种分层设计的好处是,你写一个 SSD1306 驱动,换一个 SoC 平台,只要 I2C Core 和 Controller Driver 适配好了,设备驱动几乎不用改。这就是 HDF 框架的价值所在。

3.2 设备树:I2C 设备的身份证

在 OpenHarmony 里,I2C 设备的硬件信息不是写死在代码里的,而是通过**设备树(Device Tree)**描述的。设备树的作用是告诉内核:这个 I2C 控制器在哪个物理地址、时钟频率多少、总线上挂了哪些设备、每个设备的地址是多少。

一个典型的 I2C 设备树节点长这样:

i2c3: i2c@fe5c0000 { compatible = "rockchip,rk3568-i2c"; reg = <0x0 0xfe5c0000 0x0 0x1000>; interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru CLK_I2C3>, <&cru PCLK_I2C3>; clock-names = "i2c", "pclk"; clock-frequency = <400000>; pinctrl-names = "default"; pinctrl-0 = <&i2c3m0_xfer>; status = "okay"; ssd1306: oled@3c { compatible = "solomon,ssd1306"; reg = <0x3c>; status = "okay"; }; };

这里有几个关键点:

  • clock-frequency决定总线速率,400000 就是 400kHz。
  • reg = <0x3c>是从设备地址,SSD1306 的默认地址就是 0x3C。
  • status = "okay"表示启用这个节点,改成"disabled"就关闭。
  • pinctrl-0指定引脚复用配置,这个必须和硬件原理图对上。

实操心得:设备树里 I2C 控制器节点的status默认可能是"disabled",你必须手动改成"okay",否则驱动加载了也找不到设备。这个坑我踩过不止一次。

3.3 HDI 接口层:用户态怎么访问 I2C

OpenHarmony 的 HDI(Hardware Device Interface)层是用户态访问硬件的桥梁。对于 I2C,HDI 提供了一组标准接口,包括:

  • I2cOpen():打开 I2C 控制器
  • I2cClose():关闭 I2C 控制器
  • I2cTransfer():执行 I2C 数据传输

用户态的应用程序或者服务通过这些接口,就能读写 I2C 设备,不需要直接操作内核驱动。这种设计提高了系统的安全性和可维护性。

在实际项目中,你可能会用到的 HDI 接口定义在drivers/peripheral/i2c目录下。编译时需要确保对应的 HDI 服务已经启动,否则调用会返回失败。

4. 手把手实操:从零接入一个 I2C 设备

4.1 硬件准备与接线检查

假设我们要在 RK3568 开发板上接入一个 SSD1306 OLED 屏(0.96 寸,128x64 分辨率)。硬件准备清单:

  • RK3568 开发板一块
  • SSD1306 OLED 模块一个
  • 杜邦线若干
  • 逻辑分析仪(可选,但排障时强烈建议备一个)

接线对应关系:

OLED 引脚开发板引脚说明
VCC3.3V供电,注意不要接 5V
GNDGND共地
SCLI2C3_SCL时钟线
SDAI2C3_SDA数据线

接线完成后,先用万用表测一下 SDA 和 SCL 对地的电阻,正常应该在 4.7kΩ 左右(上拉电阻)。如果测出来是 0Ω,说明短路了,赶紧检查接线。

4.2 设备树配置实战

在 OpenHarmony 的 SDK 中,设备树文件通常位于device/rockchip/rk3568目录下。你需要找到对应的dts文件,添加 I2C 设备节点。

第一步,确认 I2C3 控制器的引脚复用配置。在rk3568-pinctrl.dtsi中找到:

i2c3 { i2c3m0_xfer: i2c3m0-xfer { rockchip,pins = <4 RK_PB1 1 &pcfg_pull_none_smt>, <4 RK_PB2 1 &pcfg_pull_none_smt>; }; };

这表示 I2C3 使用的是 GPIO4_B1 和 GPIO4_B2 这两个引脚,功能复用为 I2C。

第二步,在板级设备树文件中启用 I2C3 并添加 OLED 节点:

&i2c3 { status = "okay"; clock-frequency = <400000>; pinctrl-names = "default"; pinctrl-0 = <&i2c3m0_xfer>; ssd1306: oled@3c { compatible = "solomon,ssd1306"; reg = <0x3c>; status = "okay"; }; };

第三步,编译设备树并烧录:

./build.sh --product-name rk3568 --build-target kernel

编译完成后,用烧录工具把新的 boot 镜像烧进去。

4.3 驱动代码编写要点

OpenHarmony 的 I2C 设备驱动需要实现HdfDriverEntry结构体,并在Bind、Init、Release三个回调函数中完成设备初始化、资源申请和释放。

一个简化的 SSD1306 驱动初始化流程:

static int32_t Ssd1306Init(struct HdfDeviceObject *device) { int32_t ret; struct Ssd1306Dev *dev = NULL; dev = (struct Ssd1306Dev *)OsalMemCalloc(sizeof(*dev)); if (dev == NULL) { HDF_LOGE("Ssd1306Init: malloc dev fail"); return HDF_ERR_MALLOC_FAIL; } dev->i2cHandle = I2cOpen(SSD1306_I2C_BUS_NUM); if (dev->i2cHandle == NULL) { HDF_LOGE("Ssd1306Init: open i2c fail"); OsalMemFree(dev); return HDF_FAILURE; } ret = Ssd1306Reset(dev); if (ret != HDF_SUCCESS) { HDF_LOGE("Ssd1306Init: reset fail"); I2cClose(dev->i2cHandle); OsalMemFree(dev); return ret; } device->priv = dev; return HDF_SUCCESS; }

关键点说明:

  • I2cOpen()的参数是 I2C 总线编号,必须和设备树里的控制器编号对应。
  • 初始化失败时一定要释放已申请的资源,否则会造成内存泄漏。
  • HDF_LOGE是 OpenHarmony 的日志宏,排障时非常有用。

4.4 编译与部署

驱动代码写完后,需要在BUILD.gn中配置编译目标:

ohos_shared_library("ssd1306_driver") { sources = [ "ssd1306.c", "ssd1306_ops.c", ] include_dirs = [ "//drivers/framework/include/core", "//drivers/framework/include/utils", "//drivers/peripheral/i2c/interfaces/include", ] deps = [ "//drivers/framework/support/platform:i2c_core", ] }

编译整个系统:

./build.sh --product-name rk3568

烧录后,通过hdc shell进入设备,用hilog查看驱动加载日志。如果看到Ssd1306Init: open i2c fail,说明 I2C 控制器没打开成功,需要检查设备树配置。

5. I2C 排障实战:从波形到日志的完整排查链路

5.1 排障第一步:确认总线是否活着

I2C 通信失败,第一步不是看代码,而是确认总线物理层是否正常。用逻辑分析仪抓 SDA 和 SCL 的波形,观察以下几点:

  • 总线空闲时,SDA 和 SCL 是否都是高电平?如果有一个是低,说明总线被拉死了。
  • 发起通信时,是否有起始条件?SCL 高时 SDA 是否从高变低?
  • 时钟频率是否和配置一致?如果差太多,可能是时钟源配置错误。

如果逻辑分析仪抓不到任何波形,说明主机根本没发起通信。这时候要检查驱动是否加载成功、I2C 控制器是否使能。

5.2 常见问题速查表

现象可能原因排查方法
驱动加载失败设备树 status 为 disabled检查 dts 中 status 属性
I2cOpen 返回 NULLI2C 控制器未注册查看 hilog 中 I2C Core 日志
通信无应答(NACK)从设备地址错误用逻辑分析仪看地址帧
数据读写错误寄存器地址不对对照芯片手册确认寄存器映射
总线锁死SDA 被从设备拉低断电重启或发送 9 个时钟脉冲
速率不匹配clock-frequency 配置错误检查设备树和实际波形

5.3 总线锁死的急救方法

I2C 总线锁死是常见问题,表现为 SDA 一直被拉低,主机无法发起新的通信。原因通常是通信过程中从设备复位或异常,导致它一直等待时钟信号。

急救方法有两种:

第一种,发送 9 个时钟脉冲。主机手动切换 SCL 引脚为 GPIO 输出,发送 9 个时钟周期,让从设备把剩余数据发完,然后发送停止条件。这个方法在 OpenHarmony 里可以通过操作 GPIO 实现。

第二种,硬件复位。直接给从设备断电再上电,简单粗暴但有效。如果从设备支持软复位,也可以通过写复位寄存器实现。

实操心得:在驱动初始化时加一个总线恢复流程,先检测 SDA 是否被拉低,如果是就发送时钟脉冲恢复。这个习惯能省掉很多现场调试的麻烦。

5.4 逻辑分析仪抓包分析实例

假设我们用逻辑分析仪抓到了一段波形,解码后发现:

  • 起始条件正常
  • 地址帧是0x3C写方向,从设备回了 ACK
  • 第二个字节是0x00,从设备回了 ACK
  • 第三个字节是0xAE,从设备回了 ACK
  • 停止条件正常

这说明通信本身没问题,OLED 也正常应答了。如果屏幕还是不亮,那问题可能出在初始化序列不完整,或者供电不足。SSD1306 的初始化序列有十几条命令,少一条都可能不显示。

6. 进阶话题:多设备挂载与地址冲突处理

6.1 同一总线挂多个设备的注意事项

一条 I2C 总线可以挂多个设备,但前提是地址不能冲突。常见的 I2C 设备地址:

  • SSD1306 OLED:0x3C 或 0x3D
  • BH1750 光照传感器:0x23 或 0x5C
  • AT24C02 EEPROM:0x50 到 0x57
  • MPU6050 陀螺仪:0x68 或 0x69

如果两个设备地址相同,你有几个选择:换一个地址可配置的设备、用 I2C 多路复用器(如 TCA9548A)扩展总线、或者把其中一个设备挂到另一条 I2C 总线上。

6.2 I2C 多路复用器的设备树配置

TCA9548A 是一个 8 通道 I2C 多路复用器,它本身也挂在 I2C 总线上,地址通常是 0x70 到 0x77。设备树配置示例:

i2c3: i2c@fe5c0000 { status = "okay"; clock-frequency = <400000>; tca9548a: mux@70 { compatible = "ti,tca9548a"; reg = <0x70>; status = "okay"; channel0: channel@0 { reg = <0>; #address-cells = <1>; #size-cells = <0>; ssd1306: oled@3c { compatible = "solomon,ssd1306"; reg = <0x3c>; }; }; channel1: channel@1 { reg = <1>; #address-cells = <1>; #size-cells = <0>; bh1750: light@23 { compatible = "rohm,bh1750"; reg = <0x23>; }; }; }; };

这样,SSD1306 挂在通道 0,BH1750 挂在通道 1,即使它们地址不同,也实现了物理隔离,避免了相互干扰。

6.3 0.9 寸 OLED 的兼容性坑

0.9 寸 OLED 和 0.96 寸 OLED 虽然都是 SSD1306 驱动芯片,但初始化序列有差异。0.9 寸屏的对比度设置、扫描方向、电荷泵配置都可能不同。如果你直接套用 0.96 寸的初始化代码,屏幕可能显示异常或者完全不亮。

解决办法是找到 0.9 寸屏对应的初始化序列,重点检查以下几个命令:

  • 0xDA(COM 硬件配置):0.9 寸可能需要不同的 COM 引脚配置
  • 0x8D(电荷泵设置):确保电荷泵使能
  • 0xA8(多路复用率):0.9 寸通常是 0x3F(64 行)
  • 0xD3(显示偏移):根据实际屏幕调整

实操心得:买 OLED 模块时一定要问卖家要初始化代码或者数据手册,不同批次的屏可能用的驱动 IC 都不一样。我遇到过标称 SSD1306 实际是 SH1106 的情况,初始化序列完全不兼容。

7. 性能优化与稳定性提升

7.1 降低 I2C 通信失败率的几个手段

I2C 通信失败率高的原因通常有三个:上拉电阻不合适、总线电容过大、时钟频率过高。

上拉电阻的选择:标准模式 100kHz 可以用 10kΩ,快速模式 400kHz 建议 4.7kΩ,高速模式建议 2.2kΩ 甚至更低。电阻越小,上升沿越陡,但功耗越大。

总线电容:I2C 规范规定总线电容不能超过 400pF。每增加一个设备,电容就会增加。如果挂的设备太多,通信会变得不稳定。这时候可以考虑用 I2C 缓冲器或者多路复用器来隔离。

时钟频率:如果通信距离较长(超过 30cm),建议降低到 100kHz。长走线会导致信号反射和衰减,高速率下误码率会明显上升。

7.2 驱动层的重试机制

在驱动代码中加入重试机制,可以显著提高通信成功率。比如:

#define I2C_RETRY_TIMES 3 static int32_t Ssd1306WriteWithRetry(struct Ssd1306Dev *dev, uint8_t *buf, uint32_t len) { int32_t ret; int32_t retry = 0; while (retry < I2C_RETRY_TIMES) { ret = I2cTransfer(dev->i2cHandle, buf, len, NULL, 0); if (ret == HDF_SUCCESS) { return HDF_SUCCESS; } HDF_LOGW("Ssd1306Write: retry %d, ret=%d", retry, ret); OsalUDelay(1000); retry++; } return HDF_FAILURE; }

重试间隔建议 1ms 左右,太短了从设备还没恢复,太长了影响实时性。

7.3 电源管理对 I2C 的影响

在低功耗场景下,系统进入休眠后 I2C 控制器可能会断电,导致唤醒后通信失败。解决办法是在休眠前保存 I2C 控制器状态,唤醒后重新初始化。

OpenHarmony 的电源管理框架提供了HdfDeviceSuspend和HdfDeviceResume回调,你可以在Resume中重新初始化 I2C 控制器:

static int32_t Ssd1306Resume(struct HdfDeviceObject *device) { struct Ssd1306Dev *dev = (struct Ssd1306Dev *)device->priv; if (dev->i2cHandle != NULL) { I2cClose(dev->i2cHandle); } dev->i2cHandle = I2cOpen(SSD1306_I2C_BUS_NUM); if (dev->i2cHandle == NULL) { HDF_LOGE("Ssd1306Resume: reopen i2c fail"); return HDF_FAILURE; } return Ssd1306Reset(dev); }

这个细节在消费类电子产品中特别重要,很多设备休眠唤醒后外设不工作,就是电源管理没处理好。

8. 调试工具链与日志分析技巧

8.1 hilog 日志过滤与定位

OpenHarmony 的日志系统 hilog 是排障的核心工具。查看 I2C 相关日志:

hilog | grep -i "i2c\|ssd1306"

如果日志太多,可以按级别过滤:

hilog -L E # 只看错误级别 hilog -L W # 看警告及以上

在驱动代码中合理使用日志级别:HDF_LOGE用于错误,HDF_LOGW用于警告,HDF_LOGI用于关键流程,HDF_LOGD用于调试细节。发布版本中应该关闭HDF_LOGD,避免日志刷屏。

8.2 用逻辑分析仪解码 I2C 协议

逻辑分析仪是 I2C 排障的利器。以 Saleae 为例,抓取 SDA 和 SCL 信号后,添加 I2C 协议分析器,设置正确的时钟频率和地址,就能自动解码出每次通信的地址、数据和 ACK/NACK。

解码结果中重点关注:

  • 地址帧是否得到 ACK?如果 NACK,说明从设备没响应。
  • 寄存器地址是否正确?对照芯片手册确认。
  • 数据字节是否符合预期?比如初始化命令是否完整发送。

如果逻辑分析仪显示通信正常但设备不工作,问题就在设备本身或者初始化序列,不在 I2C 总线。

8.3 常见内核报错解读

OpenHarmony 内核日志中常见的 I2C 报错:

  • i2c i2c-3: timeout waiting for bus ready:总线忙超时,通常是 SDA 或 SCL 被拉死。
  • i2c i2c-3: sendbytes: NAK bailout:从设备 NACK,地址错误或设备未就绪。
  • i2c i2c-3: controller timed out:控制器超时,可能是时钟配置错误。
  • i2c i2c-3: probe failed:设备探测失败,检查设备树和硬件连接。

看到这些报错,先查硬件,再查设备树,最后查驱动代码。这个顺序能帮你快速定位问题。

9. 从 I2C 到其他总线的扩展思考

I2C 用熟了之后,你会发现很多概念是相通的。SPI 总线也是主从架构,但它是全双工、四根线、速率更高。CAN 总线用于汽车电子,有差分信号和仲裁机制。UART 是点对点异步通信,没有时钟线。

在 OpenHarmony 的 HDF 框架里,这些总线都有对应的 Core 层和 Controller Driver。你掌握了 I2C 的驱动开发流程,切换到 SPI 或者 UART 时,大部分概念可以直接迁移。区别在于协议细节和寄存器操作。

比如 SPI 的设备树配置和 I2C 类似,只是多了spi-max-frequency和spi-cpol、spi-cpha这些参数。CAN 总线则更复杂,涉及波特率、采样点、过滤器配置。

我个人建议是先把 I2C 吃透,因为它是嵌入式开发中最常用的总线之一,而且协议简单、调试工具成熟。I2C 搞定了,再去看 SPI、UART,会发现上手快很多。

10. 一些踩坑之后的真心话

I2C 这东西,说简单是真简单,两根线的事。说坑多也是真多,硬件、设备树、驱动、电源管理,任何一个环节出问题都能让你调一整天。

我自己的经验是:先抓波形,再看日志,最后改代码。这个顺序不能反。很多人一上来就怀疑代码,改了半天发现是杜邦线接触不良。逻辑分析仪几百块钱的投资,能帮你省下几十个小时的调试时间,绝对值。

设备树配置一定要和硬件原理图对照,引脚复用、上拉电阻、设备地址,一个都不能错。OpenHarmony 的 HDF 框架虽然抽象层次高,但底层还是那些东西,基础扎实了,上层怎么变都不慌。

最后说一个细节:I2C 总线上挂的设备越多,总线电容越大,通信越容易出问题。如果项目里要挂五六个 I2C 设备,建议提前规划好多路复用方案,别等到板子打回来了才发现地址冲突或者总线带不动。硬件设计阶段多花一小时,调试阶段能省一天。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 14:42:26

GLM Coding Plan 全量上线 GLM-5.3:TaoToken 统一 Key 接入与验证清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 14:42:20

从一张普通人脸到直播画面:视频美颜SDK经历了哪些处理?

在直播、视频社交、短视频等场景中&#xff0c;“美颜”通常被认为只是给视频增加一个滤镜。但从软件开发的角度来看&#xff0c;一套完整的视频美颜SDK实际上涉及视频采集、人脸检测、关键点定位、图像分割、纹理处理、几何变形以及实时渲染等多个环节。如果把摄像头输出的一帧…

作者头像 李华
网站建设 2026/10/1 14:42:02

SSM高职教学分析系统源码部署与可视化分析实战指南

简介&#xff1a;面向高职院校师生及Java初学者&#xff0c;这份源码工程完整实现了基于SSM框架的可视化教学分析系统&#xff0c;涵盖前后端、MySQL数据库及说明文档&#xff0c;可用于毕业设计、课程设计或SSM整合开发练习。包体共909个文件&#xff0c;约9.21MB&#xff0c;…

作者头像 李华
网站建设 2026/10/1 14:40:58

ThinkSystem 服务器英韧硬盘固件更新,Broadcom RAID 卡下升级完整步骤

企业运维工作中&#xff0c;服务器 SSD 硬盘微码&#xff08;固件&#xff09;升级是一项很重要的维护工作&#xff0c;修复已知 bug、提升稳定性、规避潜在硬盘故障风险。针对联想 WR5220 G3 服务器搭载英韧 ESS5600 SATA SSD 场景&#xff0c;很多运维同学会困惑&#xff1a;…

作者头像 李华
网站建设 2026/10/1 14:40:25

MEMS力触觉传感器的硬核科技:硅应变片与玻璃微熔工艺

传统六维力传感器绝大多数采用金属箔应变片和胶结工艺制备&#xff0c;即通过胶水将金属箔应变片粘接在弹性体上。长时间贮存和使用后&#xff0c;胶结工艺易老化、松动&#xff0c;这个问题数十年无人解决。而精一微感选择了一条更具挑战和前景的技术路线&#xff1a;MEMS 硅应…

作者头像 李华