电子说
在电子设计领域,微控制器的编程是一项关键工作。今天,我们就来深入探讨一下 Microchip 的 PIC18F2XXX/4XXX 系列闪存微控制器的编程规范。
文件下载:PIC18F4321-I P.pdf
该文档涵盖了众多型号的编程规范,包括 PIC18F2221、PIC18F2321 等一系列 2XXX 和 4XXX 家族的器件。这些器件具有不同的封装类型,为不同的应用场景提供了多样化的选择。
PIC18F2XXX/4XXX 系列器件可以使用高压在线串行编程(High - Voltage In - Circuit Serial Programming™,ICSP™)方法或低压 ICSP 方法进行编程。这两种方法都可以在用户系统中对器件进行操作,但低压 ICSP 方法与高压方法略有不同。
不同封装类型的器件有不同的引脚图,如 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(部分器件)进行编程,然后进行验证,最后对配置位进行编程和验证。
PIC18F4455/4458/4550/4553 等 44 引脚 TQFP 器件支持专用 ICSP/ICD 端口,可提供另一种在线调试和 ICSP 选项。但 ICPRT 配置位只能通过默认 ICSP 端口进行编程,且不同封装类型的器件对该位的设置有不同要求。
编程代码内存时,先将数据加载到写缓冲区,然后启动编程序列。不同型号器件的写缓冲区和擦除缓冲区大小不同,编程持续时间也由 PGC 外部定时控制。
数据 EEPROM 通过地址指针(EEADRH:EEADR)和数据锁存器(EEDATA)逐字节访问。编程时需正确配置 EECON1 寄存器,写入时会自动擦除原位置并写入新数据。
ID 位置的编程与代码内存类似,用户只需填充写缓冲区的前 8 个字节即可写入 ID 位置。若要修改 ID 位置,需先进行擦除操作。
使用与代码内存编程类似的代码序列,但地址范围在 000000h 到 0007FFh 之间。
配置位逐字节编程,使用“Table Write, Begin Programming”4 位命令(‘1111’),但每次只写入 16 位有效负载中的 8 位。
通过 4 位命令‘1001’(表读取,后递增)逐字节访问代码内存,读取的内容通过 PGD 串行输出。该方法也适用于读取 ID 和配置寄存器。
验证时,将代码内存空间的内容读回并与编程器缓冲区中的副本进行比较。对于 ID 位置,需手动将表指针设置为 200000h。
通过 4 位命令‘1001’读取配置地址并输出到 PGD,然后与编程器内存中的相应配置数据进行比较。
通过地址指针和数据锁存器逐字节访问数据 EEPROM,读取的数据通过 4 位命令‘0010’输出到 PGD。
读取数据 EEPROM 地址并输出到 PGD,然后与编程器内存中的相应数据进行比较。
空白检查是验证器件是否没有已编程的内存单元,需对代码内存、数据 EEPROM、ID 位置和配置位进行验证,但忽略设备 ID 寄存器。
PIC18F2XXX/4XXX 系列器件有多个配置字,可通过设置或清除这些位来选择不同的器件配置。所有其他内存区域应在设置配置字之前进行编程和验证。
用户可以在 200000h:200007h 的 8 个 ID 位置存储识别信息,建议每个 ID 的最高半字节为 Fh。
设备 ID 字位于 3FFFFEh:3FFFFFh,可用于识别正在编程的设备类型,即使在代码或读保护后也能正常读取。
配置寄存器 CONFIG4L 中的 LVP 位启用单电源(低压)ICSP 编程。该位默认从工厂设置为‘1’(启用),若将其编程为‘0’,则只能使用高压 ICSP 模式。
为了实现代码的可移植性,编程器需要从 hex 文件中读取配置字和数据 EEPROM 信息。在保存 hex 文件时,应包含这些信息,也可提供不包含这些信息的选项。
校验和通过对所有代码内存位置的内容、配置字(适当屏蔽)和 ID 位置(如果任何块被代码保护)进行求和得到,取该和的最低 16 位作为校验和。
文档给出了编程/验证测试模式下的标准操作条件,包括各种电压、电流、时间参数的要求,如高电压编程电压、低电压编程电压、编程电流、输入输出电压等,这些参数对于正确编程和验证器件至关重要。
在实际应用中,我们需要根据具体的器件型号和应用场景,仔细选择合适的编程方法和参数,严格按照编程规范进行操作,以确保器件的正常工作。同时,对于代码保护等功能,要充分了解其原理和限制,以保护我们的知识产权。大家在编程过程中遇到过哪些问题呢?欢迎留言讨论。
全部0条评论
快来发表一下你的评论吧 !