PIC18FXX20系列閃存微控制器編程全解析
在電子設計領域,微控制器的編程是一項基礎且關鍵的工作。今天我們聚焦Microchip的PIC18FXX20系列閃存微控制器,深入探討其編程規(guī)范和相關技術要點。
文件下載:PIC18F8620T-E/PT.pdf
一、器件概述
PIC18FXX20涵蓋了多個具體型號,像PIC18F6520、PIC18F6620、PIC18F6720、PIC18F8520、PIC18F8620以及PIC18F8720等。這些型號在不同應用場景中都有廣泛的用途,了解它們的編程規(guī)范對于工程師來說至關重要。
二、編程概述
(一)編程方法
該系列器件支持兩種編程方式:高壓在線串行編程(High Voltage In-Circuit Serial Programming,簡稱HV-ICSP)和低壓在線串行編程(Low Voltage In-Circuit Serial Programming,簡稱LV-ICSP)。這兩種方式都能在用戶系統(tǒng)中對器件進行編程。其中,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”區(qū)域,它與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)優(yōu)先。所有指令為20位,由一個4位命令和一個16位操作數組成,操作數根據執(zhí)行的命令類型而定。以下是一些編程和驗證所需的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批量擦除:若要執(zhí)行批量擦除,器件需由參數#D111指定的電壓供電,其他批量擦除細節(jié)與高壓ICSP模式相同。
- 多面板單行擦除:無論使用高壓還是低壓ICSP,都能同時擦除所有面板中的單行(64字節(jié)數據)。該功能通過對位于3C0006h的編程控制寄存器進行適當配置來啟用。
(二)代碼內存編程
編程代碼內存時,需先將數據加載到相應的寫緩沖區(qū),然后啟動編程序列。代碼內存空間中的每個面板都有一個8字節(jié)深的寫緩沖區(qū),在啟動寫序列之前必須先將其加載。通常采用多面板寫入模式,即所有程序緩沖區(qū)并行寫入。編程持續(xù)時間由SCLK外部定時控制,在發(fā)出“開始編程”命令(4位命令‘1111’)后,發(fā)出NOP命令,將第4個SCLK保持高電平一段時間P9,之后將SCLK拉低,編程序列終止。
(三)數據EEPROM編程
數據EEPROM通過地址指針(寄存器對EEADR:EEADRH)和數據鎖存器(EEDATA)逐字節(jié)訪問。寫入時,先將所需內存位置加載到EEADR:EEADRH,將數據加載到EEDATA,然后通過對EECON1和EECON2寄存器進行適當配置來啟動內存寫入。寫入時會自動擦除該位置并寫入新數據。
(四)ID位置編程
ID位置的編程方式與代碼內存類似,但需禁用多面板寫入功能。要寫入的單個面板將根據表指針的值自動啟用。ID寄存器映射在地址200000h到200007h,即使應用了代碼保護,這些位置也能正常讀出。
(五)Boot Block編程
Boot Block段的編程方式與ID位置完全相同,同樣需要禁用多面板寫入功能,確保只寫入地址范圍在0000h到01FFh的數據。
(六)配置位編程
與代碼內存不同,配置位是逐字節(jié)進行編程的。使用“表寫入,開始編程”4位命令(1111),但后續(xù)16位有效負載中只有8位會被寫入,LSB寫入偶數地址,MSB寫入奇數地址。
四、讀取器件
(一)讀取內存
通過4位命令‘1001’(表讀取,后遞增)逐字節(jié)訪問代碼內存,將表指針指向的內存內容加載到表鎖存器,然后通過SDATA串行輸出。這種方法同樣適用于讀取ID和配置寄存器。
(二)驗證操作
- 驗證代碼內存和ID位置:驗證過程是將讀取的代碼內存空間與編程器緩沖區(qū)中的副本進行比較,逐字節(jié)讀取內存,需讀取兩個字節(jié)才能與編程器緩沖區(qū)中的字進行比較。驗證完代碼內存后,需手動將表指針設置為200000h(ID位置的基地址)。
- 驗證配置位:通過4位命令‘1001’讀取配置地址并輸出到SDATA,然后將結果與編程器內存中的相應配置數據進行比較。
- 驗證數據EEPROM:通過一系列核心指令(4位命令‘0000’)讀取數據EEPROM地址,然后通過4位命令‘0010’(移出數據保持寄存器)將結果輸出到SDATA,再與編程器內存中的相應數據進行比較。
(三)空白檢查
“空白檢查”是指驗證器件是否沒有已編程的內存單元,需要對代碼內存、數據EEPROM、ID位置和配置位進行驗證,但要忽略設備ID寄存器(3FFFFEh:3FFFFFh)。空白或已擦除的內存單元讀取值為‘1’,因此空白檢查就是驗證所有字節(jié)是否讀取為FFh(配置位除外)。
五、配置字
(一)ID位置
用戶可在200000h到200007h映射的八個ID位置中存儲識別信息,建議每個ID的最高有效半字節(jié)為0Fh,這樣可避免用戶代碼意外從ID空間執(zhí)行。
(二)設備ID字
PIC18FXX20的設備ID字位于3FFFFEh到3FFFFFh,編程人員可利用這些位來識別正在編程的設備類型,即使應用了代碼或讀取保護,這些位也能正常讀出。
(三)低壓編程(LVP)位
配置寄存器CONFIG4L中的LVP位用于啟用低壓ICSP編程,出廠時該位默認值為‘1’。若不使用低壓編程模式,可將LVP位編程為‘0’,此時RB5/PGM將成為數字I/O引腳。但需注意,LVP位只能通過進入高壓ICSP模式進行編程,一旦編程為‘0’,就只能使用高壓ICSP模式對設備進行編程。
(四)嵌入配置字信息和數據EEPROM信息
為了實現代碼的可移植性,PIC18FXX20編程器需要從HEX文件中讀取配置字信息和數據EEPROM信息。若這些信息缺失,應發(fā)出簡單的警告消息。保存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的編程技術。在實際應用中,你是否遇到過關于這些微控制器編程的難題呢?又有哪些獨特的解決方案呢?歡迎在評論區(qū)分享你的經驗。
-
編程規(guī)范
+關注
關注
0文章
10瀏覽量
9025
發(fā)布評論請先 登錄
深入解析PIC24FJ256GB210系列16位閃存微控制器
PIC32MM0064GPL036 系列 32 位閃存微控制器深度剖析
深入剖析Microchip PIC18F6393/6493/8393/8493系列微控制器
PIC18CXX2高性能微控制器深度解析
PIC18FXX80/XX85 Flash微控制器編程規(guī)范解析
深度剖析Microchip PIC18F2458/2553/4458/4553系列微控制器
PIC18F2XXX/4XXX系列閃存微控制器編程規(guī)范解析
深入解析Microchip PIC16F8X系列微控制器
PIC16C745/765微控制器:功能、特性與應用全解析
Microchip PIC16C62X系列微控制器:設計與應用深度解析
PIC16F716:8位閃存微控制器的全方位解析
PIC18F8723 系列微控制器:高性能與低功耗的完美結合
Microchip PIC18F2458/2553/4458/4553系列微控制器深度解析
Microchip PIC18F2XXX/4XXX 系列閃存微控制器編程指南
PIC18F16Q20 Curiosity Nano開發(fā)板技術解析與應用指南
PIC18FXX20系列閃存微控制器編程全解析
評論