MR25H40CDF与STM32F415RG:SPI MRAM替代Flash的实战存储方案
做嵌入式这几年我在不少工控项目里被存储方案磨得没脾气既要掉电保存又要频繁擦写速度还得跟得上现场节奏最怕写着写着把 Flash 写穿。后来在电机驱动器项目里用了 MR25H40CDF 配 STM32F415RG 这套组合算是把这个问题一次解决了。MR25H40CDF 是 Everspin 的 4Mbit SPI MRAM磁阻随机存储器掉电不丢数据、写入前不用擦除STM32F415RG 是 ST 的 Cortex-M4F 主控主频 168MHz资源够用内核生态成熟。这套方案适合做参数存储、运行日志、故障记录、标定数据这类需要高频写入的嵌入式场景对正在给存储选型、写驱动或者调 SPI 时序的软硬件工程师都有参考价值。这篇文章我就把选型理由、硬件连接、驱动实现、掉电保护和实际踩过的坑完整捋一遍。1. 为什么把 MR25H40CDF 和 STM32F415RG 放在一起1.1 先认识这颗“掉电不丢还能随便写”的存储芯片MR25H40CDF 是 Everspin 的 4Mbit MRAMSPI 接口3.3V 供电折算下来是 512KB 容量。MRAM 的核心存储单元是磁隧道结MTJ靠磁性状态存数据不是靠电容上的电荷。所以它天然具备几个嵌入式工程师梦寐以求的特性掉电后数据长期保持写入不需要先擦除没有 Flash 那种“越擦越薄”的寿命焦虑。这颗芯片支持 SPI Mode 0 和 Mode 3时钟上限在 40MHz 左右工业级温度范围标称 -40℃ 到 85℃。写入寿命在 10^12 次量级数据保持按官方指标能到 20 年以上。最爽的一点是它支持按字节随机写入你可以把一整块地址空间当成一个“掉电不丢的 RAM”来用什么扇区、页对齐、先擦后写这些概念统统不存在。1.2 和 EEPROM、NOR Flash、FRAM 硬碰硬比一轮存储方案这东西光看参数没用得摆到具体场景里看。我用最常见的三类对手和它对比过差异非常直接对比项EEPROM如 25LC256NOR Flash如 W25Q64FRAM如 FM25V05MRAMMR25H40CDF容量256Kbit64Mbit512Kbit4Mbit写入方式字节写/页写必须先擦除扇区再写直接覆写直接覆写擦写寿命10^5~10^6 次10^5 次左右10^12 次量级10^12 次量级写一条记录的耗时页写约 5ms扇区擦除 100ms 以上微秒级SPI 总线速度随机字节写支持不支持支持支持掉电数据保持典型 10~20 年10~20 年标称 10 年20 年以上在工业嵌入式项目里最常见的痛点是“参数要经常存、日志要不停写、数据还不能在断电时丢”。EEPROM 容量小页写慢写多了寿命也不够NOR Flash 擦询寿命低你每秒钟写一条日志等于在加速报废而且掉电如果卡在半截擦除中间数据直接坏掉FRAM 性能不错但密度和供货稳定性在部分年份不太理想。MRAM 基本把这几块的短板都补上了代价是单价比普通 Flash 贵但在设备故障损失面前这点成本完全值得。1.3 主控为什么选 STM32F415RG主控这块STM32F415RG 是 STM32F4 家族里的常青树。Cortex-M4F 内核带 FPU主频 168MHz1MB Flash、192KB RAM 在这个量级的存储方案里非常宽裕。它有三个 SPI 控制器SPI1 挂在 APB2 上能跑到 42MHzSPI2/SPI3 在 APB1 上也有 21MHz接 MRAM 完全够用。外围还带 CAN、多路 UART、ADC工业现场常用的接口基本不落。更实际的理由是生态。CubeMX 生成初始化代码HAL 库上手快网上资料一抓一把无论是老工程师还是刚毕业的新人维护成本都低。工业产品最怕“芯片断货没替代”STM32F4 系列出货量巨大渠道和供货比很多冷门芯片稳得多。所以这套组合不是堆料而是把“能稳定买到的强主控”和“能稳定写数据的存储颗粒”凑到了一起。2. 硬件连接与电路设计照着画就行2.1 引脚对应关系MR25H40CDF 常见的封装是 SOIC-8 或 DFN-8引脚功能一样下面以 SOIC-8 为例说明。接线其实很简单就是标准四线 SPI 加上两个控制脚引脚号名称功能接法1CS#片选低有效接 STM32 任意 GPIO2SOMISO数据输出接 MCU 的 SPI_MISO3WP#写保护接 VCC 或 GPIO详见下文4GND地共地5SIMOSI数据输入接 MCU 的 SPI_MOSI6SCK时钟接 MCU 的 SPI_SCK7HOLD#传输保持低有效直接接 VCC8VCC3.3V 电源去耦后接电源STM32F415RG 这边我用的是 SPI2默认引脚是 PB13SCK、PB14MISO、PB15MOSI片选 CS 用 PB12。如果你想让 SPI1 跑更高时钟也可以换 PA5、PA6、PA7 那组注意别和调试口 JTAG 引脚冲突就行。2.2 电源、上拉和两个控制脚的细节电源部分VCC 旁边放一个 0.1µF 陶瓷电容加一个 1µF 的电容必须贴着芯片引脚放。如果 MRAM 和主控不是同一路电源要注意上电时序不能让 MRAM 处于欠压状态时 SPI 线上有毛刺否则可能出现一次无意义的写操作。工业板卡上我习惯给 CS# 加一个 10k 上拉到 VCC这样主控复位期间 GPIO 变成高阻时CS 不会因为悬空被噪声拉低。WP# 和 HOLD# 这两个脚新手最容易栽跟头。HOLD# 在不做传输暂停时直接接 VCC悬空是大忌后面我会讲我因此踩的一个坑。WP# 的行为要看具体批次的 datasheet常见情况下它是配合状态寄存器里的块保护位使用的单纯拉低并不一定等于禁止写整片。我实际项目的做法是把 WP# 固定接高用 WRSR 命令里的 BP0/BP1 位做软件块保护这样逻辑统一不用为了硬件跳线去改程序。2.3 布线和时钟速率控制SPI 走线不长的话20MHz 完全没压力。我的经验是SCK、MOSI、MISO 三根线尽量等长总长度控制在 5cm 以内如果要通过排线引到另外一块板线长超过 10cm就把 SPI 时钟降到 4~8MHz必要时在源端串 33Ω 电阻。另外SPI 线附近不要走开关电源的驱动线或者功率 MOS 的栅极线这些地方 di/dt 很恐怖会直接耦合到 MISO 上造成误码。如果一总线上挂多颗 SPI 器件建议把 MISO 线上加一个 10k 下拉避免在某颗芯片 CS 拉高后 MISO 变成高阻时浮空收到噪声尤其是用低速时钟调试时容易莫名多出 0xFF。这个细节常规原理图检查根本发现不了但现场偶发串数据的问题往往就出在这。3. SPI 驱动编写与数据读写实现3.1 SPI 模式与初始化配置在 CubeMX 里把 SPI2 配成 Full-Duplex Master、8 位数据、MSB First、CPOLLow、CPHA1 Edge也就是 SPI Mode 0。MRAM 同时支持 Mode 0 和 Mode 3这里选 Mode 0 是为了和绝大多数 SPI 外设习惯保持一致后续调试也方便。时钟我一般先按 12MHz 跑起来验证逻辑没问题后再尝试提到 20MHz 以上。需要提醒一句STM32F415RG 的 SPI1 能到 42MHzSPI2 在 APB1 上只有 21MHz。理论上 MRAM 支持 40MHz但工程上我真不推荐贴着上限跑。SPI 这个接口在高频下对走线、上拉、地弹都很敏感工业现场又有大电机、继电器这些干扰源跑 12MHz 和跑 40MHz 在这个应用场景下体验差距不大留足裕量才是聪明做法。3.2 命令集速查这颗芯片的命令集非常精简就记几个操作码命令操作码作用WREN0x06写使能写数据前必须执行WRDI0x04写禁止RDSR0x05读状态寄存器WRSR0x01写状态寄存器设置块保护位READ0x03读数据后面跟 3 字节地址WRITE0x02写数据后面跟 3 字节地址SLEEP0xB9进入睡眠模式低功耗待机WAKE0xAB从睡眠模式唤醒状态寄存器里比较重要的是 WEL 位bit0它标志写使能状态执行 WREN 后变 1一次 WRITE 或 WRDI 后自动清 0。BP0bit1和 BP1bit2是块保护位可以标记地址范围的写保护。RDSR 读出来的默认值一般是 0x00如果哪次读到不是 0先怀疑是不是有人动过 WRSR。3.3 直接可用的读写代码下面这段代码是我在 STM32F415RG 上实际跑的 HAL 版本结构很简单关键是 CS 的拉低和拉高必须把一整个操作包住。#define MRAM_CS_LOW() HAL_GPIO_WritePin(MRAM_CS_GPIO_PORT, MRAM_CS_PIN, GPIO_PIN_RESET) #define MRAM_CS_HIGH() HAL_GPIO_WritePin(MRAM_CS_GPIO_PORT, MRAM_CS_PIN, GPIO_PIN_SET) #define MRAM_CMD_WREN 0x06 #define MRAM_CMD_WRITE 0x02 #define MRAM_CMD_READ 0x03 void MRAM_WriteBytes(uint32_t addr, const uint8_t *buf, uint32_t len) { uint8_t header[4] {MRAM_CMD_WRITE, (addr 16) 0xFF, (addr 8) 0xFF, addr 0xFF}; MRAM_CS_LOW(); uint8_t wren MRAM_CMD_WREN; HAL_SPI_Transmit(hspi2, wren, 1, 10); MRAM_CS_HIGH(); MRAM_CS_LOW(); HAL_SPI_Transmit(hspi2, header, 4, 100); HAL_SPI_Transmit(hspi2, (uint8_t *)buf, len, 100); MRAM_CS_HIGH(); } void MRAM_ReadBytes(uint32_t addr, uint8_t *buf, uint32_t len) { uint8_t header[4] {MRAM_CMD_READ, (addr 16) 0xFF, (addr 8) 0xFF, addr 0xFF}; MRAM_CS_LOW(); HAL_SPI_Transmit(hspi2, header, 4, 100); HAL_SPI_Receive(hspi2, buf, len, 100); MRAM_CS_HIGH(); }写操作不是发完 WRITE 命令就结束前面必须先发一次 WREN把 WEL 位置 1否则 WRITE 命令会被直接忽略。很多第一次用 MRAM 的人把它当普通 SPI Flash 用上来就写结果数据纹丝不动。3.4 读状态寄存器时的一个小陷阱读状态寄存器的代码必须发两个字节而不是一个。逻辑分析仪上能看得非常清楚第 1 个字节是操作码 0x05从第 2 个字节开始 MISO 上才输出真正的状态内容。所以正确的做法是发完操作码后再补一个 dummy 字节然后取第二个接收字节。uint8_t MRAM_ReadStatus(void) { uint8_t tx[2] {0x05, 0x00}; // opcode dummy uint8_t rx[2] {0, 0}; MRAM_CS_LOW(); HAL_SPI_TransmitReceive(hspi2, tx, rx, 2, 100); MRAM_CS_HIGH(); return rx[1]; }这个细节看似不起眼但它解释了为什么很多人用 HAL_SPI_Transmit 发完操作码后直接 HAL_SPI_Receive 读回来的是下一个周期才有效的状态。如果你把 SPI 配置成半双工模式读状态更是十有八九会出错因为 MISO 上根本没有足够的时钟沿来送出数据。3.5 一次完整的数据写入与确认流程实际项目里我不会只调单个函数而是把写入做成一个带回读校验的流程顺序是发 WREN把 WEL 置 1。拉低 CS发 WRITE 操作码、3 字节地址、数据然后拉高 CS。读状态寄存器确认 WEL 已经清 0代表这次写操作被接受。回读同样地址的数据和源数据逐字节比对。MRAM 和 Flash 最大的区别就在这一步Flash 写完后还要轮询 busy 位甚至等几十毫秒MRAM 只要把字节从 MOSI 发完写操作在 SPI 时钟沿上就完成了整个掉电窗口只有一条 SPI 指令那么长量级是微秒。所以执行回读校验不是因为担心写不进去而是为了尽早发现总线层面的电气问题比如接触不良或者干扰导致的位反转。4. 工业现场可靠性设计掉电、校验与性能4.1 掉电保护让最后一条记录不丢MRAM 虽然掉电不丢数据但“掉电瞬间正在写的那半条记录”是保不住的。任何存储芯片都逃不掉这个物理规则SPI 命令收到一半断电芯片只会记住已经收到的那部分。应对办法不是换芯片而是从系统层面设计。我的做法是分两层。第一层是硬件上利用 STM32F415RG 的 BOR 掉电复位或者外接电压监控芯片在电源掉到阈值以下时立刻通知主控进入紧急流程禁止再发起新的写操作。第二层是软件上给每条记录加一个头部结构字段长度作用Magic2 字节固定值如 0xA5 0x5A用于粗判有效序号4 字节单调递增用于识别新旧长度2 字节数据区长度数据N 字节实际载荷CRC324 字节全记录校验读取时只要 Magic 不对、CRC 不通过就判定这条记录是残写直接回退到上一个有效记录。连续记录场景里每次写新记录前把序号 1读的时候选序号最大的有效记录就能天然实现“最近一次完整写入”的语义。4.2 双份冗余参数区不玩花活对于标定参数这类“坏了会出大事”的数据我从来不做单份存储。最简单的做法是把同一份 64 字节参数写在两个固定区域比如地址 0x0000 和 0x1000读的时候先读第一份如果校验失败就自动用第二份同时触发一个“参数恢复”报警标志。这比任何复杂的纠错算法都可靠代价只是多占一点点空间。为什么 MRAM 场景里我不推荐做复杂的磨损均衡因为不需要。磨损均衡是 Flash 用来把擦除次数摊开的办法MRAM 的寿命按 10^12 次写来计算就算你每秒写 100 次也够写三百多年。把这部分软件复杂度省掉代码少了很多状态分支出问题的概率反而更小。4.3 性能实测写日志到底能有多快我实际量过一组数据SPI 跑 20MHz 时写入一条 32 字节记录需要发送 4 字节头部加 32 字节数据总共 36 字节总线耗时是 36×8/20MHz ≈ 14.4µs加上 GPIO 翻转和 WREN 的时间整体在 20µs 以内。这个速度意味着即使主控以 1kHz 的频率记录状态也只占极小的 CPU 开销。做日志系统时要注意的反而是容量规划。512KB 看起来不大但配合无擦除直写的特性能支撑的数据量很可观如果每秒钟写 32 字节一整片能覆盖约 4.5 小时如果每秒钟只写 1 条 16 字节的关键事件能记录超过 9 个小时。用环形覆盖的方式循环写长期运行根本不需要人工清理。4.4 温度、寿命与长期在线运行工业现场很多设备是 7×24 小时挂机的存储芯片必须扛得住高温和持续读写。MR25H40CDF 的工业级温度范围 -40℃ 到 85℃已经覆盖了绝大多数柜内和户外机箱场景。数据保持特性按温度不同会有差异85℃ 下标称 20 年在常温下只会更长完全不用像 SRAM 加电池方案那样定期换电池、担心电池漏液腐蚀板卡。这套组合替代传统“SRAM 锂电池”的掉电保持方案时还有一层隐性优势锂电池的时效管理是硬伤过了保修期没人维护就是隐患MRAM 把电池彻底拿掉整机的失效率模型一下子干净了很多。我在几个用户现场里遇到过“换电池”被客户抱怨的场景换成 MRAM 之后再没这档子事。5. 调试中的问题与踩坑实录5.1 常见故障速查表这几个问题基本就是我这些年调 MRAM 被问烂的列个表方便直接排查故障现象可能原因解决办法读出来全是 0xFF片选没拉低、SPI 模式不匹配、芯片在睡眠态用逻辑分析仪看 CS 时序确认 CPOL/CPHA发 WAKE 命令唤醒读回旧数据写不进去没发 WREN、WP# 被拉低、块保护位被意外打开写前查 WEL确认 WP# 接 VCC用 WRSR 清 BP 位数据出现在相邻地址CS 提前拉高、地址自增越界回卷保证一次指令内 CS 全程拉低给日志区单独分段管理偶发一字节变成 0xFF干扰或 MISO 悬空降 SPI 时钟缩短走线MISO 加下拉加强电源滤波HAL_SPI_Receive 读不到数据SPI 配置成半双工或没有发出 dummy 时钟改全双工模式或用 TransmitReceive 自动补时钟5.2 我印象最深的三个坑第一个坑是 HOLD# 悬空。有一版测试板程序跑起来大部分时间正常但日志偶发性大段丢失一开始怀疑是 SPI 速率太高降频没用换线没用最后用示波器抓到 HOLD# 引脚上有一个毛刺把芯片打进了保持状态。从那以后我电气规则里就多了一条HOLD# 这类功能脚要么明确接电源要么明确接 GPIO绝不允许悬空。第二个坑是 HAL 库在 RDSR 上的误用。刚开始我图省事发完 0x05 就立刻 HAL_SPI_Receive 一个字节结果读到的状态永远是 0x00一度以为芯片坏了。后来用逻辑分析仪才看清MISO 的数据是从第二个时钟周期才出来的前面那一下收到的是垃圾。用 HAL_SPI_TransmitReceive 发两个字节、取第二个问题立刻消失。第三个坑是主控复位瞬间 CS 误触发。设备上电时 GPIO 处于默认浮空状态如果 CS 没有上拉复位过程中完全可能被拉低一小段刚好又赶上有杂散时钟就会在 MRAM 里留下一次半截写。表面现象是“没写过这个地址数据却变了”。解决办法就是 CS 加上拉到 VCC并且 GPIO 初始化时先把 CS 配成输出高电平再使能 SPI。5.3 后续还能怎么扩展这套驱动写完以后往上叠功能很顺手。比如配合 FreeRTOS 做多任务访问时用互斥锁把“CS 拉低到拉高”这一段整体保护起来避免两个任务交叉使用同一个 SPI 外设导致时序错乱。再比如用 DMA 把采集到的数据直接流转到 MRAM可以做到很低的 CPU 占用率。我后来在另一个项目里干脆把参数区做成一个简单的“KV 存储”键值表头部记录有效标志和长度启动时扫描一遍就完成了参数加载整个代码量不大但现场客户改参数再也不用断电重烧了。我个人在实际操作中的体会是MRAM 这类器件真正改变的不是某个函数怎么写而是你设计存储子系统的思路。它把“寿命”“擦除”“掉电保护”这些长期压在嵌入式工程师头上的约束一次性拿掉了让你能像写普通全局变量一样去设计掉电保持的标定数据和日志再也不用每天数擦写次数。如果你想给某个常年被 Flash 寿命问题折磨的项目换个存储方案MR25H40CDF 加 STM32F415RG 这套组合值得直接抄作业试一轮。

