Microchip PIC18F2XXX/4XXX 系列闪存微控制器编程指南
在电子设计领域,微控制器的编程是一项关键工作。今天,我们就来深入探讨一下 Microchip 的 PIC18F2XXX/4XXX 系列闪存微控制器的编程规范。
文件下载:PIC18F4321-I P.pdf
一、器件概述
该文档涵盖了众多型号的编程规范,包括 PIC18F2221、PIC18F2321 等一系列 2XXX 和 4XXX 家族的器件。这些器件具有不同的封装类型,为不同的应用场景提供了多样化的选择。
二、编程概述
(一)编程方法
PIC18F2XXX/4XXX 系列器件可以使用高压在线串行编程(High - Voltage In - Circuit Serial Programming™,ICSP™)方法或低压 ICSP 方法进行编程。这两种方法都可以在用户系统中对器件进行操作,但低压 ICSP 方法与高压方法略有不同。
(二)硬件要求
- 高压 ICSP 模式:在此模式下,器件需要两个可编程电源,分别为 VDD 和 MCLR/VPP/RE3 供电,且两个电源的最小分辨率应为 0.25V。
- 低压 ICSP 模式:在该模式下,器件可以使用处于工作范围内的 VDD 源进行编程,MCLR/VPP/RE3 可以保持在正常工作电压。
(三)引脚图
不同封装类型的器件有不同的引脚图,如 28 引脚的 SPDIP、PDIP、SOIC、SSOP、QFN 封装,以及 40 引脚的 PDIP 封装和 44 引脚的 TQFP、QFN 封装等。了解这些引脚图对于正确连接和编程器件至关重要。
(四)内存映射
不同型号的器件代码内存空间大小和分布不同。例如,PIC18FX6X0 器件的代码内存空间从 0000h 到 0FFFFh(64 Kbytes),分为四个 16 - Kbyte 块;PIC18FX5X5 器件的代码内存空间从 0000h 到 0BFFFFh(48 Kbytes),分为三个 16 - Kbyte 块。同时,部分器件的 Boot Block 大小可以通过配置寄存器中的 BBSIZ 位进行调整。
(五)编程流程概述
编程过程包括批量擦除(Bulk Erase)、对代码内存、ID 位置和数据 EEPROM(部分器件)进行编程,然后进行验证,最后对配置位进行编程和验证。
(六)进出编程验证模式
- 高压 ICSP 模式:进入该模式时,需将 PGC 和 PGD 保持低电平,然后将 MCLR/VPP/RE3 升高到 VIHH(高电压)。退出时则按相应的退出序列操作。
- 低压 ICSP 模式:当 LVP 配置位为‘1’时,可通过将 PGC 和 PGD 保持低电平,PGM 置为高电平,然后将 MCLR/VPP/RE3 升高到 VIH 进入该模式。
(七)串行编程验证操作
- 4 位命令:所有指令为 20 位,由 4 位命令和 16 位操作数组成。不同的 4 位命令用于不同的操作,如核心指令、表读取、表写入等。
- 核心指令:用于向 CPU 核心传递 16 位指令以执行,为其他命令的使用设置合适的寄存器。
(八)专用 ICSP/ICD 端口(仅 44 引脚 TQFP)
PIC18F4455/4458/4550/4553 等 44 引脚 TQFP 器件支持专用 ICSP/ICD 端口,可提供另一种在线调试和 ICSP 选项。但 ICPRT 配置位只能通过默认 ICSP 端口进行编程,且不同封装类型的器件对该位的设置有不同要求。
三、器件编程
(一)ICSP 擦除
- 高压 ICSP 批量擦除:通过配置位于 3C0004h 和 3C0005h 的两个批量擦除控制寄存器来实现代码或数据 EEPROM 的擦除。擦除操作会清除相关内存块的代码保护设置。
- 低压 ICSP 批量擦除:执行批量擦除时,器件需由参数 D111 指定的电压供电。若电源电压低于批量擦除限制,可参考行擦除或修改代码内存的方法。
- ICSP 行擦除:无论使用高压还是低压 ICSP,只要块未被代码或写保护,就可以擦除一行(64 字节数据)。行擦除的持续时间由 PGC 外部定时控制。
(二)代码内存编程
编程代码内存时,先将数据加载到写缓冲区,然后启动编程序列。不同型号器件的写缓冲区和擦除缓冲区大小不同,编程持续时间也由 PGC 外部定时控制。
(三)数据 EEPROM 编程
数据 EEPROM 通过地址指针(EEADRH:EEADR)和数据锁存器(EEDATA)逐字节访问。编程时需正确配置 EECON1 寄存器,写入时会自动擦除原位置并写入新数据。
(四)ID 位置编程
ID 位置的编程与代码内存类似,用户只需填充写缓冲区的前 8 个字节即可写入 ID 位置。若要修改 ID 位置,需先进行擦除操作。
(五)Boot 块编程
使用与代码内存编程类似的代码序列,但地址范围在 000000h 到 0007FFh 之间。
(六)配置位编程
配置位逐字节编程,使用“Table Write, Begin Programming”4 位命令(‘1111’),但每次只写入 16 位有效负载中的 8 位。
四、读取器件
(一)读取代码内存、ID 位置和配置位
通过 4 位命令‘1001’(表读取,后递增)逐字节访问代码内存,读取的内容通过 PGD 串行输出。该方法也适用于读取 ID 和配置寄存器。
(二)验证代码内存和 ID 位置
验证时,将代码内存空间的内容读回并与编程器缓冲区中的副本进行比较。对于 ID 位置,需手动将表指针设置为 200000h。
(三)验证配置位
通过 4 位命令‘1001’读取配置地址并输出到 PGD,然后与编程器内存中的相应配置数据进行比较。
(四)读取数据 EEPROM 内存
通过地址指针和数据锁存器逐字节访问数据 EEPROM,读取的数据通过 4 位命令‘0010’输出到 PGD。
(五)验证数据 EEPROM
读取数据 EEPROM 地址并输出到 PGD,然后与编程器内存中的相应数据进行比较。
(六)空白检查
空白检查是验证器件是否没有已编程的内存单元,需对代码内存、数据 EEPROM、ID 位置和配置位进行验证,但忽略设备 ID 寄存器。
五、配置字
(一)配置字概述
PIC18F2XXX/4XXX 系列器件有多个配置字,可通过设置或清除这些位来选择不同的器件配置。所有其他内存区域应在设置配置字之前进行编程和验证。
(二)ID 位置
用户可以在 200000h:200007h 的 8 个 ID 位置存储识别信息,建议每个 ID 的最高半字节为 Fh。
(三)设备 ID 字
设备 ID 字位于 3FFFFEh:3FFFFFh,可用于识别正在编程的设备类型,即使在代码或读保护后也能正常读取。
(四)单电源 ICSP 编程
配置寄存器 CONFIG4L 中的 LVP 位启用单电源(低压)ICSP 编程。该位默认从工厂设置为‘1’(启用),若将其编程为‘0’,则只能使用高压 ICSP 模式。
(五)在 HEX 文件中嵌入配置字和数据 EEPROM 信息
为了实现代码的可移植性,编程器需要从 hex 文件中读取配置字和数据 EEPROM 信息。在保存 hex 文件时,应包含这些信息,也可提供不包含这些信息的选项。
(六)校验和计算
校验和通过对所有代码内存位置的内容、配置字(适当屏蔽)和 ID 位置(如果任何块被代码保护)进行求和得到,取该和的最低 16 位作为校验和。
六、AC/DC 特性和时序要求
文档给出了编程/验证测试模式下的标准操作条件,包括各种电压、电流、时间参数的要求,如高电压编程电压、低电压编程电压、编程电流、输入输出电压等,这些参数对于正确编程和验证器件至关重要。
在实际应用中,我们需要根据具体的器件型号和应用场景,仔细选择合适的编程方法和参数,严格按照编程规范进行操作,以确保器件的正常工作。同时,对于代码保护等功能,要充分了解其原理和限制,以保护我们的知识产权。大家在编程过程中遇到过哪些问题呢?欢迎留言讨论。
发布评论请先 登录
ST32F3xxx和STM32F4xxx微控制器的内核Crotex-M4的编程手册
STM32F4xxx系列微控制器的中文参考手册免费下载
AN4660_从STM32F42xxx、STM32F43xxx到STM32F74xxx、STM32F75xxx的微控制器应用移植
从STM32F42xxx/STM32F43xxx到STM32F74xxx/STM32F75xxx的微控制器应用移植
Microchip PIC18F2XXX/4XXX 系列闪存微控制器编程指南
评论