PIC18FXX20系列闪存微控制器编程全解析
在电子设计领域,微控制器的编程是一项基础且关键的工作。今天我们聚焦Microchip的PIC18FXX20系列闪存微控制器,深入探讨其编程规范和相关技术要点。
文件下载:PIC18F8620T-E/PT.pdf
一、器件概述
PIC18FXX20涵盖了多个具体型号,像PIC18F6520、PIC18F6620、PIC18F6720、PIC18F8520、PIC18F8620以及PIC18F8720等。这些型号在不同应用场景中都有广泛的用途,了解它们的编程规范对于工程师来说至关重要。
二、编程概述
(一)编程方法
该系列器件支持两种编程方式:高压在线串行编程(High Voltage In-Circuit Serial Programming,简称HV-ICSP)和低压在线串行编程(Low Voltage In-Circuit Serial Programming,简称LV-ICSP)。这两种方式都能在用户系统中对器件进行编程。其中,LV-ICSP方式与HV-ICSP方式略有不同,在实际应用中需根据具体情况进行选择。
(二)硬件要求
- 高压ICSP模式:在这种模式下,PIC18FXX20需要两个可编程电源,分别为VDD和MCLR/VPP供电,且这两个电源的最小分辨率要达到0.25V。
- 低压ICSP模式:在此模式下,使用处于工作范围内的VDD电源就能完成编程,意味着MCLR/VPP可保持在正常工作电压。
(三)引脚图和引脚描述
| PIC18FXX20系列的引脚图展示了各引脚在编程时的布局。不过,引脚描述并未涵盖器件的全部功能,若需要完整的引脚说明,还得参考相应的器件数据手册。以下是编程时部分关键引脚的信息: | 引脚名称 | 引脚类型 | 引脚描述 |
|---|---|---|---|
| MCLR/VPP/RA5 | VPP P | 编程使能 | |
| VDD(2) | VDD P | 电源 | |
| VSS(2) | VSS P | 接地 | |
| AVDD | AVDD P | 模拟电源 | |
| AVSS | AVSS P | 模拟接地 | |
| RB5 | I | 当LVP配置位为‘1’时,作为低压ICSP输入 | |
| RB6 | I | 串行时钟 | |
| RB7 | I/O | 串行数据 |
(四)内存映射
- 代码内存:代码内存空间从0000h延伸到1FFFFh(共128KB),被划分为八个16KB的块。其中,地址0000h到01FFh定义为“Boot Block”区域,它与Block 1的处理方式不同。不同型号的器件代码内存大小有所差异:
- PIC18F6520和PIC18F8520:000000h - 007FFFh(32K)
- PIC18F6620和PIC18F8620:000000h - 00FFFFh(64K)
- PIC18F6720和PIC18F8720:000000h - 01FFFFh(128K)
- 配置和ID空间:除了代码内存空间,配置和ID空间中有三个块可通过表读取和表写入的方式供用户访问。用户可以在八个ID寄存器中存储识别信息,这些ID寄存器映射在地址200000h到200007h。地址300000h到30000Dh用于配置位,3FFFFEh和3FFFFFh用于设备ID位。
(五)内存地址指针
地址空间从0000000h到3FFFFFh的内存通过表指针(Table Pointer)进行寻址,表指针由三个指针寄存器组成:
- TBLPTRU(位于RAM地址0FF8h)
- TBLPTRH(位于RAM地址0FF7h)
- TBLPTRL(位于RAM地址0FF6h)
在进行许多读写操作之前,会使用4位命令‘0000’(核心指令)来加载表指针。
(六)编程过程概述
编程过程大致如下:首先进行批量擦除,接着对代码内存、ID位置和数据EEPROM进行编程,然后对这些内存进行验证,确保编程成功。若未检测到错误,再对配置位进行编程和验证。
(七)进入编程/验证模式
- 高压ICSP模式:将SCLK和SDATA拉低,然后将MCLR/VPP升高到VIHH(高压),即可进入该模式。在此模式下,可对代码内存、数据EEPROM、ID位置和配置位进行串行访问和编程。
- 低压ICSP模式:当LVP配置位为‘1’时,该模式被启用。将SCLK和SDATA拉低,PGM置为逻辑高电平,然后将MCLR/VPP升高到VIH,即可进入该模式。此时,RB5/PGM引脚专门用于编程功能,不再作为通用I/O引脚。
(八)串行编程/验证操作
| 在串行操作中,SCLK引脚作为时钟输入,SDATA引脚用于输入命令位和进行数据的输入输出。命令和数据在SCLK的上升沿传输,在下降沿锁存,且以最低有效位(LSb)优先。所有指令为20位,由一个4位命令和一个16位操作数组成,操作数根据执行的命令类型而定。以下是一些编程和验证所需的4位命令: | 描述 | 4位命令 |
|---|---|---|
| 核心指令(移入16位指令) | 0000 | |
| 移出TABLAT寄存器 | 0010 | |
| 表读取 | 1000 | |
| 表读取,后递增 | 1001 | |
| 表读取,后递减 | 1010 | |
| 表读取,前递增 | 1011 | |
| 表写入 | 1100 | |
| 表写入,后递增2 | 1101 | |
| 表写入,后递减2 | 1110 | |
| 表写入,开始编程 | 1111 |
三、器件编程
(一)批量擦除
-
高压ICSP批量擦除:通过向地址3C0004h写入“擦除选项”来实现代码或数据EEPROM的擦除。代码内存可以部分擦除,也可以一次性擦除整个器件。批量擦除操作还会清除与被擦除内存块相关的任何代码保护设置。以下是一些擦除选项: 描述 数据 芯片擦除 80h 擦除数据EEPROM 81h 擦除Boot Block 83h 擦除Block 1 88h 擦除Block 2 89h 擦除Block 3 8Ah 擦除Block 4 8Bh 擦除Block 5 8Ch 擦除Block 6 8Dh 擦除Block 7 8Eh 擦除Block 8 8Fh - 低压ICSP批量擦除:若要执行批量擦除,器件需由参数#D111指定的电压供电,其他批量擦除细节与高压ICSP模式相同。
- 多面板单行擦除:无论使用高压还是低压ICSP,都能同时擦除所有面板中的单行(64字节数据)。该功能通过对位于3C0006h的编程控制寄存器进行适当配置来启用。
(二)代码内存编程
编程代码内存时,需先将数据加载到相应的写缓冲区,然后启动编程序列。代码内存空间中的每个面板都有一个8字节深的写缓冲区,在启动写序列之前必须先将其加载。通常采用多面板写入模式,即所有程序缓冲区并行写入。编程持续时间由SCLK外部定时控制,在发出“开始编程”命令(4位命令‘1111’)后,发出NOP命令,将第4个SCLK保持高电平一段时间P9,之后将SCLK拉低,编程序列终止。
(三)数据EEPROM编程
数据EEPROM通过地址指针(寄存器对EEADR:EEADRH)和数据锁存器(EEDATA)逐字节访问。写入时,先将所需内存位置加载到EEADR:EEADRH,将数据加载到EEDATA,然后通过对EECON1和EECON2寄存器进行适当配置来启动内存写入。写入时会自动擦除该位置并写入新数据。
(四)ID位置编程
ID位置的编程方式与代码内存类似,但需禁用多面板写入功能。要写入的单个面板将根据表指针的值自动启用。ID寄存器映射在地址200000h到200007h,即使应用了代码保护,这些位置也能正常读出。
(五)Boot Block编程
Boot Block段的编程方式与ID位置完全相同,同样需要禁用多面板写入功能,确保只写入地址范围在0000h到01FFh的数据。
(六)配置位编程
与代码内存不同,配置位是逐字节进行编程的。使用“表写入,开始编程”4位命令(1111),但后续16位有效负载中只有8位会被写入,LSB写入偶数地址,MSB写入奇数地址。
四、读取器件
(一)读取内存
通过4位命令‘1001’(表读取,后递增)逐字节访问代码内存,将表指针指向的内存内容加载到表锁存器,然后通过SDATA串行输出。这种方法同样适用于读取ID和配置寄存器。
(二)验证操作
- 验证代码内存和ID位置:验证过程是将读取的代码内存空间与编程器缓冲区中的副本进行比较,逐字节读取内存,需读取两个字节才能与编程器缓冲区中的字进行比较。验证完代码内存后,需手动将表指针设置为200000h(ID位置的基地址)。
- 验证配置位:通过4位命令‘1001’读取配置地址并输出到SDATA,然后将结果与编程器内存中的相应配置数据进行比较。
- 验证数据EEPROM:通过一系列核心指令(4位命令‘0000’)读取数据EEPROM地址,然后通过4位命令‘0010’(移出数据保持寄存器)将结果输出到SDATA,再与编程器内存中的相应数据进行比较。
(三)空白检查
“空白检查”是指验证器件是否没有已编程的内存单元,需要对代码内存、数据EEPROM、ID位置和配置位进行验证,但要忽略设备ID寄存器(3FFFFEh:3FFFFFh)。空白或已擦除的内存单元读取值为‘1’,因此空白检查就是验证所有字节是否读取为FFh(配置位除外)。
五、配置字
(一)ID位置
用户可在200000h到200007h映射的八个ID位置中存储识别信息,建议每个ID的最高有效半字节为0Fh,这样可避免用户代码意外从ID空间执行。
(二)设备ID字
PIC18FXX20的设备ID字位于3FFFFEh到3FFFFFh,编程人员可利用这些位来识别正在编程的设备类型,即使应用了代码或读取保护,这些位也能正常读出。
(三)低压编程(LVP)位
配置寄存器CONFIG4L中的LVP位用于启用低压ICSP编程,出厂时该位默认值为‘1’。若不使用低压编程模式,可将LVP位编程为‘0’,此时RB5/PGM将成为数字I/O引脚。但需注意,LVP位只能通过进入高压ICSP模式进行编程,一旦编程为‘0’,就只能使用高压ICSP模式对设备进行编程。
(四)嵌入配置字信息和数据EEPROM信息
为了实现代码的可移植性,PIC18FXX20编程器需要从HEX文件中读取配置字信息和数据EEPROM信息。若这些信息缺失,应发出简单的警告消息。保存HEX文件时,必须包含所有配置字信息和数据EEPROM信息,也可提供不包含这些信息的选项。
(五)校验和计算
校验和的计算方法是将以下内容相加:所有代码内存位置的内容、经过适当掩码处理的配置字以及ID位置。取该和的最低16位作为校验和。不同型号和代码保护设置下的校验和计算方法在文档中有详细说明。
六、AC/DC特性和时序要求
文档中给出了编程/验证测试模式下的标准操作条件,包括工作温度、各种电压、电流、时间等参数的范围和要求。例如,高压编程电压MCLR/VPP的范围是9.00 - 13.25V,低压编程电压范围是2.00 - 5.50V,供应电压在正常编程时为2.00 - 5.50V,批量擦除操作时为4.50 - 5.50V等。
综上所述,PIC18FXX20系列闪存微控制器的编程涉及多个方面,从编程方法、硬件要求到内存操作、配置字设置等都需要工程师仔细研究和掌握。希望通过本文的介绍,能帮助大家更好地理解和应用PIC18FXX20的编程技术。在实际应用中,你是否遇到过关于这些微控制器编程的难题呢?又有哪些独特的解决方案呢?欢迎在评论区分享你的经验。
-
编程规范
+关注
关注
0文章
10浏览量
9026
发布评论请先 登录
深入解析PIC24FJ256GB210系列16位闪存微控制器
PIC32MM0064GPL036 系列 32 位闪存微控制器深度剖析
深入剖析Microchip PIC18F6393/6493/8393/8493系列微控制器
PIC18CXX2高性能微控制器深度解析
PIC18FXX80/XX85 Flash微控制器编程规范解析
深度剖析Microchip PIC18F2458/2553/4458/4553系列微控制器
深入解析Microchip PIC16F8X系列微控制器
PIC16C745/765微控制器:功能、特性与应用全解析
Microchip PIC16C62X系列微控制器:设计与应用深度解析
PIC16F716:8位闪存微控制器的全方位解析
PIC18F8723 系列微控制器:高性能与低功耗的完美结合
Microchip PIC18F2458/2553/4458/4553系列微控制器深度解析
Microchip PIC18F2XXX/4XXX 系列闪存微控制器编程指南
PIC18F16Q20 Curiosity Nano开发板技术解析与应用指南
PIC18FXX20系列闪存微控制器编程全解析
评论