相关新闻

签名检测数据集与YOLO训练实战:从解压到上线的完整指南

签名检测数据集与YOLO训练实战:从解压到上线的完整指南

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

2026/10/4 8:35:49 阅读更多 →
Excel只读设置全攻略:从无密码到加密保护一文搞懂

Excel只读设置全攻略:从无密码到加密保护一文搞懂

1. 为什么你需要"只读"这个功能1.1 只读不是"不能编辑",而是"防止误改"做办公室工作这么多年,我几乎每周都能碰到同事问我:Excel 只读怎么设?明明做了半天表,发给别人之后被改得面目全非…

2026/10/4 8:35:49 阅读更多 →
大规模预训练模型工程实录:从数据到checkpoint的12个关键切片

大规模预训练模型工程实录:从数据到checkpoint的12个关键切片

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

2026/10/4 8:35:49 阅读更多 →

最新新闻

12个自动化浪费检测器:Token Optimizer如何揪出重试循环、模型错配与上下文臃肿

12个自动化浪费检测器:Token Optimizer如何揪出重试循环、模型错配与上下文臃肿

12个自动化浪费检测器:Token Optimizer如何揪出重试循环、模型错配与上下文臃肿 【免费下载链接】token-optimizer Find the ghost tokens. Fix them. Survive compaction. Avoid context quality decay. 项目地址: https://gitcode.com/gh_mirrors/toke/token-o…

2026/10/4 9:12:16 阅读更多 →
Bootstrap Icons 图标深度解析:diamond-half 半填充菱形的 SVG 源码、字体码点与实战使用

Bootstrap Icons 图标深度解析:diamond-half 半填充菱形的 SVG 源码、字体码点与实战使用

前端 【免费下载链接】icons Official open source SVG icon library for Bootstrap. 项目地址: https://gitcode.com/gh_mirrors/ic/icons 点击查看 免费下载 diamond-half 是 Bootstrap Icons 官方图标库中 Shapes(形状)分类下的一个基础几…

2026/10/4 9:12:16 阅读更多 →
cppcheck 无效迭代器解引用检查:derefInvalidIterator 与 derefInvalidIteratorRedundantCheck 原理与实战

cppcheck 无效迭代器解引用检查:derefInvalidIterator 与 derefInvalidIteratorRedundantCheck 原理与实战

开发工具静态分析代码质量质量保障 【免费下载链接】cppcheck static analysis of C/C code 项目地址: https://gitcode.com/gh_mirrors/cpp/cppcheck 点击查看 免费下载 本文围绕 cppcheck 的 STL 迭代器安全分析展开,深入解析 derefInvalidIterator&a…

2026/10/4 9:12:16 阅读更多 →
AI 时代程序员的 20 件事:从代码编写者到 AI 指挥官的思维与技术升级指南

