ZHCUAN6E October 2022 – May 2025 MSPM0L1105 , MSPM0L1106 , MSPM0L1116 , MSPM0L1117 , MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1
通常,对闪存进行编程的最简单方法是一次编程一个闪存字(如果存在 ECC,则为 64 位加 8 个 ECC 位)。可以使用 32 位、16 位或 8 位(字节)分辨率对闪存进行编程,但这样做时必须特别小心,确保以下几点:
要编程少于一个闪存字,必须配置 CMDBYTEN 寄存器,以便在开始编程操作之前指示要对闪存字中的哪些字节进行编程。CMDBYTEN 中的每个位对应于要编程的闪存字中的一个字节(包括 ECC 位)。
处理 ECC
在具有 ECC 的器件上,一次对 64 位数据进行编程可以确保同时正确地编程对应于 64 位数据字的 8 个 ECC 位。这样做可以防止在编程后 CPU 或 DMA 读取存储器位置时发生 ECC 错误。
如果计划使用 ECC 并且需要进行部分编程,一种方法是屏蔽(不编程)ECC 位,直到对闪存字的所有 64 位编程完成,此时也可以对 ECC 位进行编程。清除 CMDBYTEN 寄存器中的 BIT8 (0x100) 即可屏蔽 ECC 位的编程。这样做可以防止在每次执行编程操作以重新编程 ECC 位来匹配新的 64 位数据时,必须擦除整个扇区的情况。但是,在这种情况下,如果读取已部分编程的字,但尚未写入 ECC 位,则会导致 ECC 错误。为了避免 ECC 错误,软件必须等到写入完整的 64 位闪存字和 8 个 ECC 位,或者从未校正的地址空间中读取数据。
擦除前每个字线的最大编程操作数
器件数据表指明了在需要擦除包含字线的扇区之前每条字线的编程操作数量的最大限制。超过此最大值可能会导致字线内的数据损坏。
如果执行 16 位或更大的编程操作,并且在擦除扇区之前没有对 16 位位置进行多次编程,则始终不会达到最大限制,因此不需要考虑该限制。
如果执行 8 位(字节)编程操作,则必须考虑每条字线的最大编程限制,并且不能超过该限制。在 ECC 位置执行的编程操作与其他编程操作无关时将计入写入次数,直到需要进行擦除。
执行少于一个闪存字的编程操作
要向闪存存储器的地址 0x1000 编程 16 位数据: