ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

工业级MRAM数据存储方案:MR25H40CDF与PIC18F97J60实战

工业级MRAM数据存储方案:MR25H40CDF与PIC18F97J60实战 1. 项目缘起与整体设计思路工业现场的数据记录仪、电力监控终端、车载黑匣子这类设备有一个共同的痛点掉电不能丢数据而且要丢得干脆利落。我做过好几个类似的项目最早用 EEPROM写入速度慢得让人抓狂几毫秒一个字节遇到高频采样根本扛不住后来换 FRAM速度快了但容量小、价格高而且铁电材料的温度特性在 -40℃ 到 85℃ 的宽温区间里并不算特别稳。直到接触到 MRAM磁性随机存储器才算找到了一个比较理想的平衡点。这次要聊的项目就是用MR25H40CDF这颗 4Mbit 的 SPI MRAM 芯片配合PIC18F97J60这款自带以太网控制器的 8 位单片机搭建一套工业级的数据存储与读取方案。MR25H40CDF 是 Everspin 家的产品容量 512KBSPI 接口40MHz 时钟最关键的是它写入不需要等待没有写延迟擦写寿命理论上无限。PIC18F97J60 则是 Microchip 的老牌选手128KB Flash、4KB RAM集成了 10Mbps 以太网 MAC 和 PHY在工业网关、远程 IO 这类场景里出镜率很高。为什么选这两个凑一对原因很直接。PIC18F97J60 的 SPI 模块支持主模式时钟可以跑到 10MHzFosc 40MHz 时而 MR25H40CDF 支持 40MHz瓶颈在单片机这边但 10MHz 已经足够把 512KB 的数据在几百毫秒内读完。更重要的是MRAM 的字节级随机写入特性让单片机不需要像操作 Flash 那样先擦除整个扇区直接往目标地址写就行代码逻辑简化了一大截。对于工业应用来说这意味着掉电瞬间的最后一条记录也能安全落盘不需要外挂超级电容或者备用电池来做掉电保护。这套方案适合谁参考如果你正在做工业数据采集、设备黑匣子、参数存储、或者任何需要频繁写入且不能丢数据的嵌入式项目并且主控是 8 位或 16 位单片机那这篇文章里的思路和代码可以直接拿去改。即使你用 STM32 或者 ESP32SPI 操作 MRAM 的底层逻辑也是一样的只是寄存器配置不同而已。整体设计思路可以概括为三层硬件层负责电源、去耦、SPI 走线和片选管理驱动层实现 MR25H40CDF 的读写、状态寄存器操作和页写入优化应用层则根据具体场景设计数据帧格式、地址分配和掉电保护策略。下面我会一层一层拆开讲把每个环节的坑和技巧都摆出来。2. 核心细节解析与实操要点2.1 MR25H40CDF 的引脚与硬件连接要点MR25H40CDF 是 8 引脚 SOIC 封装引脚定义很标准VDD、VSS、SCK、SI、SO、CS#外加两个写保护引脚 WP# 和 HOLD#。实际布线时有几个地方特别容易出问题。电源去耦是第一个坑。MRAM 在写入瞬间的电流脉冲比读取时大不少虽然平均电流只有几毫安但瞬态电流可能冲到 20mA 以上。我习惯在 VDD 和 VSS 之间放一个 0.1μF 的陶瓷电容紧贴芯片引脚再并一个 1μF 的钽电容或者 MLCC 在电源入口处。别小看这个之前有个项目因为只放了 0.1μF高频写入时偶尔出现数据校验错误换了电容组合之后问题消失。SPI 走线方面SCK 是时钟线最容易引入振铃。如果走线超过 5cm建议在 SCK 上串一个 22Ω 到 33Ω 的电阻具体阻值根据实际波形调。SI 和 SO 是数据线尽量等长远离电源和电机驱动这类噪声源。CS# 片选线如果走线长也要注意因为片选信号的边沿如果太缓芯片可能识别不到有效的电平跳变。WP# 和 HOLD# 引脚的处理经常被忽略。WP# 是写保护低电平有效如果你不需要硬件写保护直接拉到 VDD。HOLD# 是暂停通信低电平有效不用的话也拉到 VDD。我见过有人把这两个脚悬空结果芯片偶尔进入保护状态写入失败排查了半天才发现是悬空导致的电平不确定。注意MR25H40CDF 的 VDD 范围是 2.7V 到 3.6V典型值 3.3V。如果你用 5V 的单片机比如老款的 PIC18F 某些型号必须加电平转换否则会损坏芯片。PIC18F97J60 的 IO 是 3.3V 兼容的可以直接连但还是要确认一下你的具体型号的 IO 电平。2.2 PIC18F97J60 的 SPI 模块配置PIC18F97J60 的 SPI 模块叫 MSSPMaster Synchronous Serial Port配置起来不算复杂但有几个寄存器位容易搞混。核心寄存器是SSPCON1、SSPSTAT和SSPADD。SSPCON1 里SSPM3:SSPM0决定工作模式。我们要用 SPI 主模式时钟由单片机产生所以设成0b0000或者0b0001区别在于时钟极性。MR25H40CDF 支持 SPI 模式 0CPOL0CPHA0和模式 3CPOL1CPHA1我一般用模式 0即空闲时 SCK 为低电平数据在 SCK 上升沿采样。对应的 SSPCON1 设置是SSPM 0b0000同时CKP位设为 0。时钟频率由SSPADD决定公式是Fosc / (4 * (SSPADD 1))。假设 Fosc 是 40MHz想要 10MHz 的 SCK算一下40M / (4 * (SSPADD 1)) 10M解得SSPADD 1 1也就是SSPADD 0。但实际中 SSPADD 最小建议为 1所以最高能到 5MHz 左右。如果你需要更快的速度可以考虑用 PIC18F97J60 的MSSP 高速模式或者换用带 SPI 时钟预分频器的型号。不过对于 MRAM 来说5MHz 已经够用了512KB 全部读完也就 1 秒左右。SSPSTAT里的SMP位决定采样时刻。在 SPI 主模式下SMP0 表示在数据输出末尾采样SMP1 表示在数据输出中间采样。对于 MR25H40CDF建议设 SMP0这样采样点更靠后信号建立时间更充裕。CKE位决定数据在时钟的哪个边沿变化模式 0 下 CKE0数据在 SCK 下降沿变化上升沿采样。初始化代码大概长这样void SPI_Init(void) { TRISCbits.TRISC3 0; // SCK 输出 TRISCbits.TRISC5 0; // SDO 输出 TRISCbits.TRISC4 1; // SDI 输入 TRISDbits.TRISD0 0; // CS 输出假设用 RD0 控制片选 SSPCON1 0x00; // SPI 主模式时钟 Fosc/4 SSPSTAT 0x00; // SMP0, CKE0 SSPADD 0x01; // 时钟分频实际 SCK Fosc/(4*(11)) 5MHz SSPCON1bits.SSPEN 1; // 使能 MSSP CS_MRAM 1; // 片选拉高空闲状态 }提示PIC18F97J60 的 SPI 引脚是复用引脚配置之前要确保对应的 TRIS 方向正确否则可能出现“写不出去”或者“读不进来”的情况。我习惯在初始化函数里把所有相关 TRIS 都显式设置一遍不依赖默认值。2.3 MRAM 的读写命令与时序MR25H40CDF 的命令集很精简常用的就几条WREN0x06写使能、WRDI0x04写禁止、RDSR0x05读状态寄存器、WRSR0x01写状态寄存器、READ0x03读数据、WRITE0x02写数据。没有扇区擦除命令这是 MRAM 和 Flash 最大的区别。写操作流程先拉低 CS#发送 WREN 命令拉高 CS#然后再次拉低 CS#发送 WRITE 命令接着发送 24 位地址MR25H40CDF 是 512KB需要 19 位地址但命令格式是 24 位高 5 位忽略然后连续发送数据字节。数据可以一直发地址自动递增直到拉高 CS# 结束。注意WREN 之后必须拉高 CS# 再拉低否则 WREN 不生效。这个细节很多新手会漏掉导致写入失败。读操作流程拉低 CS#发送 READ 命令发送 24 位地址然后就可以连续读取数据了SCK 每给一个时钟SO 上就输出一个字节。读操作不需要 WREN也不需要等待。状态寄存器MR25H40CDF 的状态寄存器只有两位有效WEL写使能锁存和BP0/BP1块保护。WEL 在 WREN 之后置 1在 WRITE 完成或者 WRDI 之后清 0。BP0/BP1 用于硬件写保护可以保护部分或全部存储区。如果你不需要写保护初始化时把 WRSR 写成 0x00 就行。时序上MR25H40CDF 的CS# 建立时间tCSS最小 10nsCS# 保持时间tCSH最小 10nsSCK 高电平时间tCLH和低电平时间tCLL各最小 10ns。在 5MHz 时钟下周期是 200ns高电平 100ns远大于 10ns所以时序很宽松。但如果你把时钟拉到 20MHz 以上就要仔细核对时序参数了。注意MR25H40CDF 的写周期时间tWC是 0也就是说 WRITE 命令发送完毕后数据立即生效不需要轮询状态寄存器等待写入完成。这是 MRAM 相比 Flash 和 EEPROM 最大的优势代码里可以省掉等待循环。3. 实操过程与核心环节实现3.1 硬件搭建与电源方案先说一下我的硬件配置。主控板是 PIC18F97J60 的最小系统晶振 40MHz通过 PLL 倍频到 40MHz 作为系统时钟。MRAM 芯片焊在一块小的转接板上通过排线连接到主控板的 SPI 接口。电源用的是 3.3V LDO型号是 AMS1117-3.3输入 5V输出 3.3V最大电流 800mA带 MRAM 绰绰有余。电源部分我特意做了一个掉电检测电路。用一个电阻分压网络监测 5V 输入分压后的电压接到 PIC18F97J60 的 ADC 引脚。当输入电压降到 4.5V 以下时ADC 读数会明显下降单片机在检测到掉电后立即把关键数据写入 MRAM。因为 MRAM 写入不需要等待从检测到掉电到写完最后一条记录整个过程在微秒级完成完全不需要大电容储能。这个设计比用 Flash 方案省掉了超级电容和充电管理电路BOM 成本降了不少。SPI 走线方面我把 MRAM 放在离单片机 3cm 左右的位置SCK 上串了 27Ω 电阻CS# 直接连到 RD0没有加缓冲。实测波形很干净上升沿和下降沿都没有明显振铃。如果你要把 MRAM 放到板子边缘走线超过 10cm建议加一个 SPI 缓冲器比如 74LVC1G125或者降低时钟频率到 1MHz 以下。3.2 底层驱动代码实现驱动代码我分成三个文件mram_spi.c负责 SPI 底层收发mram_drv.c负责 MRAM 命令封装mram_app.c负责应用层的数据帧管理。先看 SPI 底层// SPI 收发一个字节 uint8_t SPI_ExchangeByte(uint8_t data) { SSPBUF data; while (!SSPSTATbits.BF); // 等待接收完成 return SSPBUF; } // 拉低片选 void MRAM_CS_Low(void) { CS_MRAM 0; __delay_us(1); // 确保建立时间 } // 拉高片选 void MRAM_CS_High(void) { __delay_us(1); CS_MRAM 1; }然后是 MRAM 命令封装// 写使能 void MRAM_WriteEnable(void) { MRAM_CS_Low(); SPI_ExchangeByte(0x06); // WREN MRAM_CS_High(); } // 读状态寄存器 uint8_t MRAM_ReadStatus(void) { uint8_t status; MRAM_CS_Low(); SPI_ExchangeByte(0x05); // RDSR status SPI_ExchangeByte(0xFF); MRAM_CS_High(); return status; } // 写数据 void MRAM_Write(uint32_t addr, uint8_t *buf, uint16_t len) { MRAM_WriteEnable(); MRAM_CS_Low(); SPI_ExchangeByte(0x02); // WRITE SPI_ExchangeByte((addr 16) 0xFF); SPI_ExchangeByte((addr 8) 0xFF); SPI_ExchangeByte(addr 0xFF); for (uint16_t i 0; i len; i) { SPI_ExchangeByte(buf[i]); } MRAM_CS_High(); } // 读数据 void MRAM_Read(uint32_t addr, uint8_t *buf, uint16_t len) { MRAM_CS_Low(); SPI_ExchangeByte(0x03); // READ SPI_ExchangeByte((addr 16) 0xFF); SPI_ExchangeByte((addr 8) 0xFF); SPI_ExchangeByte(addr 0xFF); for (uint16_t i 0; i len; i) { buf[i] SPI_ExchangeByte(0xFF); } MRAM_CS_High(); }这里有个细节地址是 24 位的但 MR25H40CDF 只有 19 位地址线所以实际有效的地址范围是 0x00000 到 0x7FFFF。发送地址时高 5 位会被芯片忽略但为了代码通用性我还是按 24 位发送。如果你以后换用更大容量的 MRAM比如 16Mbit 的 MR25H16地址位数不同但命令格式是一样的只需要改地址掩码就行。3.3 数据帧格式与地址分配应用层的数据帧设计直接决定了系统的可靠性和可维护性。我采用固定长度记录 环形缓冲区的方案。每条记录 64 字节包含字段长度说明帧头2 字节0xAA55用于同步时间戳4 字节秒级 Unix 时间戳设备 ID2 字节区分不同设备数据类型1 字节0x01 温度0x02 压力0x03 电流等数据负载48 字节实际采样数据CRC162 字节校验帧头和负载帧尾2 字节0x55AA用于结束标志保留3 字节对齐到 64 字节512KB 的 MRAM 可以存 8192 条这样的记录。地址分配上前 4KB 用于存储系统参数和配置信息剩下的 508KB 全部用于数据记录。环形缓冲区的写指针存在 MRAM 的固定地址 0x0000 处每次写入新记录后更新写指针。读指针存在 0x0004 处用于读取历史数据。掉电保护策略系统正常运行时数据先写到 RAM 缓冲区每积累 10 条记录或者每 100ms 批量写入 MRAM 一次。当掉电检测中断触发时立即把 RAM 缓冲区里剩余的数据全部写入 MRAM然后更新写指针。因为 MRAM 写入速度极快整个过程在 1ms 内完成不需要额外的储能电容。提示批量写入时尽量让每次写入的数据长度是 64 字节的整数倍这样地址对齐代码逻辑简单也方便后续用 DMA 优化。PIC18F97J60 没有 DMA但如果你用 STM32 或者 ESP32可以用 DMA 把 SPI 传输和 CPU 解耦进一步提高效率。3.4 实测性能数据我用逻辑分析仪抓了 SPI 波形实测 SCK 频率是 5MHz单字节传输时间 1.6μs。连续写入 64 字节的记录从拉低 CS# 到拉高 CS#总耗时约 120μs其中命令和地址开销 5 字节数据 64 字节总共 69 字节理论时间 69 × 1.6 110.4μs加上片选建立和保持时间120μs 很合理。读取 512KB 全部数据耗时约 1.05 秒平均读取速度 487KB/s。这个速度对于工业数据记录来说完全够用即使你每秒采样 1000 次每次 64 字节也只需要 64KB/s 的写入带宽MRAM 轻松应对。功耗方面写入时电流约 15mA读取时约 8mA待机时 1mA 左右。用 3.3V 供电写入功耗 50mW对于电池供电的设备来说稍微有点高但考虑到 MRAM 不需要擦除等待整体能耗其实比 Flash 方案低因为 Flash 擦除一个扇区需要几十毫秒期间电流也不小。4. 常见问题与排查技巧实录4.1 写入失败与数据错乱现象调用 MRAM_Write 之后读回来的数据不对或者根本没写进去。排查思路先读状态寄存器看 WEL 位是否置 1。如果 WEL 是 0说明 WREN 命令没生效。最常见的原因是WREN 之后没有拉高 CS#或者拉高之后没有等待足够的时间。MR25H40CDF 要求 WREN 命令的 CS# 上升沿之后至少要等 10ns 才能开始下一个命令。虽然 10ns 很短但如果你的代码里 CS# 拉高和拉低之间没有延时在某些编译器优化下可能会被合并成一条指令导致时序不满足。解决方法在 MRAM_CS_High 和 MRAM_CS_Low 之间加一个__delay_us(1)确保片选信号有明确的跳变。另外检查 WP# 引脚是否被拉低如果 WP# 是低电平芯片会拒绝所有写入操作。另一个常见原因是SPI 模式不匹配。MR25H40CDF 支持模式 0 和模式 3如果你的单片机配置成模式 1 或模式 2数据采样时刻不对读回来的数据会整体偏移一位。用逻辑分析仪抓一下 SCK 和 SI 的波形对照数据手册的时序图很容易看出来。4.2 读取数据全为 0xFF 或 0x00现象读 MRAM 时返回的数据全是 0xFF 或者全是 0x00。排查思路全 0xFF 通常表示MISO 线没有连接或者被拉高芯片根本没有输出数据。全 0x00 则表示 MISO 被拉低或者芯片没有响应。先检查硬件连接用万用表测一下 MISO 对地的电阻正常应该是高阻态。如果 MISO 一直低可能是芯片损坏或者焊接短路。软件方面检查 SPI 的SSPSTATbits.BF位是否在读取之前被清零。PIC18F97J60 的 SSPBUF 是双缓冲的如果上一次接收的数据没有读走BF 位会一直是 1导致下一次读取拿到的是旧数据。我习惯在每次 SPI_ExchangeByte 之前先读一次 SSPBUF 清空缓冲区虽然有点浪费但能避免很多奇怪的问题。还有一种情况是片选信号没有正确拉低。如果你用软件片选检查 CS_MRAM 宏定义对应的引脚是否正确TRIS 方向是否设置为输出。我遇到过因为 TRIS 设置错误片选信号一直是高电平芯片根本没被选中读回来全是 0xFF。4.3 高频写入时的数据丢失现象低速写入正常一旦提高写入频率偶尔出现数据丢失或者 CRC 校验错误。排查思路先看电源。用示波器测 VDD 引脚在写入瞬间是否有明显的电压跌落。如果跌落超过 0.3V说明去耦电容不够。MRAM 写入时的瞬态电流较大如果电源走线细或者去耦电容离芯片远电压会瞬间跌落导致芯片内部逻辑复位写入失败。解决方法在 VDD 和 VSS 之间加一个 0.1μF 的陶瓷电容紧贴芯片引脚再并一个 10μF 的 MLCC 在电源入口。如果空间允许再加一个 100μF 的钽电容。另外检查电源走线宽度至少 20mil地线也要足够宽最好用铺铜。另一个原因是SPI 时钟太快。虽然 MR25H40CDF 标称支持 40MHz但实际能达到的最高频率取决于 PCB 走线质量和电源稳定性。如果走线长、噪声大20MHz 就可能出错。把 SCK 降到 5MHz 或者 1MHz如果问题消失说明是信号完整性问题需要优化布线或者加缓冲器。4.4 常见问题速查表问题现象可能原因排查方法解决措施写入无效WREN 未生效读状态寄存器 WEL 位确保 WREN 后拉高 CS#加延时读取全 0xFFMISO 未连接测 MISO 对地电阻检查焊接和连线读取全 0x00MISO 被拉低测 MISO 电压检查芯片是否损坏数据错位SPI 模式不匹配逻辑分析仪抓波形改为模式 0 或模式 3高频写入丢数据电源跌落示波器测 VDD加去耦电容加宽走线偶发校验错误时钟太快降低 SCK 频率优化布线或加缓冲器片选无效TRIS 方向错误测 CS# 引脚电压设置为输出检查宏定义注意MRAM 虽然写入不需要等待但读取状态寄存器和写入数据之间需要间隔至少 10ns。如果你在 WREN 之后立即发送 WRITE 命令中间没有拉高 CS#WREN 不会生效。这个坑我踩过两次后来养成习惯每次 WREN 之后都加一个__delay_us(1)再也没出过问题。5. 工业场景下的可靠性设计与扩展思路5.1 宽温与抗干扰设计工业现场的温度范围通常是 -40℃ 到 85℃有些户外设备甚至要求 -55℃ 到 125℃。MR25H40CDF 的工业级版本支持 -40℃ 到 85℃在这个范围内读写操作都是可靠的。但要注意MRAM 的写入电流在低温下会略微增大如果你在 -40℃ 环境下测试发现写入失败先检查电源是否能提供足够的瞬态电流。抗干扰方面SPI 总线在工业环境中容易受到电机、继电器、变频器的干扰。除了前面提到的串阻和去耦电容还可以在 SPI 线上加TVS 二极管比如 SMF3.3A钳位电压在 5V 左右能有效抑制浪涌。如果 MRAM 和单片机不在同一块板子上建议用屏蔽排线屏蔽层单点接地。软件层面的抗干扰主要靠 CRC 校验和重试机制。每条记录写入后立即读回来校验 CRC如果校验失败重写一次。MRAM 的写入寿命无限重写不会影响寿命。我一般设置最多重试 3 次如果 3 次都失败就记录一个错误标志等系统重启后再处理。5.2 文件系统与数据管理如果你需要存储大量不同格式的数据裸写地址空间会变得很难管理。这时候可以考虑在 MRAM 上跑一个轻量级文件系统比如LittleFS或者SPIFFS。这两个文件系统都是为嵌入式设计的支持掉电恢复和磨损均衡。虽然 MRAM 不需要磨损均衡但文件系统的目录管理和碎片整理功能还是很实用的。不过文件系统会带来额外的开销。LittleFS 的最小擦除单元是 4KB而 MRAM 没有擦除概念所以需要修改底层驱动把擦除操作模拟成写 0xFF。这会增加代码复杂度而且写入速度会变慢。我的建议是如果只是存固定格式的记录用环形缓冲区就够了如果需要存日志文件、配置文件、固件升级包等多种数据再考虑文件系统。5.3 与以太网功能的结合PIC18F97J60 自带以太网控制器这是它的一大亮点。你可以把 MRAM 当作网络数据缓存当网络断开时采集的数据先存到 MRAM 里网络恢复后再把缓存的数据上传到服务器。因为 MRAM 容量有 512KB按每条记录 64 字节算可以缓存 8192 条记录足够应对几个小时的网络中断。实现上可以用一个简单的生产者-消费者模型。中断服务程序负责采集数据并写入 MRAM 环形缓冲区主循环负责从缓冲区读取数据并通过以太网发送。写指针和读指针都存在 MRAM 的固定地址每次操作后更新。为了防止指针更新过程中掉电导致数据错乱可以用双指针备份写指针存两份分别存在 0x0000 和 0x0008读取时比较两个值如果不一致取较大的那个。提示PIC18F97J60 的以太网模块和 SPI 模块共用一些引脚配置时要仔细核对引脚复用表。我建议把 SPI 和以太网的初始化分开写先初始化 SPI确认 MRAM 能正常读写再初始化以太网避免相互干扰。5.4 从 8 位到 32 位的迁移建议如果你觉得 PIC18F97J60 的性能不够想迁移到 STM32 或者 ESP32SPI 操作 MRAM 的底层逻辑基本不变只需要改寄存器配置。STM32 的 SPI 外设更复杂支持 DMA、FIFO、硬件片选配置起来更灵活。ESP32 的 SPI 支持高达 80MHz 时钟可以充分发挥 MR25H40CDF 的 40MHz 性能。迁移时要注意电平匹配。STM32 和 ESP32 的 IO 都是 3.3V可以直接连 MRAM。但如果你用 5V 的 STM32 型号比如 STM32F103 的某些版本需要加电平转换。另外STM32 的 SPI 模式配置和 PIC 不同CPOL 和 CPHA 的组合要仔细核对确保和 MRAM 的模式 0 或模式 3 匹配。我在实际迁移中发现STM32 的硬件片选有时候不如软件片选灵活。硬件片选在 SPI 使能时自动拉低传输完成后自动拉高但如果你需要在命令之间插入延时硬件片选就不太方便。所以我在 STM32 上还是用软件片选GPIO 控制 CS#这样时序完全可控。5.5 成本与选型对比最后聊一下选型。MR25H40CDF 的价格比同容量的 SPI Flash 贵不少512KB 的 Flash 大概几块钱而 MRAM 要几十块。但如果你算上掉电保护电路的成本差距就缩小了。Flash 方案需要超级电容、充电管理、电压检测这些加起来也要十几块而且超级电容的寿命有限几年后容量衰减掉电保护就失效了。MRAM 不需要这些外围电路寿命无限长期来看反而更划算。对比项MR25H40CDFSPI FlashEEPROM容量512KB512KB-16MB1KB-512KB写入速度无延迟毫秒级擦除毫秒级擦写寿命无限10万次100万次掉电保护不需要需要电容需要电容价格高低中适用场景高频写入、关键数据固件存储、日志参数存储如果你的项目对数据可靠性要求极高写入频繁而且预算允许MRAM 是很好的选择。如果只是存固件或者不常改的配置Flash 就够了。EEPROM 则适合存少量参数比如校准系数、设备 ID 之类的。我个人在实际操作中的体会是MRAM 最大的价值不在于速度快而在于写入逻辑简单。不需要擦除不需要等待不需要掉电保护电路代码里少了很多状态机调试时间大幅缩短。对于工业项目来说时间就是成本少踩一个坑可能就省下几天的调试时间。
返回列表