MICROCHIP PIC24 闪存编程
产品信息
闪存编程
dsPIC33/PIC24 系列器件具有用于执行用户代码的内部可编程闪存程序存储器。 最多可以使用三种方法对该存储器进行编程:
- 表指令操作
- 在线串行编程 (ICSP)
- 在应用程序编程 (IAP)
表指令提供了在 dsPIC33/PIC24 器件的闪存程序存储空间和数据存储空间之间传输数据的方法。 TBLRDL 指令用于读取程序存储空间的位[15:0]。 TBLWTL 指令用于写入 Flash 程序存储空间的位[15:0]。 TBLRDL 和 TBLWTL 可以以字模式或字节模式访问 Flash 程序存储器。
除了 Flash 程序存储器地址外,表指令还指定了一个 W 寄存器(或指向存储器位置的 W 寄存器指针),即要写入的 Flash 程序存储器数据的来源,或 Flash 程序的目标内存读取。
本节介绍对闪存程序存储器进行编程的技术。 dsPIC33/PIC24 系列器件具有用于执行用户代码的内部可编程闪存程序存储器。 最多可以使用三种方法对该存储器进行编程:
- 运行时自编程 (RTSP)
- 在线串行编程™ (ICSP™)
- 增强型在线串行编程 (EICSP)
RTSP 由应用软件在执行期间执行,而 ICSP 和 EICSP 由外部编程器使用与设备的串行数据连接执行。 ICSP 和 EICSP 的编程时间比 RTSP 快得多。 RTSP 技术在第 4.0 节“运行时自编程(RTSP)”中进行了描述。 ICSP 和 EICSP 协议在相应器件的编程规范文档中定义,可从 Microchip 下载 web网站(http://www.microchip.com). 当使用 C 语言编程时,有几个内置函数可用于促进 Flash 编程。 有关内置函数的详细信息,请参见“MPLAB® XC16 C 编译器用户指南”(DS50002071)。
产品使用说明
要对闪存程序存储器进行编程,请按照以下步骤操作:
- 请参阅器件数据表以检查系列参考手册部分是否支持您正在使用的器件。
- 从 Microchip Worldwide 下载器件数据表和系列参考手册部分 Web网站位于: http://www.microchip.com.
- 选择三种方法之一对存储器进行编程(表指令操作、在线串行编程 (ICSP)、在应用程序编程 (IAP))。
- 如果使用表指令操作,则使用 TBLRDL 指令从程序存储空间的位 [15:0] 读取,使用 TBLWTL 指令写入闪存程序存储空间的位 [15:0]。
- 确保将 W 寄存器(或指向存储器位置的 W 寄存器指针)指定为要写入的闪存程序存储器数据的源,或闪存程序存储器读取的目标。
有关编程闪存程序存储器的更多信息和详细信息,请参阅 dsPIC33/PIC24 系列参考手册。
表指令操作
表指令提供了在 dsPIC33/PIC24 器件的闪存程序存储空间和数据存储空间之间传输数据的方法。 本节提供了对闪存程序存储器编程期间使用的表指令的总结。 有四种基本的表格指令:
- TBLRDL: 表读低
- 待定: 表读高
- 待定: 表写低
- 待定: 表写高
TBLRDL 指令用于读取程序存储空间的位[15:0]。 TBLWTL 指令用于写入 Flash 程序存储空间的位[15:0]。 TBLRDL 和 TBLWTL 可以以字模式或字节模式访问 Flash 程序存储器。
TBLRDH 和 TBLWTH 指令用于读取或写入程序存储空间的位[23:16]。 TBLRDH 和 TBLWTH 可以以字或字节模式访问闪存程序存储器。 因为闪存程序存储器只有 24 位宽,所以 TBLRDH 和 TBLWTH 指令可以寻址不存在的闪存程序存储器的高位字节。 这个字节被称为“幻影字节”。 对幻像字节的任何读取都将返回 0x00。 写入幻像字节无效。 24 位闪存程序存储器可以看作是两个并排的 16 位空间,每个空间共享相同的地址范围。 因此,TBLRDL 和 TBLWTL 指令访问“低”程序存储空间 (PM[15:0])。 TBLRDH 和 TBLWTH 指令访问“高”程序存储空间 (PM[31:16])。 对 PM[31:24] 的任何读取或写入都将访问幻像(未实现)字节。 当在字节模式下使用任何表指令时,表地址的最低有效位 (LSb) 将用作字节选择位。 LSb 决定访问程序存储空间高位或低位中的哪个字节。
图 2-1 说明了如何使用表指令寻址闪存程序存储器。 使用 TBLPAG 寄存器的位 [24:7] 和表指令中指定的 W 寄存器的有效地址 (EA) 形成 0 位程序存储器地址。 24 位程序计数器 (PC) 如图 2-1 所示,供参考。 EA 的高 23 位用于选择闪存程序存储器位置。
对于字节模式表指令,W 寄存器 EA 的 LSb 用于选择寻址 16 位闪存程序存储器字的哪个字节; “1”选择位 [15:8],“0”选择位 [7:0]。 对于字模式下的表指令,忽略 W 寄存器 EA 的 LSb。 除了 Flash 程序存储器地址外,表指令还指定了一个 W 寄存器(或指向存储器位置的 W 寄存器指针),即要写入的 Flash 程序存储器数据的来源,或 Flash 程序的目标内存读取。 对于字节模式下的表写操作,源工作寄存器的位 [15:8] 将被忽略。
使用表格读取指令
读表需要两步:
- 地址指针使用 TBLPAG 寄存器和 W 寄存器之一设置。
- 可以读取地址位置的闪存程序存储器内容。
- 读字模式
Ex中显示的代码ample 2-1 和 Examp图 2-2 显示了如何在字模式下使用表指令读取闪存程序存储器的一个字。 - 读字节模式
Ex中显示的代码amp图 2-3 显示了读取低字节时的后递增运算符,它使工作寄存器中的地址递增 0。 这将 EA[1] 设置为“0”以访问第三个写指令中的中间字节。 最后的后递增将 WXNUMX 设置回偶数地址,指向下一个闪存程序存储器位置。 - 表写锁存器
写表指令不会直接写入非易失性程序存储器。 相反,表写指令加载存储写数据的写锁存器。 NVM 地址寄存器必须加载要写入锁存数据的第一个地址。 当所有的写锁存器都被加载后,实际的内存编程操作通过执行一个特殊的指令序列开始。 在编程期间,硬件将写锁存器中的数据传输到闪存。 写锁存器始终从地址 0xFA0000 开始,并通过 0xFA0002 进行字编程,或通过 0xFA00FE 进行行编程。
笔记: 写锁存器的数量因设备而异。 有关可用写锁存器的数量,请参见具体器件数据手册的“闪存程序存储器”一章。
控制寄存器
几个特殊功能寄存器 (SFR) 用于对闪存程序存储器擦除和写入操作进行编程:NVMCON、NVMKEY 和 NVM 地址寄存器 NVMADR 和 NVMADRU。
NVMCON 寄存器
NVMCON 寄存器是闪存和编程/擦除操作的主要控制寄存器。 该寄存器选择是否执行擦除或编程操作,并可以启动编程或擦除周期。 NVMCON 寄存器如寄存器 3-1 所示。 NVMCON 的低字节配置将要执行的 NVM 操作的类型。
NVMKEY 寄存器
NVMKEY 寄存器(见寄存器 3-4)是一个只写寄存器,用于防止意外写入可能损坏闪存的 NVMCON。 解锁后,允许在一个指令周期内写入 NVMCON,在该指令周期内可以设置 WR 位以调用擦除或编程例程。 鉴于时序要求,需要禁用中断。
执行以下步骤以启动擦除或编程序列:
- 禁用中断。
- 将 0x55 写入 NVMKEY。
- 将 0xAA 写入 NVMKEY。
- 通过设置 WR 位 (NVMCON[15]) 启动编程写周期。
- 执行两条 NOP 指令。
- 恢复中断。
禁用中断
所有闪存操作都需要禁用中断以确保成功。 如果在 NVMKEY 解锁序列期间发生中断,它会阻止写入 WR 位。 NVMKEY 解锁序列必须不间断地执行,如第 3.2 节“NVMKEY 寄存器”中所述。
可以通过以下两种方法之一禁用中断,即禁用全局中断启用(GIE 位)或使用 DISI 指令。 不推荐使用 DISI 指令,因为它只能禁止优先级为 6 或以下的中断; 因此,应该使用全局中断使能方法。
在影响代码流之前,CPU 写入 GIE 需要两个指令周期。 之后需要两条 NOP 指令,或者可以用任何其他有用的工作指令代替,例如加载 NVMKEY; 这适用于设置和清除操作。 重新启用中断时应小心,以便 NVM 目标例程在先前调用的函数因其他原因禁用中断时不允许中断。 为了在汇编中解决这个问题,可以使用堆栈推送和弹出来保留 GIE 位的状态。 在 C 中,RAM 中的一个变量可用于在清除 GIE 之前存储 INTCON2。 使用以下序列禁用中断:
- 将 INTCON2 压入堆栈。
- 清除 GIE 位。
- 两次 NOP 或写入 NVMKEY。
- 通过设置 WR 位 (NVMCON[15]) 来启动编程周期。
- 通过 INTCON2 的 POP 恢复 GIE 状态。
NVM 地址寄存器
两个 NVM 地址寄存器 NVMADRU 和 NVMADR 连接在一起时,形成用于编程操作的选定行或字的 24 位 EA。 NVMADRU寄存器用于保存EA的高16位,NVMADR寄存器用于保存EA的低XNUMX位。 某些设备可能将这些相同的寄存器称为 NVMADRL 和 NVMADRH。 NVM 地址寄存器在执行双指令字编程操作时应始终指向双指令字边界,在执行行编程操作时应始终指向行边界,在执行页擦除操作时应始终指向页边界。
寄存器 3-1: NVMCON:闪存控制寄存器
笔记
- 该位只能在上电复位 (POR) 时复位(即清除)。
- 退出空闲模式时,在闪存程序存储器开始运行之前有一个上电延迟 (TVREG)。 有关详细信息,请参阅具体器件数据手册的“电气特性”一章。
- NVMOP[3:0] 的所有其他组合均未实现。
- 此功能并非在所有设备上都可用。 有关可用操作,请参见具体器件数据手册中的“闪存程序存储器”一章。
- 执行 PWRSAV 指令后进入节能模式取决于所有挂起的 NVM 操作是否完成。
- 该位仅在支持 RAM 缓冲行编程的设备上可用。 有关可用性,请参阅特定于器件的数据表。
笔记
- 该位只能在上电复位 (POR) 时复位(即清除)。
- 退出空闲模式时,在闪存程序存储器开始运行之前有一个上电延迟 (TVREG)。 有关详细信息,请参阅具体器件数据手册的“电气特性”一章。
- NVMOP[3:0] 的所有其他组合均未实现。
- 此功能并非在所有设备上都可用。 有关可用操作,请参见具体器件数据手册中的“闪存程序存储器”一章。
- 执行 PWRSAV 指令后进入节能模式取决于所有挂起的 NVM 操作是否完成。
- 该位仅在支持 RAM 缓冲行编程的设备上可用。 有关可用性,请参阅特定于器件的数据表。
寄存器 3-2: NVMADRU:非易失性存储器高位地址寄存器
寄存器 3-3: NVMADR:非易失性存储器地址寄存器
寄存器 3-4: NVMKEY:非易失性存储器密钥寄存器
运行时自编程 (RTSP)
RTSP 允许用户应用程序修改闪存程序存储器的内容。 RTSP 是使用 TBLRD(读表)和 TBLWT(写表)指令、TBLPAG 寄存器和 NVM 控制寄存器来完成的。 使用 RTSP,用户应用程序可以擦除单页闪存并在某些器件上编程两个指令字或最多 128 个指令字。
RTSP操作
dsPIC33/PIC24 闪存程序存储器阵列被组织成最多可包含 1024 条指令的擦除页。 双字编程选项在 dsPIC33/PIC24 系列的所有器件中均可用。 此外,某些器件具有行编程能力,允许一次编程多达 128 个指令字。 编程和擦除操作总是发生在偶数双编程字、行或页边界上。 有关编程行的可用性和大小以及用于擦除的页面大小,请参阅特定器件数据手册的“闪存程序存储器”一章。 闪存程序存储器实现了称为写锁存器的保持缓冲区,根据器件的不同,它最多可以包含 128 条编程数据指令。 在实际编程操作之前,写数据必须加载到写锁存器中。 RTSP 的基本顺序是设置表指针、TBLPAG 寄存器,然后执行一系列 TBLWT 指令加载写锁存器。 通过设置 NVMCON 寄存器中的控制位来执行编程。 加载写锁存器所需的 TBLWTL 和 TBLWTH 指令数等于要写入的程序字数。
笔记: 建议修改前保存 TBLPAG 寄存器,使用后恢复。
警告
在某些器件上,配置位存储在程序闪存用户存储空间的最后一页中称为“闪存配置字节”的部分中。 对于这些器件,对程序存储器的最后一页执行页面擦除操作会擦除闪存配置字节,从而实现代码保护。 因此,用户不应对程序存储器的最后一页进行页擦除操作。 当配置位存储在称为“设备配置寄存器”的部分的配置存储空间中时,这不是问题。 请参阅特定器件数据手册“存储器组织”一章中的程序存储器映射以确定配置位的位置。
闪存编程操作
在 RTSP 模式下编程或擦除内部闪存程序存储器需要编程或擦除操作。 编程或擦除操作由器件自动计时(有关计时信息,请参阅具体器件数据手册)。 设置 WR 位 (NVMCON[15]) 开始操作。 WR 位在操作完成时自动清零。 CPU 停止,直到编程操作完成。 CPU 在此期间不会执行任何指令或响应中断。 如果在编程周期期间发生任何中断,它们将保持挂起状态直到周期完成。 一些 dsPIC33/PIC24 器件可能提供辅助闪存程序存储器(有关详细信息,请参见具体器件数据手册的“存储器结构”一章),这允许在擦除和/或编程用户闪存程序存储器时执行指令而不会出现 CPU 停顿。 相反,只要从用户闪存程序存储器执行代码,就可以在没有 CPU 停顿的情况下对辅助闪存程序存储器进行编程。 NVM 中断可用于指示编程操作完成。
笔记
- 如果在 RTSP 擦除或编程操作正在进行时发生 POR 或 BOR 事件,RTSP 操作将立即中止。 用户应该在设备退出 Reset 后再次执行 RTSP 操作。
- 如果在 RTSP 擦除或编程操作正在进行时发生 EXTR、SWR、WDTO、TRAPR、CM 或 IOPUWR 复位事件,则器件将仅在 RTSP 操作完成后复位。
RTSP 编程算法
本节介绍 RTSP 编程,它包括三个主要过程。
创建要修改的数据页的 RAM 映像
执行以下两个步骤以创建要修改的数据页的 RAM 映像:
- 读取 Flash 程序存储器的页面并将其作为数据“图像”存储到数据 RAM 中。 必须从页面地址边界开始读取 RAM 映像。
- 根据需要修改 RAM 数据映像。
擦除闪存程序存储器
完成上述步骤 1 和 2 后,执行以下四个步骤擦除 Flash 程序存储器页:
- 设置 NVMOP[3:0] 位 (NVMCON[3:0]) 以擦除从第 1 步读取的闪存程序存储器页面。
- 将要擦除的页的起始地址写入 NVMADRU 和 NMVADR 寄存器。
- 禁用中断:
- a) 将密钥序列写入 NVMKEY 寄存器以启用设置 WR 位 (NVMCON[15])。
- b) 设置 WR 位; 这将开始擦除周期。
- c) 执行两条 NOP 指令。
- WR 位在擦除周期完成时清零。
闪存页面编程
该过程的下一部分是对闪存页面进行编程。 使用步骤 1 中创建的映像中的数据对闪存页面进行编程。数据以双指令字或行的增量传输到写锁存器。 所有器件都具有双指令字编程能力。 (请参阅具体器件数据手册中的“闪存程序存储器”一章,以确定行编程是否可用以及可用的类型。)加载写锁存器后,启动编程操作,将数据从将锁存器写入闪存。 重复此操作,直到整个页面都已编程。 重复以下三个步骤,从闪存页面的第一个指令字开始,以双编程字或指令行的步长递增,直到整个页面都被编程:
- 加载写锁存器:
- a) 将 TBLPAG 寄存器设置为指向写锁存器的位置。
- b) 使用成对的 TBLWTL 和 TBLWTH 指令加载所需数量的锁存器:
- 对于双字编程,需要两对 TBLWTL 和 TBLWTH 指令
- 对于行编程,每个指令字行元素需要一对 TBLWTL 和 TBLWTH 指令
- 启动编程操作:
- a) 设置 NVMOP[3:0] 位 (NVMCON[3:0]) 以根据需要对双指令字或指令行进行编程。
b) 将要编程的双指令字或指令行的首地址写入 NVMADRU 和 NVMADR 寄存器。
c) 禁用中断:
• 将按键序列写入 NVMKEY 寄存器以启用设置 WR 位 (NVMCON[15])
• 设置WR 位; 这将开始擦除周期
• 执行两条NOP指令
- a) 设置 NVMOP[3:0] 位 (NVMCON[3:0]) 以根据需要对双指令字或指令行进行编程。
- WR 位在编程周期完成时清零。
根据需要重复整个过程,以编程所需数量的闪存程序存储器。
笔记
- 用户应该记住,可以使用 RTSP 擦除的闪存程序存储器的最小量是单个擦除页。 因此,在启动擦除周期之前将这些位置的映像存储在通用 RAM 中非常重要。
- 闪存程序存储器中的行或字在被擦除之前不应被编程超过两次。
- 在配置字节存储在闪存最后一页的器件上,对程序存储器的最后一页执行页面擦除操作会清除配置字节,从而实现代码保护。 在这些设备上,不应擦除闪存的最后一页。
擦除一页闪存
Ex中显示的代码序列ample 4-1 可用于擦除闪存程序存储器的一页。 NVMCON 寄存器配置为擦除一页程序存储器。 NVMADR 和 NMVADRU 寄存器加载了要擦除的页面的起始地址。 必须在“偶数”页地址边界擦除程序存储器。 请参见具体器件数据手册的“闪存程序存储器”一章以确定闪存页面的大小。
擦除操作是通过在设置 WR 位 (NVMCON[15]) 之前向 NVMKEY 寄存器写入一个特殊的解锁或密钥序列来启动的。 解锁序列需要按照准确的顺序执行,如Ex所示ample 4-1,没有中断; 因此,必须禁用中断。
擦除周期后应在代码中插入两条 NOP 指令。 在某些器件上,配置位存储在程序闪存的最后一页中。 对于这些器件,对程序存储器的最后一页执行页面擦除操作会擦除闪存配置字节,从而实现代码保护。 用户不应对程序存储器的最后一页执行页擦除操作。
加载写锁存器
写锁存器用作用户应用程序表写入和实际编程序列之间的存储机制。 在编程操作期间,设备会将数据从写锁存器传输到闪存中。 对于支持行编程的设备,Examp图 4-3 显示了可用于加载 128 个写锁存器(128 个指令字)的指令序列。 需要 128 条 TBLWTL 和 128 条 TBLWTH 指令来加载写入锁存器以对一行闪存程序存储器进行编程。 请参阅特定器件数据手册的“闪存程序存储器”一章,以确定器件上可用的编程锁存器的数量。 对于不支持行编程的设备,Examp图 4-4 显示了可用于加载两个写锁存器(两个指令字)的指令序列。 加载写锁存器需要两条 TBLWTL 和两条 TBLWTH 指令。
笔记
- Load_Write_Latch_Row 的代码如 Ex 所示ample 4-3 和 Load_Write_Latch_Word 的代码显示在 Examp乐 4-4。 这两个例子中的代码amples 在随后的 ex 中被引用amp莱斯。
- 有关锁存器的数量,请参见具体的器件数据手册。
单行编程 EXAMPLE
NVMCON 寄存器配置为对一行闪存程序存储器进行编程。 在设置 WR 位 (NVMCON[15]) 之前,通过向 NVMKEY 寄存器写入一个特殊的解锁或密钥序列来启动程序操作。 解锁序列需要不间断地执行,并按照确切的顺序执行,如 Ex 所示amp乐 4-5。 因此,必须在写入序列之前禁用中断。
笔记: 并非所有设备都具有行编程功能。 请参考具体器件数据手册的“闪存程序存储器”一章以确定该选项是否可用。
应在编程周期后的代码中插入两条 NOP 指令。
使用 RAM 缓冲区的行编程
选择 dsPIC33 器件允许直接从数据 RAM 中的缓冲区空间执行行编程,而不是通过保持锁存器使用 TBLWT 指令传输数据。 RAM 缓冲区的位置由 NVMSRCADR 寄存器确定,这些寄存器加载了包含要写入的程序数据的第一个字的数据 RAM 地址。
在执行编程操作之前,RAM 中的缓冲区空间必须加载要编程的数据行。 RAM 可以压缩(打包)或未压缩格式加载。 压缩存储使用一个数据字来存储两个相邻程序数据字的最高有效字节 (MSB)。 未压缩格式为每个程序数据字使用两个数据字,每隔一个字的高位字节为 00h。 与未压缩格式相比,压缩格式使用大约 3/4 的数据 RAM 空间。 另一方面,未压缩格式模仿 24 位程序数据字的结构,并带有高位虚拟字节。 数据格式由 RPDF 位 (NVMCON[9]) 选择。 这两种格式如图 4-1 所示。
加载 RAM 缓冲区后,闪存地址指针 NVMADR 和 NVMADRU 将加载要写入的闪存行的 24 位起始地址。 与对写锁存器编程一样,该过程通过写入 NVM 解锁序列启动,然后设置 WR 位。 启动后,设备会自动加载正确的锁存器并递增 NVM 地址寄存器,直到所有字节都已编程。 前任ample 4-7 显示前任amp过程的乐。 如果 NVMSRCADR 设置的值导致数据欠载错误情况发生,则 URERR 位 (NVMCON[8]) 将被设置以指示该情况。
实现 RAM 缓冲区行编程的设备也实现了一个或两个写锁存器。 这些是使用 TBLWT 指令加载的,用于执行字编程操作。
字编程
NVMCON 寄存器配置为编程闪存程序存储器的两个指令字。 在设置 WR 位 (NVMCON[15]) 之前,通过向 NVMKEY 寄存器写入一个特殊的解锁或密钥序列来启动程序操作。 解锁序列需要按照准确的顺序执行,如Ex所示ample 4-8,没有中断。 因此,应在写入序列之前禁用中断。
应在编程周期后的代码中插入两条 NOP 指令。
写入设备配置寄存器
在某些器件上,配置位存储在称为“器件配置寄存器”的部分的配置存储空间中。 在其他器件上,配置位存储在程序闪存用户存储空间的最后一页中称为“闪存配置字节”的部分中。 对于这些器件,对程序存储器的最后一页执行页面擦除操作会擦除闪存配置字节,从而实现代码保护。 因此,用户不应对程序存储器的最后一页进行页擦除操作。 请参阅特定器件数据手册“存储器组织”一章中的程序存储器映射以确定配置位的位置。
当配置位存储在配置存储空间中时,RTSP 可用于写入器件配置寄存器,RTSP 允许单独重写每个配置寄存器,而无需先执行擦除周期。 写入配置寄存器时必须小心,因为它们控制着关键的器件操作参数,例如系统时钟源、PLL 和 WDT 使能。
对器件配置寄存器进行编程的过程类似于对闪存程序存储器进行编程的过程,只是只需要 TBLWTL 指令。 这是因为每个器件配置寄存器的高八位未使用。 此外,必须设置写表地址的第 23 位才能访问配置寄存器。 有关器件配置寄存器的完整说明,请参见《dsPIC70000618/PIC33 系列参考手册》中的“器件配置”(DS24)和具体器件数据手册中的“特殊功能”一章。
笔记
- 写入设备配置寄存器并非在所有设备中都可用。 请参阅特定器件数据手册中的“特殊功能”一章,以确定根据器件特定 NVMOP[3:0] 位的定义可用的模式。
- 在器件配置寄存器上执行 RTSP 时,器件必须使用内部 FRC 振荡器(无 PLL)运行。 如果器件使用不同的时钟源运行,则必须先将时钟切换到内部 FRC 振荡器 (NOSC[2:0] = 000),然后再在器件配置寄存器中执行 RTSP 操作。
- 如果振荡器配置寄存器 (FOSC) 中的主振荡器模式选择位 (POSCMD[1:0]) 被重新编程为新值,用户必须确保时钟切换模式位 (FCKSM[1:0])在执行此 RTSP 操作之前,FOSC 寄存器的初始编程值为“0”。
配置寄存器写入算法
总体流程如下:
- 使用 TBLWTL 指令将新配置值写入表写锁存器。
- 配置 NVMCON 以进行配置寄存器写入 (NVMCON = 0x4000)。
- 将要编程的配置寄存器的地址写入 NVMADRU 和 NVMADR 寄存器。
- 禁用中断(如果启用)。
- 将按键序列写入 NVMKEY 寄存器。
- 通过设置 WR 位 (NVMCON[15]) 启动写序列。
- 如果需要,重新启用中断。
Examp图 4-10 显示了可用于修改器件配置寄存器的代码序列。
寄存器映射
表 5-1 中提供了与闪存编程相关的寄存器汇总。
本节列出了与本手册这一部分相关的应用笔记。 这些应用笔记可能不是专门为 dsPIC33/PIC24 产品系列编写的,但概念是相关的,可以在修改和可能的限制下使用。 当前与闪存编程相关的应用笔记有:
笔记: 请访问微芯 web网站(www.microchip.com)额外的应用笔记和代码前ampdsPIC33/PIC24 系列器件的文件。
修订历史
修订版 A(2009 年 XNUMX 月)
这是本文档的初始发布版本。
修订版 B(2011 年 XNUMX 月)
此修订包括以下更新:
- Examp莱斯:
- 删除前ample 5-3 和 Examp乐 5-4
- 更新前amp乐 4-1,前ample 4-5 和 Examp乐 4-10
- 对#WR 的任何引用都已更新为 Ex 中的#15amp乐 4-1,前ample 4-5 和 Examp乐 4-8
- 更新了 Ex 中的以下内容amp乐 4-3:
- 将标题“字编程”更新为“为行编程加载写锁存器”
- 任何对#ram_image 的引用都已更新为#0xFA
- 添加前amp乐 4-4
- 更新了 Ex 中的标题amp乐 4-8
- 笔记:
- 在第 4.2 节“闪存编程操作”中添加了两个注释
- 更新了第 4.5.2 节“加载写锁存器”中的注释
- 在第 4.6 节“写入器件配置寄存器”中添加了三个注释
- 在表 1-5 中增加注 1
- 寄存器:
- 更新了 NVMOP[3:0] 的位值:闪存控制(NVMCON)寄存器中的 NVM 操作选择位(见寄存器 3-1)
- 章节:
- 删除了第 5.2.1.4 节“写字模式”和 5.2.1.5 节“写字节模式”
- 更新了第 3.0 节“控制寄存器”
- 更新了第 4.5.5 节“字编程”中的以下内容:
- 将章节标题“编程一个字的闪存”更改为“字编程”
- 更新了第一段
- 将第二段中的术语“一个词”更改为“一对词”
- 在第 1 节“配置寄存器写入算法”中添加了新的步骤 4.6.1
- 表格:
- 更新了表 5-1
- 对程序存储器的一些引用已更新为闪存程序存储器
- 其他次要更新,例如语言和格式更新,已包含在整个文档中
修订版 C(2011 年 XNUMX 月)
此修订包括以下更新:
- Examp莱斯:
- 更新前amp乐 4-1
- 更新前amp乐 4-8
- 笔记:
- 在第 4.1 节“RTSP 操作”中添加了注释
- 在第 3 节“Flash 编程操作”中添加了注释 4.2
- 在第 3 节“RTSP 编程算法”中添加了注释 4.2.1
- 在第 4.5.1 节“擦除闪存的一页”中添加了注释
- 在第 2 节“加载写锁存器”中添加了注释 4.5.2
- 寄存器:
- 更新了非易失性存储器地址寄存器中位 15-0 的位描述(见寄存器 3-3)
- 章节:
- 更新了第 4.1 节“RTSP 操作”
- 更新了第 4.5.5 节“字编程”
- 其他次要更新,例如语言和格式更新,已包含在整个文档中
修订版 D(2011 年 XNUMX 月)
此修订包括以下更新:
- 更新了第 2.1.3 节“表写锁存器”
- 更新了第 3.2 节“NVMKEY 寄存器”
- 更新了 NVMCON 中的注释:闪存控制寄存器(见寄存器 3-1)
- 在第 4.0 节“运行时自编程 (RTSP)”中进行了大量更新
- 其他次要更新,例如语言和格式更新,已包含在整个文档中
版本 E(2018 年 XNUMX 月)
此修订包括以下更新:
- 添加前amp乐 2-2,前amp乐 4-2,前ample 4-6 和 Examp乐 4-9
- 添加了第 4.5.4 节“使用 RAM 缓冲区进行行编程”
- 更新了第 1.0 节“简介”、第 3.3 节“NVM 地址寄存器”、第 4.0 节“运行时自编程(RTSP)”和第 4.5.3 节“单行编程示例”amp这”
- 更新了寄存器 3-1
- 更新前amp乐 4-7
- 更新了表 5-1
修订版 F(2021 年 XNUMX 月)
添加了第 3.2.1 节“禁止中断”。
更新前amp乐 3-1,前amp乐 4-1,前amp乐 4-2,前amp乐 4-5,前amp乐 4-6,前amp乐 4-7,前amp乐 4-8,前ample 4-9 和 Examp乐 4-10。
更新了第 3.2 节“NVMKEY 寄存器”、第 4.5.1 节“擦除闪存的一页”、第 4.5.3 节“单行编程示例”ample”和第 4.6.1 节“配置寄存器写入算法”。
请注意 Microchip 产品的代码保护功能的以下详细信息:
- Microchip 产品符合其特定 Microchip 数据手册中所包含的规格。
- Microchip 相信,其产品系列在按照预期方式、符合操作规范和在正常条件下使用时是安全的。
- Microchip 重视并积极保护其知识产权。 严禁尝试违反 Microchip 产品的代码保护功能,这可能违反《数字千年版权法》。
- Microchip 或任何其他半导体制造商都不能保证其代码的安全性。 代码保护并不意味着我们保证产品“牢不可破”。 代码保护在不断发展。 Microchip 致力于不断改进我们产品的代码保护功能
本出版物及其信息仅可用于 Microchip 产品,包括设计、测试 Microchip 产品并将其与您的应用程序集成。 以任何其他方式使用此信息均违反这些条款。 有关设备应用程序的信息仅为您提供方便而提供,可能会被更新所取代。 您有责任确保您的应用程序符合您的规范。 如需更多支持,请联系您当地的 Microchip 销售办事处,或通过以下网址获取更多支持 https://www.microchip.com/en-us/support/design-help/client-supportservices.
此信息由 MICROCHIP“按原样”提供。 MICROCHIP 不作任何与信息相关的明示或暗示、书面或口头、法定或其他形式的陈述或保证,包括但不限于对非侵权、适销性和特定用途适用性的任何默示保证,或相关保证它的状况、质量或性能。 在任何情况下,MICROCHIP 均不对与信息或其使用相关的任何类型的任何间接、特殊、惩罚性、偶然或后果性损失、损害、成本或费用负责,即使 MICROCHIP 已被告知可能性或损害是可预见的。 在法律允许的最大范围内,MICROCHIP 对以任何方式与信息或其使用相关的所有索赔的全部责任将不超过您为信息直接向 MICROCHIP 支付的费用金额(如果有)。
在生命支持和/或安全应用中使用 Microchip 设备的风险完全由买方承担,买方同意为 Microchip 辩护、赔偿并免除其因此类使用而导致的任何和所有损害、索赔、诉讼或费用。除非另有说明,否则不会以任何方式(隐含或以其他方式)转让任何 Microchip 知识产权许可。
有关 Microchip 质量管理体系的信息,请访问 www.microchip.com/quality.
商标
Microchip 名称和徽标、Microchip 徽标、Adaptec、AnyRate、AVR、AVR 徽标、AVR Freaks、BesTime、BitCloud、CryptoMemory、CryptoRF、dsPIC、flexPWR、HELDO、IGLOO、JukeBlox、KeeLoq、Kleer、LANCheck、LinkMD、maXStylus、 maXTouch、MediaLB、megaAVR、Microsemi、Microsemi 徽标、MOST、MOST 徽标、MPLAB、OptoLyzer、PIC、picoPower、PICSTART、PIC32 徽标、PolarFire、Prochip Designer、QTouch、SAM-BA、SenGenuity、SpyNIC、SST、SST 徽标、SuperFlash 、Symmetricom、SyncServer、Tachyon、TimeSource、tinyAVR、UNI/O、Vectron 和 XMEGA 是 Microchip Technology Incorporated 在美国和其他国家/地区的注册商标。 AgileSwitch、APT、ClockWorks、嵌入式控制解决方案公司、EtherSynch、Flashtec、Hyper Speed Control、HyperLight Load、IntelliMOS、Libero、motorBench、mTouch、Powermite 3、Precision Edge、ProASIC、ProASIC Plus、ProASIC Plus 徽标、Quiet-Wire、 SmartFusion、SyncWorld、Temux、TimeCesium、TimeHub、TimePictra、TimeProvider、TrueTime、WinPath 和 ZL 是 Microchip Technology Incorporated 在美国的注册商标
相邻密钥抑制、AKS、模拟数字时代、任何电容器、AnyIn、AnyOut、增强开关、BlueSky、BodyCom、CodeGuard、CryptoAuthentication、CryptoAutomotive、CryptoCompanion、CryptoController、dsPICDEM、dsPICDEM.net、动态平均匹配、DAM , ECAN, Espresso T1S, EtherGREEN, GridTime, IdealBridge, 在线串行编程, ICSP, INICnet, 智能并行, 芯片间连接, JitterBlocker, Knob-on-Display, maxCrypto, maxView, memBrain, Mindi, MiWi, MPASM, MPF, MPLAB Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach, NVM Express, NVMe, Omniscient Code Generation, PICDEM, PICDEM.net, PICkit, PICtail, PowerSmart, PureSilicon, QMatrix, REAL ICE , Ripple Blocker, RTAX, RTG4, SAM-ICE, Serial Quad I/O, simpleMAP, SimpliPHY, SmartBuffer, SmartHLS, SMART-IS, storClad, SQI, SuperSwitcher, SuperSwitcher II, Switchtec, SynchroPHY, Total Endurance, TSHARC, USBCheck, VariSense、VectorBlox、VeriPHY、 ViewSpan、WiperLock、XpressConnect 和 ZENA 是 Microchip Technology Incorporated 在美国和其他国家/地区的商标。
SQTP 是美国 Microchip Technology Incorporated 的服务标志
Adaptec 徽标、Frequency on Demand、Silicon Storage Technology、Symmcom 和 Trusted Time 是 Microchip Technology Inc. 在其他国家/地区的注册商标。
GestIC 是 Microchip Technology Inc. 的子公司 Microchip Technology Germany II GmbH & Co. KG 在其他国家的注册商标。
本文提及的所有其他商标均属于其各自公司的财产。
© 2009-2021,Microchip Technology Incorporated 及其子公司。
版权所有。
ISBN: 978-1-5224-9314-3
全球销售和服务
美洲
- 公司办公室
西钱德勒大道 2355 号
亚利桑那州钱德勒 85224-6199
电话: 480-792-7200
传真: 480-792-7277
技术支援: http://www.microchip.com/
支持 Web 地址: www.microchip.com - 亚特兰大
乔治亚州德卢斯
电话: 678-957-9614
传真: 678-957-1455 - 德克萨斯州奥斯汀
电话: 512-257-3370 - 波士顿
马萨诸塞州韦斯特伯勒
电话: 774-760-0087
传真: 774-760-0088 - 芝加哥
伊利诺伊州伊塔斯卡
电话: 630-285-0071
传真: 630-285-0075 - 达拉斯
德克萨斯州艾迪生
电话: 972-818-7423
传真: 972-818-2924 - 底特律
密歇根州诺维
电话: 248-848-4000 - 德克萨斯州休斯顿
电话: 281-894-5983 - 印第安纳波利斯
印第安纳州诺布尔斯维尔
电话: 317-773-8323
传真: 317-773-5453
电话: 317-536-2380 - 洛杉矶
加利福尼亚州米申维耶荷
电话: 949-462-9523
传真: 949-462-9608
电话: 951-273-7800 - 北卡罗来纳州罗利
电话: 919-844-7510 - 纽约州纽约市
电话: 631-435-6000 - 加利福尼亚州圣何塞
电话: 408-735-9110
电话: 408-436-4270 - 加拿大 – 多伦多
电话: 905-695-1980
传真: 905-695-2078
亚太
- 澳大利亚 – 悉尼
电话: 61-2-9868-6733 - 中国 – 北京
电话: 86-10-8569-7000 - 中国 – 成都
电话: 86-28-8665-5511 - 中国 – 重庆
电话: 86-23-8980-9588 - 中国 – 东莞
电话: 86-769-8702-9880 - 中国 – 广州
电话: 86-20-8755-8029 - 中国 – 杭州
电话: 86-571-8792-8115 - 中国 - 香港特别行政区
电话: 852-2943-5100 - 中国 – 南京
电话: 86-25-8473-2460 - 中国 – 青岛
电话: 86-532-8502-7355 - 中国 – 上海
电话: 86-21-3326-8000 - 中国 – 沉阳
电话: 86-24-2334-2829 - 中国 – 深圳
电话: 86-755-8864-2200 - 中国 – 苏州
电话: 86-186-6233-1526 - 中国 – 武汉
电话: 86-27-5980-5300 - 中国 – 西安
电话: 86-29-8833-7252 - 中国 – 厦门
电话: 86-592-2388138 - 中国 – 珠海
电话: 86-756-3210040 - 印度 – 班加罗尔
电话: 91-80-3090-4444 - 印度 - 新德里
电话: 91-11-4160-8631 - 印度 – 浦那
电话: 91-20-4121-0141 - 日本 - 大阪
电话: 81-6-6152-7160 - 日本 – 东京
电话: 81-3-6880- 3770 - 韩国——大邱
电话: 82-53-744-4301 - 韩国 – 首尔
电话: 82-2-554-7200 - 马来西亚 – 吉隆坡
电话: 60-3-7651-7906 - 马来西亚 – 槟城
电话: 60-4-227-8870 - 菲律宾 – 马尼拉
电话: 63-2-634-9065 - 新加坡
电话: 65-6334-8870 - 台湾 – 新竹
电话: 886-3-577-8366 - 台湾 – 高雄
电话: 886-7-213-7830 - 台湾 – 台北
电话: 886-2-2508-8600 - 泰国 – 曼谷
电话: 66-2-694-1351 - 越南——胡志明
电话: 84-28-5448-2100
欧洲
- 奥地利 - 韦尔斯
电话: 43-7242-2244-39
传真: 43-7242-2244-393 - 丹麦——哥本哈根
电话: 45-4485-5910
传真: 45-4485-2829 - 芬兰 – 埃斯波
电话:358-9-4520-820 - 法国——巴黎
电话: 33-1-69-53-63-20
传真: 33-1-69-30-90-79 - 德国——加兴
电话: 49-8931-9700 - 德国 – 汉
电话: 49-2129-3766400 - 德国——海尔布隆
电话: 49-7131-72400 - 德国——卡尔斯鲁厄
电话: 49-721-625370 - 德国——慕尼黑
电话: 49-89-627-144-0
传真: 49-89-627-144-44 - 德国——罗森海姆
电话: 49-8031-354-560 - 意大利——米兰
电话: 39-0331-742611
传真: 39-0331-466781 - 意大利——帕多瓦
电话: 39-049-7625286 - 荷兰 – Drunen
电话: 31-416-690399
传真: 31-416-690340 - 挪威 – 特隆赫姆
电话: 47-7288-4388 - 波兰 – 华沙
电话: 48-22-3325737 - 罗马尼亚 - 布加勒斯特
电话: 40-21-407-87-50 - 西班牙 – 马德里
电话: 34-91-708-08-90
传真: 34-91-708-08-91 - 瑞典——哥德堡
电话: 46-31-704-60-40 - 瑞典——斯德哥尔摩
电话: 46-8-5090-4654 - 英国 – 沃金厄姆
电话: 44-118-921-5800
传真: 44-118-921-5820
笔记:
该系列参考手册部分旨在作为对器件数据表的补充。 根据器件型号的不同,本手册部分可能不适用于所有 dsPIC33/PIC24 器件。 请查阅当前器件数据手册中“闪存程序存储器”一章开头的注释,以检查该文档是否支持您正在使用的器件。
器件数据表和系列参考手册部分可从 Microchip Worldwide 下载 Web网站位于: http://www.microchip.com.
文件/资源
![]() |
MICROCHIP PIC24 闪存编程 [pdf] 用户指南 PIC24 闪存编程, PIC24, 闪存编程, 编程 |
![]() |
MICROCHIP PIC24 闪存编程 [pdf] 用户指南 PIC24 闪存编程,PIC24,闪存编程 |