电子说
在电子设计领域,微控制器的编程是一项基础且关键的工作。今天我们聚焦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方式略有不同,在实际应用中需根据具体情况进行选择。
| 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 | 串行数据 |
地址空间从0000000h到3FFFFFh的内存通过表指针(Table Pointer)进行寻址,表指针由三个指针寄存器组成:
在进行许多读写操作之前,会使用4位命令‘0000’(核心指令)来加载表指针。
编程过程大致如下:首先进行批量擦除,接着对代码内存、ID位置和数据EEPROM进行编程,然后对这些内存进行验证,确保编程成功。若未检测到错误,再对配置位进行编程和验证。
| 在串行操作中,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 |
编程代码内存时,需先将数据加载到相应的写缓冲区,然后启动编程序列。代码内存空间中的每个面板都有一个8字节深的写缓冲区,在启动写序列之前必须先将其加载。通常采用多面板写入模式,即所有程序缓冲区并行写入。编程持续时间由SCLK外部定时控制,在发出“开始编程”命令(4位命令‘1111’)后,发出NOP命令,将第4个SCLK保持高电平一段时间P9,之后将SCLK拉低,编程序列终止。
数据EEPROM通过地址指针(寄存器对EEADR:EEADRH)和数据锁存器(EEDATA)逐字节访问。写入时,先将所需内存位置加载到EEADR:EEADRH,将数据加载到EEDATA,然后通过对EECON1和EECON2寄存器进行适当配置来启动内存写入。写入时会自动擦除该位置并写入新数据。
ID位置的编程方式与代码内存类似,但需禁用多面板写入功能。要写入的单个面板将根据表指针的值自动启用。ID寄存器映射在地址200000h到200007h,即使应用了代码保护,这些位置也能正常读出。
Boot Block段的编程方式与ID位置完全相同,同样需要禁用多面板写入功能,确保只写入地址范围在0000h到01FFh的数据。
与代码内存不同,配置位是逐字节进行编程的。使用“表写入,开始编程”4位命令(1111),但后续16位有效负载中只有8位会被写入,LSB写入偶数地址,MSB写入奇数地址。
通过4位命令‘1001’(表读取,后递增)逐字节访问代码内存,将表指针指向的内存内容加载到表锁存器,然后通过SDATA串行输出。这种方法同样适用于读取ID和配置寄存器。
“空白检查”是指验证器件是否没有已编程的内存单元,需要对代码内存、数据EEPROM、ID位置和配置位进行验证,但要忽略设备ID寄存器(3FFFFEh:3FFFFFh)。空白或已擦除的内存单元读取值为‘1’,因此空白检查就是验证所有字节是否读取为FFh(配置位除外)。
用户可在200000h到200007h映射的八个ID位置中存储识别信息,建议每个ID的最高有效半字节为0Fh,这样可避免用户代码意外从ID空间执行。
PIC18FXX20的设备ID字位于3FFFFEh到3FFFFFh,编程人员可利用这些位来识别正在编程的设备类型,即使应用了代码或读取保护,这些位也能正常读出。
配置寄存器CONFIG4L中的LVP位用于启用低压ICSP编程,出厂时该位默认值为‘1’。若不使用低压编程模式,可将LVP位编程为‘0’,此时RB5/PGM将成为数字I/O引脚。但需注意,LVP位只能通过进入高压ICSP模式进行编程,一旦编程为‘0’,就只能使用高压ICSP模式对设备进行编程。
为了实现代码的可移植性,PIC18FXX20编程器需要从HEX文件中读取配置字信息和数据EEPROM信息。若这些信息缺失,应发出简单的警告消息。保存HEX文件时,必须包含所有配置字信息和数据EEPROM信息,也可提供不包含这些信息的选项。
校验和的计算方法是将以下内容相加:所有代码内存位置的内容、经过适当掩码处理的配置字以及ID位置。取该和的最低16位作为校验和。不同型号和代码保护设置下的校验和计算方法在文档中有详细说明。
文档中给出了编程/验证测试模式下的标准操作条件,包括工作温度、各种电压、电流、时间等参数的范围和要求。例如,高压编程电压MCLR/VPP的范围是9.00 - 13.25V,低压编程电压范围是2.00 - 5.50V,供应电压在正常编程时为2.00 - 5.50V,批量擦除操作时为4.50 - 5.50V等。
综上所述,PIC18FXX20系列闪存微控制器的编程涉及多个方面,从编程方法、硬件要求到内存操作、配置字设置等都需要工程师仔细研究和掌握。希望通过本文的介绍,能帮助大家更好地理解和应用PIC18FXX20的编程技术。在实际应用中,你是否遇到过关于这些微控制器编程的难题呢?又有哪些独特的解决方案呢?欢迎在评论区分享你的经验。
全部0条评论
快来发表一下你的评论吧 !