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
对于支持 2 字、4 字或 8 字编程的器件,可以使用两种方法加载要编程的数据:直接模式或索引模式。编程者必须选择更适合应用要求的模式。
将数据加载到支持多字编程的器件上的 CMDDATAx 和 CMDECCx 寄存器时,还需满足其他对齐规则,即使不使用多字编程特性而仅使用单字编程。
直接加载数据
为了配置可以直接加载数据的编程操作,应根据器件支持的闪存字数、目标地址对齐方式和目标数据大小将目标数据加载到相应的 CMDDATAx 寄存器中。例如,如果要在支持四字编程的器件上启动四字编程操作,则应在 CMDDATA0-CMDDATA7 寄存器中填充目标数据。如果直接指定 ECC(而不是由闪存控制器自动计算),则相应的 CMDECCx 寄存器中还需要填充每个要编程的数据字的 ECC 值。
索引式数据加载
可以只将 CMDDATA0-CMDDATA1 寄存器与索引寄存器 (CMDDATAINDEX) 结合使用来指示所加载数据的闪存字偏移量,而不必单独将数据缓冲到所有 CMDDATAx 寄存器中。通过这种方法,可以针对加载的每个字调整索引,并且每个目标数据字都可以写入到相同的 64 位空间 (CMDDATA0-CMDDATA1)。应用索引后,硬件会将加载的数据映射到相应的 CMDDATAx 寄存器中。例如,如果要在支持四字编程的器件上启动四字编程操作,则 CMDDATA1:0 寄存器将加载 4 次目标数据,并且在每个新字加载到 CMDDATA1:0 之前,CMDDATAINDEX 都将递增 1。
对齐规则
下表给出了每种器件配置(2、4 或 8 个字)的对齐规则,并说明如何在单字、双字、四字或八字编程操作中将目标数据放置在 CMDDATAx、CMDECCx 和 CMDDATAINDEX 寄存器中。
| 直接加载寄存器 | 索引式加载索引 |
1 个字对齐到 0b000 |
2 个字对齐到 0b0000 |
4 个字对齐到 0b0.0000 |
8 个字对齐到 0b00.0000 |
|---|---|---|---|---|---|
| CMDDATA1:0 / CMDECC0 | CMDINDEX = 0 | 如果目标地址在 0b0000 中结束,则为目标数据字 0 | 目标数据字 0 | 不支持 | 不支持 |
| CMDDATA3:2 / CMDECC1 | CMDINDEX = 1 | 如果目标地址在 0b1000 中结束,则为目标数据字 0 | 目标数据字 1 |
| 直接加载寄存器 | 索引式加载索引 |
1 个字对齐到 0b000 |
2 个字对齐到 0b0000 |
4 个字对齐到 0b0.0000 |
8 个字对齐到 0b00.0000 |
|---|---|---|---|---|---|
| CMDDATA1:0 / CMDECC0 | CMDINDEX = 0 | 如果目标地址在 0b0.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b0.0000 中结束,则为目标数据字 0 | 目标数据字 0 | 不支持 |
| CMDDATA3:2 / CMDECC1 | CMDINDEX = 1 | 如果目标地址在 0b0.1000 中结束,则为目标数据字 0 | 如果目标地址在 0b0.0000 中结束,则为目标数据字 1 | 目标数据字 1 | |
| CMDDATA5:4 / CMDECC2 | CMDINDEX = 2 | 如果目标地址在 0b1.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b1.0000 中结束,则为目标数据字 0 | 目标数据字 2 | |
| CMDDATA7:6 / CMDECC3 | CMDINDEX = 3 | 如果目标地址在 0b1.1000 中结束,则为目标数据字 0 | 如果目标地址在 0b1.0000 中结束,则为目标数据字 1 | 目标数据字 3 |
| 直接加载寄存器 | 索引式加载索引 | 1 个字对齐到 0b000 | 2 个字对齐到 0b0000 | 4 个字对齐到 0b0.0000 | 8 个字对齐到 0b00.0000 |
|---|---|---|---|---|---|
| CMDDATA1:0 / CMDECC0 | CMDINDEX = 0 | 如果目标地址在 0b00.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b00.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b00.0000 中结束,则为目标数据字 0 | 目标数据字 0 |
| CMDDATA3:2 / CMDECC1 | CMDINDEX = 1 | 如果目标地址在 0b00.1000 中结束,则为目标数据字 0 | 如果目标地址在 0b00.0000 中结束,则为目标数据字 1 | 如果目标地址在 0b00.0000 中结束,则为目标数据字 1 | 目标数据字 1 |
| CMDDATA5:4 / CMDECC2 | CMDINDEX = 2 | 如果目标地址在 0b01.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b01.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b00.0000 中结束,则为目标数据字 2 | 目标数据字 2 |
| CMDDATA7:6 / CMDECC3 | CMDINDEX = 3 | 如果目标地址在 0b01.1000 中结束,则为目标数据字 0 | 如果目标地址在 0b01.0000 中结束,则为目标数据字 1 | 如果目标地址在 0b00.0000 中结束,则为目标数据字 3 | 目标数据字 3 |
| CMDDATA9:8 / CMDECC4 | CMDINDEX = 4 | 如果目标地址在 0b10.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b10.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b10.0000 中结束,则为目标数据字 0 | 目标数据字 4 |
| CMDDATA11:10 / CMDECC5 | CMDINDEX = 5 | 如果目标地址在 0b10.1000 中结束,则为目标数据字 0 | 如果目标地址在 0b10.0000 中结束,则为目标数据字 1 | 如果目标地址在 0b10.0000 中结束,则为目标数据字 1 | 目标数据字 5 |
| CMDDATA13:12 / CMDECC6 | CMDINDEX = 6 | 如果目标地址在 0b11.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b11.0000 中结束,则为目标数据字 0 | 如果目标地址在 0b10.0000 中结束,则为目标数据字 2 | 目标数据字 6 |
| CMDDATA15:14 / CMDECC7 | CMDINDEX = 7 | 如果目标地址在 0b11.1000 中结束,则为目标数据字 0 | 如果目标地址在 0b11.0000 中结束,则为目标数据字 1 | 如果目标地址在 0b10.0000 中结束,则为目标数据字 3 | 目标数据字 7 |