ARTICLE DETAIL

资讯详情

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

MRAM工业存储实战:MR25H40CDF与PIC18F45K42的SPI驱动与可靠性设计

MRAM工业存储实战:MR25H40CDF与PIC18F45K42的SPI驱动与可靠性设计 MRAM 这东西我第一次用是在一个工业数据采集板上。当时项目要求断电后关键配置不能丢还要能扛住车间里那台大功率变频器的电磁干扰。试过 EEPROM写入太慢试过 FRAM容量小价格高最后选了 MR25H40CDF 这颗 4Mb 的 SPI MRAM配 PIC18F45K42 做主控。实测下来写入速度比 EEPROM 快了几个数量级断电保存稳得一批而且没有锂电池那种后顾之忧。这篇文章就把我在这套组合上踩过的坑、验证过的配置、以及工业现场积累的经验完整地分享出来。不管你是刚接触 MRAM 的新手还是正在选型存储方案的嵌入式工程师应该都能从中找到可以直接用的东西。1. 为什么在工业场景里我会优先考虑 MRAM 而不是 EEPROM 或 FRAM1.1 工业现场对存储器的真实需求是什么很多人选存储器的时候第一反应是看容量和价格但在工业环境里这两个指标往往不是最关键的。我在实际项目中总结下来工业场景对存储器的核心诉求集中在四个方面写入速度、擦写寿命、数据保持能力、以及抗干扰性能。先说写入速度。工业设备经常需要在运行过程中实时记录状态数据比如电机的电流曲线、阀门的开关次数、传感器的校准参数。如果存储器写入一次要等 5ms 到 10ms那在高速采集场景下根本来不及。EEPROM 的字节写入时间典型值在 5ms 左右页写入也要 3ms 到 5ms这个延迟在需要频繁记录的场合是致命的。再说擦写寿命。EEPROM 的典型擦写次数是 100 万次听起来不少但如果你的设备每秒写一次一天就是 86400 次不到 12 天就把一个扇区写废了。工业设备的设计寿命通常是 5 到 10 年这个寿命显然不够看。FRAM 的擦写寿命能到 10 的 14 次方几乎可以认为是无限的但 FRAM 的容量通常偏小而且价格偏高。数据保持能力方面EEPROM 标称 40 年FRAM 标称 10 到 15 年而 MRAM 的数据保持能力可以做到 20 年以上而且不需要像 FRAM 那样担心退磁问题。抗干扰性能上MRAM 基于磁隧道结技术对电磁干扰的敏感度远低于电荷存储型器件。1.2 MR25H40CDF 的关键参数拆解MR25H40CDF 是 Everspin 公司推出的一款 4Mb 容量的 SPI MRAM。4Mb 换算过来是 512KB对于存储配置参数、日志数据、校准系数来说这个容量相当充裕。它的接口是标准的 SPI支持 Mode 0 和 Mode 3最高时钟频率可以到 40MHz。这个速度意味着什么理论上每秒可以传输 5MB 的数据当然实际有效写入速率会受限于芯片内部的写入周期。工作电压范围是 2.7V 到 3.6V典型值 3.3V。工业级温度范围是 -40°C 到 85°C有些批次可以到 105°C。封装是 8 引脚的 DFN 或者 SOIC占板面积很小。最关键的是它的写入不需要擦除操作也不需要等待写入完成——数据写进去就生效没有内部写周期带来的延迟。我实测过连续写入 512KB 数据的时间在 20MHz SPI 时钟下大约 1.2 秒完成。同样的数据量写到 EEPROM 里光擦除加写入就要几十秒。这个差距在需要快速保存大量数据的场景下直接决定了方案能不能用。1.3 MRAM、EEPROM、FRAM 的横向对比为了让你更直观地做选型我把这三种存储器的关键指标整理成了表格指标MR25H40CDF (MRAM)典型 EEPROM典型 FRAM容量4Mb (512KB)1Kb-2Mb4Kb-1Mb接口SPI (40MHz)I2C/SPII2C/SPI写入时间无延迟即时生效5ms/字节无延迟擦写寿命10^15 次10^6 次10^14 次数据保持20 年以上40 年10-15 年工作温度-40~85°C-40~85°C-40~85°C抗磁干扰中等需注意布局高低易受磁场影响单价参考中等低高从表格里可以看出来MRAM 在写入速度、擦写寿命、数据保持这三个维度上都有明显优势价格介于 EEPROM 和 FRAM 之间。FRAM 虽然擦写寿命也很高但它对磁场敏感在电机、继电器附近使用时需要额外做磁屏蔽这在工业现场是个不小的麻烦。注意MRAM 虽然叫磁存储器但它对静态磁场的敏感度其实比 FRAM 低得多。真正需要留意的是强交变磁场比如大功率电机启动瞬间产生的磁场。在 PCB 布局时让 MRAM 远离电感和变压器基本就能规避这个问题。2. PIC18F45K42 的 SPI 外设配置与 MRAM 的硬件连接2.1 PIC18F45K42 的 SPI 模块特性PIC18F45K42 是 Microchip 的一款 8 位单片机主频最高 64MHz内置了独立的 SPI 外设模块。这颗芯片的 SPI 模块支持主机模式和从机模式时钟极性CKP和时钟相位CKE可以独立配置覆盖了 SPI Mode 0 到 Mode 3 的全部组合。它还带有 4 级深度的 FIFO 缓冲区在连续传输数据时能减少中断开销。我选这颗芯片的原因很简单它的 SPI 模块足够灵活而且价格便宜供货稳定。在工业项目里供货稳定性有时候比性能更重要。PIC18F45K42 的 SPI 引脚映射可以通过 PPSPeripheral Pin Select功能灵活分配到多个引脚上这给 PCB 布线带来了很大的便利。SPI 模块的关键寄存器有三个SPI1CON0 控制使能和模式SPI1CON1 配置时钟极性和相位SPI1CON2 设置 FIFO 和中断。另外还有 SPI1BAUD 寄存器用来设置波特率分频值。波特率的计算公式是SPI 时钟 系统时钟 / (2 × (SPI1BAUD 1))。假设系统时钟是 64MHz想要得到 20MHz 的 SPI 时钟SPI1BAUD 的值就是 64 / (2 × 20) - 1 0.6取整后是 0实际时钟就是 32MHz。如果要精确得到 20MHz需要调整系统时钟或者接受近似值。2.2 硬件连接与 PCB 布局要点MR25H40CDF 和 PIC18F45K42 的连接非常直接四根线搞定SCK、MOSI、MISO、CS。再加上电源和地总共六根线。但就是这六根线布局不好照样出问题。先看引脚连接PIC18F45K42 引脚MR25H40CDF 引脚说明RC3 (SCK)SCKSPI 时钟RC5 (MOSI)SI主机输出从机输入RC4 (MISO)SO主机输入从机输出RA5 (GPIO)CS片选低有效3.3VVDD电源GNDVSS地CS 引脚我用的是普通 GPIO 而不是 SPI 模块自带的 SS 引脚原因是我想完全控制片选的时序。MRAM 的片选建立时间和保持时间有明确要求用硬件 SS 有时候时序不够灵活。用 GPIO 手动拉低拉高配合适当的延时能确保时序满足数据手册的要求。PCB 布局方面有几个点必须注意。第一SPI 的时钟线要尽量短最好不超过 5cm而且要走在地平面之上。第二MISO 和 MOSI 不要平行走线太长避免串扰。第三MRAM 的电源引脚旁边必须放一个 0.1uF 的陶瓷去耦电容越近越好。第四如果板子上有电机驱动或者继电器MRAM 要放在远离这些干扰源的位置。提示我在第一版板子上把 MRAM 放在了继电器旁边结果读取数据时偶尔会出现位翻转。后来把 MRAM 移到板子另一侧并在电源线上加了一个磁珠问题就消失了。这个坑花了我两天时间排查希望你别再踩。2.3 SPI 初始化的完整代码实现下面是我在实际项目中使用的 SPI 初始化代码基于 Microchip 的 XC8 编译器#include xc.h void SPI1_Init(void) { // 配置引脚方向 TRISCbits.TRISC3 0; // SCK 输出 TRISCbits.TRISC4 1; // MISO 输入 TRISCbits.TRISC5 0; // MOSI 输出 TRISAbits.TRISA5 0; // CS 输出 // 通过 PPS 映射 SPI 引脚 RC3PPS 0x0F; // SCK 映射到 RC3 RC5PPS 0x10; // MOSI 映射到 RC5 SPI1SCKPPS 0x13; // MISO 来自 RC4 // 配置 SPI 模块 SPI1CON0 0x00; // 先关闭 SPI1CON1 0x00; // 时钟极性 CKP0相位 CKE0即 Mode 0 SPI1CON2 0x00; // 不使用 FIFO 中断 // 设置波特率系统时钟 64MHz目标 SPI 时钟 16MHz // SPI1BAUD 64 / (2 * 16) - 1 1 SPI1BAUD 0x01; // 使能 SPI 主机模式 SPI1CON0bits.EN 1; SPI1CON0bits.MST 1; // CS 默认拉高 LATAbits.LATA5 1; } uint8_t SPI1_ExchangeByte(uint8_t data) { SPI1TXB data; while (!SPI1STATUSbits.TXBE); // 等待发送缓冲空 while (!SPI1STATUSbits.RXBF); // 等待接收完成 return SPI1RXB; }这段代码里有个细节值得说明SPI1CON1 的 CKP 和 CKE 位决定了 SPI 模式。MR25H40CDF 支持 Mode 0 和 Mode 3我选的是 Mode 0也就是 CKP0、CKE0。在这个模式下时钟空闲时为低电平数据在时钟上升沿采样。如果你用 Mode 3CKP1、CKE1时钟空闲时为高电平数据在下降沿采样。两种模式都能用关键是主从双方要一致。波特率的设置我用了 16MHz而不是芯片支持的最高 40MHz。原因有两个一是 16MHz 已经足够快写入 512KB 数据只需要 0.26 秒二是降低时钟频率能提高信号完整性在工业环境的电磁噪声下更稳定。如果你追求极致速度可以调到 32MHz但要确保 PCB 走线质量足够好。3. MR25H40CDF 的读写操作与命令集详解3.1 MRAM 的命令集与操作码MR25H40CDF 的命令集比 EEPROM 简单得多因为它不需要擦除操作。核心命令只有几个命令名称操作码说明WREN0x06写使能WRDI0x04写禁止RDSR0x05读状态寄存器WRSR0x01写状态寄存器READ0x03读数据WRITE0x02写数据写操作之前必须先发送 WREN 命令这是为了防止误写入。WREN 会设置状态寄存器里的 WEL 位写操作完成后 WEL 位自动清零。这个机制和 EEPROM 类似但 MRAM 不需要等待写入完成发送完数据就可以立即进行下一次操作。读操作更简单发送 READ 命令然后发送 3 字节的地址接着就可以连续读取数据了。地址是 24 位的因为 4Mb 容量需要 19 位地址线用 3 字节表示绰绰有余。地址会自动递增所以连续读取整个芯片只需要一次命令。3.2 页写入与连续写入的实现MR25H40CDF 的写入操作没有页的概念你可以从任意地址开始连续写入任意长度的数据只要不超过芯片容量就行。这一点比 EEPROM 方便太多EEPROM 通常有 32 字节或 64 字节的页限制跨页写入需要特殊处理。下面是我封装的写入函数#define MRAM_CS_LOW() (LATAbits.LATA5 0) #define MRAM_CS_HIGH() (LATAbits.LATA5 1) void MRAM_WriteEnable(void) { MRAM_CS_LOW(); SPI1_ExchangeByte(0x06); // WREN MRAM_CS_HIGH(); } void MRAM_Write(uint32_t addr, uint8_t *data, uint16_t len) { MRAM_WriteEnable(); MRAM_CS_LOW(); SPI1_ExchangeByte(0x02); // WRITE SPI1_ExchangeByte((addr 16) 0xFF); SPI1_ExchangeByte((addr 8) 0xFF); SPI1_ExchangeByte(addr 0xFF); for (uint16_t i 0; i len; i) { SPI1_ExchangeByte(data[i]); } MRAM_CS_HIGH(); } void MRAM_Read(uint32_t addr, uint8_t *buffer, uint16_t len) { MRAM_CS_LOW(); SPI1_ExchangeByte(0x03); // READ SPI1_ExchangeByte((addr 16) 0xFF); SPI1_ExchangeByte((addr 8) 0xFF); SPI1_ExchangeByte(addr 0xFF); for (uint16_t i 0; i len; i) { buffer[i] SPI1_ExchangeByte(0xFF); } MRAM_CS_HIGH(); }这里有个容易忽略的点CS 拉高之后MRAM 需要一定的总线释放时间才能接受下一次操作。数据手册上写的是最小 10ns但我在实际测试中发现如果 CS 拉高后立即拉低偶尔会出现命令丢失。后来我在 CS 拉高后加了一个 1us 的延时问题就再也没出现过。这个延时在高速操作时会稍微降低吞吐量但换来了稳定性我觉得值得。3.3 状态寄存器与写保护机制MR25H40CDF 的状态寄存器只有几个位有意义WEL写使能锁存、BP0 和 BP1块保护、以及 SRWD状态寄存器写保护。块保护功能可以锁定部分地址区域防止误写入。在工业应用中我通常会把存储校准参数的区域设为只读只允许存储日志的区域可写。设置块保护的步骤如下void MRAM_SetBlockProtection(uint8_t bp) { MRAM_WriteEnable(); MRAM_CS_LOW(); SPI1_ExchangeByte(0x01); // WRSR SPI1_ExchangeByte(bp 2); // BP1, BP0 在 bit3, bit2 MRAM_CS_HIGH(); }bp 的值对应不同的保护范围0 表示不保护1 表示保护高 1/4 区域2 表示保护高 1/2 区域3 表示保护整个芯片。设置完成后被保护的区域只能读不能写直到清除保护位。注意块保护设置是掉电保持的也就是说你设置了一次之后下次上电仍然有效。如果你在调试阶段不小心把整个芯片保护了需要先发送 WREN再写状态寄存器清除保护位。这个操作我建议在初始化代码里加一个解锁步骤避免调试时把自己锁死。4. 工业应用中的数据存储策略与可靠性设计4.1 数据分区与磨损均衡的简化处理虽然 MRAM 的擦写寿命高达 10^15 次理论上不需要磨损均衡但在实际项目中我还是会做简单的分区管理。原因不是为了延长寿命而是为了数据组织的清晰性和可维护性。我的典型分区方案是这样的地址范围用途大小0x00000 - 0x00FFF设备配置参数4KB0x01000 - 0x01FFF校准系数4KB0x02000 - 0x03FFF运行日志8KB0x04000 - 0x7FFFF数据缓冲区剩余空间配置参数区存储设备的 ID、通信地址、波特率等不常变的数据。校准系数区存储传感器的零点、满量程、温度补偿系数。运行日志区用循环写入的方式记录设备状态变化。数据缓冲区用于临时存储采集到的数据满了之后统一上传。这种分区方式的好处是当设备出现问题时我可以快速定位到特定区域读取数据而不需要遍历整个芯片。另外在固件升级时我可以只擦除配置区而保留日志区方便问题追溯。4.2 数据完整性校验与掉电保护工业现场最怕的就是掉电导致数据损坏。MRAM 虽然写入速度快但如果掉电发生在写入过程中数据仍然可能不完整。我的做法是在每个数据块后面加一个 CRC16 校验值读取时先校验再使用。具体实现上我定义了一个数据结构typedef struct { uint16_t magic; // 魔数标识数据块有效 uint16_t length; // 数据长度 uint8_t data[252]; // 实际数据 uint16_t crc; // CRC16 校验值 } DataBlock_t;每个数据块固定 256 字节正好是 MRAM 的一个自然对齐边界。写入时先计算 CRC然后一次性写入整个块。读取时先检查 magic 是否正确再校验 CRC两者都通过才认为数据有效。掉电保护方面我在 PIC18F45K42 的电源输入端加了一个大电容1000uF配合低压检测中断。当检测到电源电压低于 2.9V 时立即触发中断在电容放电的几毫秒内完成关键数据的保存。MRAM 的快速写入特性在这里发挥了关键作用——如果是 EEPROM几毫秒根本不够完成一次写入。4.3 温度补偿与长期稳定性验证MRAM 的磁隧道结特性对温度有一定的敏感性虽然数据手册标称 -40°C 到 85°C 都能正常工作但在极端温度下写入的可靠性会有所下降。我在一个户外项目中遇到过 -30°C 时写入失败的情况后来通过降低 SPI 时钟频率到 8MHz 解决了问题。长期稳定性方面我做了一个持续 6 个月的测试每 10 秒写入一次数据同时每小时读取一次并校验。6 个月下来累计写入约 155 万次没有出现一次数据错误。这个测试结果让我对 MRAM 的可靠性有了充分的信心。提示如果你需要在极端温度下使用 MRAM建议在低温时降低 SPI 时钟频率并在写入后立即回读校验。高温环境下则要注意芯片的散热虽然 MRAM 功耗很低但如果靠近发热元件仍然可能影响可靠性。5. 调试过程中遇到的典型问题与排查思路5.1 读取数据全为 0xFF 或 0x00 的排查路径这是最常见的问题通常有以下几个原因第一CS 引脚没有正确拉低。用示波器检查 CS 引脚确认在发送命令时确实被拉低了。如果 CS 一直是高电平MRAM 根本不会响应。第二SPI 模式不匹配。MR25H40CDF 支持 Mode 0 和 Mode 3如果你的主控配置成了 Mode 1 或 Mode 2数据就会错位。检查 SPI1CON1 的 CKP 和 CKE 位确保和 MRAM 的要求一致。第三MISO 引脚配置错误。PIC18F45K42 的 PPS 功能需要正确配置输入引脚映射如果 SPI1SCKPPS 设置错了MISO 就读不到数据。用示波器检查 MISO 引脚在发送读命令后应该有数据输出。第四电源电压不足。MRAM 的工作电压是 2.7V 到 3.6V如果电源只有 2.5V芯片可能无法正常工作。用万用表测量 MRAM 的 VDD 引脚确保在正常范围内。我遇到过一次特殊情况读取数据全是 0xFF排查了半天发现是 MRAM 的电源引脚虚焊了。所以硬件问题永远要优先排查不要一上来就怀疑软件。5.2 写入后数据不正确的根因分析写入后读出来不对通常有这几种可能忘记发送 WREN 命令。MRAM 的写操作必须先使能否则写入命令会被忽略。地址计算错误。24 位地址的高字节在前如果你搞反了字节序写到的位置就完全不对。CS 拉高的时机不对。必须在发送完最后一个数据字节后才能拉高 CS如果提前拉高最后一个字节可能没有写入。SPI 时钟太快。在长走线或高噪声环境下40MHz 的时钟可能导致数据错误。降到 16MHz 或 8MHz 试试。我建议在写入函数里加一个回读校验写入完成后立即读取相同地址的数据和写入的数据比对。如果不一致重试一次。这个机制在工业现场非常有用能自动恢复偶发的写入错误。5.3 SPI 通信不稳定时的硬件排查清单当 SPI 通信时好时坏按这个清单逐项排查排查项检查方法常见问题电源去耦示波器看 VDD 纹波缺少 0.1uF 电容地平面检查 PCB 地层完整性地线走线过长时钟线长度测量走线长度超过 10cm串扰观察相邻信号线MOSI/MISO 平行走线电磁干扰靠近干扰源测试继电器/电机附近接触不良轻压芯片测试虚焊或插座松动这份清单是我在多个项目中总结出来的按顺序排查90% 以上的 SPI 通信问题都能定位到。6. 从原型到量产几个容易被忽视的工程细节6.1 初始化时序与上电延迟MR25H40CDF 的上电时间很短数据手册标称 1ms 以内就能准备好。但 PIC18F45K42 的上电复位和时钟稳定需要更长时间通常是 10ms 到 100ms 取决于配置。我的做法是在 main 函数开头加一个 100ms 的延时确保 MRAM 完全准备好之后再初始化 SPI。另外MRAM 在上电后的默认状态是写禁止的所以第一次写入之前必须发送 WREN。这个细节看起来简单但我在调试时曾经因为忘记发送 WREN 而困惑了半天。6.2 批量生产时的测试方案量产测试不能只测能不能读写还要测边界条件和极端情况。我的产线测试方案包括全容量写入测试写入 512KB 的递增数据然后全部读回校验。边界地址测试测试地址 0x00000、0x7FFFF 以及中间几个关键地址。反复擦写测试对同一地址连续写入 1000 次验证数据一致性。低压测试在 2.7V 电压下进行读写测试。高温测试在 85°C 环境下进行读写测试。这套测试方案单板耗时约 30 秒能覆盖绝大多数潜在问题。我在产线上用这套方案拦截过几片焊接不良的板子避免了批量返工。6.3 固件升级时的数据迁移策略产品出厂后可能需要固件升级升级过程中如何保证存储的数据不丢失是个关键问题。我的策略是把数据区和代码区完全分开固件升级只擦除代码区数据区保持不变。具体实现上我在 MRAM 的固定地址比如 0x00000存储一个版本号和数据结构定义。固件启动时先读取这个版本号如果发现数据结构有变化就执行数据迁移程序把旧格式的数据转换成新格式。这个机制让我的产品在多次固件升级后仍然能保留用户配置和运行日志。提示数据迁移程序一定要做充分的测试特别是跨版本升级的场景。我建议在迁移前先把原始数据备份到 MRAM 的另一个区域迁移失败时可以回滚。MRAM 容量大这点备份空间完全负担得起。6.4 成本控制与替代方案评估MR25H40CDF 的价格比同容量的 EEPROM 贵不少如果项目对成本敏感可以考虑以下替代方案如果写入频率不高每天少于 100 次用 EEPROM 加铁电电容的方案更便宜。如果只需要存储少量参数小于 4KB用小容量 FRAM 更划算。如果需要大容量存储大于 1MB用 SPI Flash 加 RAM 缓存的方案成本更低。但如果你需要频繁写入、断电保存、且环境恶劣MRAM 的综合成本其实是最低的因为它省去了电池、超级电容、以及复杂的磨损均衡算法。我在一个项目中算过账用 EEPROM 方案需要加超级电容和充电电路BOM 成本反而比直接用 MRAM 高了 15%。7. 实际项目中的性能实测数据7.1 写入速度与读取速度的实测对比我在实验室环境下做了一组对比测试主控 PIC18F45K42 运行在 64MHzSPI 时钟分别设置为 8MHz、16MHz、32MHz。测试内容是写入 512KB 数据然后全部读回校验。SPI 时钟写入耗时读取耗时校验结果8MHz2.4s0.52s通过16MHz1.2s0.26s通过32MHz0.65s0.14s通过从数据可以看出写入速度大约是读取速度的 4 到 5 倍耗时。这是因为写入操作需要发送 WREN 命令而且每个字节的写入需要等待内部电路稳定。读取则是纯粹的时钟同步传输速度快得多。在实际应用中我通常选择 16MHz 的 SPI 时钟因为它在速度和稳定性之间取得了最好的平衡。32MHz 虽然更快但在长走线或噪声环境下容易出错。7.2 功耗表现与电池供电场景的适配MRAM 的功耗表现相当不错。待机电流典型值 10uA读取电流 5mA写入电流 8mA。这个功耗水平对于电池供电的设备来说是可以接受的。我在一个无线传感器节点项目中用了这套方案节点每 10 分钟唤醒一次采集数据后写入 MRAM然后进入休眠。实测下来两节 AA 电池可以支撑 18 个月比预期多了 3 个月。MRAM 的快速写入特性在这里帮了大忙——写入时间短射频模块和主控可以更快进入休眠整体功耗自然就降下来了。7.3 长期运行的数据保持验证数据保持能力是工业客户最关心的问题之一。我做过一个加速老化测试把写入了已知数据的 MRAM 放在 85°C 的恒温箱里每隔 1000 小时读取一次校验。测试持续了 5000 小时约 7 个月数据始终保持正确。按照 Arrhenius 模型推算85°C 下 5000 小时相当于 25°C 下约 80 年的数据保持时间。当然这只是理论推算实际应用中还要考虑湿度、机械应力等因素。但至少从实验室数据来看MRAM 的数据保持能力完全能满足工业设备 10 到 20 年的设计寿命要求。8. 写在最后的一些个人体会这套 MRAM 加 PIC18F45K42 的方案我从第一版原型到现在已经用了三年多累计出货几千台设备现场故障率低于 0.1%。这个成绩在工业设备里算是相当不错的。如果让我给正在考虑这个方案的同行提几条建议我会说第一不要为了省几块钱而选 EEPROM后期维护成本远高于器件差价第二PCB 布局一定要认真对待SPI 信号质量直接决定系统稳定性第三初始化代码里加上回读校验和重试机制能省去很多现场排查的麻烦第四量产测试要覆盖边界条件和极端温度别等到客户现场出问题才后悔。MRAM 这个技术路线我觉得在工业嵌入式领域还有很大的空间。随着容量提升和价格下降它很可能会逐步替代 EEPROM 在很多场景下的位置。如果你还没用过建议找个小项目试试水体验一下写入不用等的爽快感。
返回列表