AI 时代程序员的 20 件事:从代码编写者到 AI 指挥官的思维与技术升级指南

文档教程知识库人工智能 【免费下载链接】ai-guide 程序员鱼皮的 AI 资源大全 Vibe Coding 零基础教程,分享 OpenClaw 保姆级教程、大模型玩法(DeepSeek / GPT / Gemini / Claude / GLM)、最新 AI 资讯、Prompt 提示词大全、AI 知识百科&…

2026/10/4 9:12:16 阅读更多 →
从 PagerDuty 档案看 remoteintech 远程友好公司目录的数据模型与维护管线

从 PagerDuty 档案看 remoteintech 远程友好公司目录的数据模型与维护管线

数据集 【免费下载链接】remote-jobs Source for remoteintech.company — a community-maintained directory of remote-friendly tech companies 项目地址: https://gitcode.com/GitHub_Trending/re/remote-jobs 点击查看 免费下载 本篇文章以远程友好科技公司目…

2026/10/4 9:12:16 阅读更多 →
Meta开源Muse Gadgets,让全球开发者自己「造AI外设」

Meta开源Muse Gadgets,让全球开发者自己「造AI外设」

Muse刚火,Meta就让开发者自己造AI硬件! Meta 的 Muse 还在持续升温。 这款刚推出不久的个人 AI Agent,已经成为 Meta 今年 AI 战略中的重要产品。不同于传统聊天机器人,Muse 被设计为能够替用户执行任务的智能助手:处…

2026/10/4 9:11:15 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式: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/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/3 9:42:36 阅读更多 →