PIC18FXX80/XX85 Flash微控制器編程規范解析
在電子工程師的日常工作中,微控制器的編程是一項至關重要的任務。今天我們就來深入探討一下Microchip公司的PIC18FXX80/XX85系列Flash微控制器的編程規范。
文件下載:PIC18F6585-I/L.pdf
一、設備概述
PIC18FXX80/XX85系列包含了PIC18F6585、PIC18F6680、PIC18F8585和PIC18F8680等型號。這些設備在編程方面具有多種特性和要求,了解它們對于正確使用和開發這些微控制器至關重要。
二、編程概述
2.1 編程方法
該系列設備可以使用高壓在線串行編程(High - Voltage In - Circuit Serial Programming,ICSP)或低壓ICSP方法進行編程。這兩種方法都可以在用戶系統中對設備進行編程,但低壓ICSP方法與高壓方法略有不同。
2.1.1 硬件要求
- 高壓ICSP編程:在高壓ICSP模式下,設備需要兩個可編程電源,一個用于VDD,一個用于MCLR/VPP,且兩個電源的最小分辨率為0.25V。更多硬件參數可參考“AC/DC Characteristics Timing Requirements for Program/Verify Test Mode”部分。
- 低壓ICSP編程:在低壓ICSP模式下,設備可以使用工作范圍內的VDD源進行編程,即MCLR/VPP可以保持正常工作電壓。同樣,更多硬件參數可參考上述部分。
2.2 引腳圖
PIC18FXX80/XX85系列的引腳圖展示在圖2 - 1、圖2 - 2和圖2 - 3中。不過這些引腳圖的描述并不代表設備類型的完整功能,用戶需要參考相應的設備數據手冊以獲取完整的引腳描述。
2.3 內存映射
2.3.1 代碼內存
代碼內存空間從0000h到0FFFFh(64 Kbytes),分為四個16 - Kbyte的塊。其中,0000h到07FFh定義為“Boot Block”區域,與塊1分開處理。所有這些塊在代碼內存空間內定義了代碼保護邊界。代碼內存面板以8 - Kbyte為邊界定義,在“Code Memory Programming”部分有更詳細的討論。
2.3.2 配置和ID空間
除了代碼內存空間,配置和ID空間中有三個塊可供用戶通過表讀取和表寫入訪問。其在內存映射中的位置如圖2 - 5所示。用戶可以在八個ID寄存器中存儲識別信息(ID),這些ID寄存器映射在地址200000h到200007h。配置位位于300000h到30000Dh,設備ID位位于3FFFFEh和3FFFFFh。這些位置在代碼保護后仍可正常讀出。
2.3.3 內存地址指針
地址空間000000h到3FFFFFh的內存通過表指針尋址,表指針由三個指針寄存器組成:TBLPTRU(位于RAM地址0FF8h)、TBLPTRH(位于RAM地址0FF7h)和TBLPTRL(位于RAM地址0FF6h)。在進行許多讀寫操作之前,使用4位命令‘0000’(核心指令)來加載表指針。
2.4 編程過程概述
編程過程的高級概述如圖2 - 7所示。首先執行批量擦除,然后對代碼內存、ID位置和數據EEPROM進行編程,接著驗證這些內存以確保編程成功。如果沒有檢測到錯誤,再對配置位進行編程和驗證。
2.5 進入編程/驗證模式
2.5.1 高壓ICSP編程/驗證模式
通過將PGC和PGD保持低電平,然后將MCLR/VPP升高到VIHH(高電壓),進入高壓ICSP編程/驗證模式。在此模式下,可以串行訪問和編程代碼內存、數據EEPROM、ID位置和配置位。進入該模式的序列會將所有未使用的I/O置于高阻抗狀態。
2.5.2 低壓ICSP編程/驗證模式
當LVP配置位為‘1’時,啟用低壓ICSP模式。通過將PGC和PGD保持低電平,在PGM上置邏輯高電平,然后將MCLR/VPP升高到VIH,進入低壓ICSP編程/驗證模式。在此模式下,RB5/PGM引腳專用于編程功能,不再是通用I/O引腳。進入該模式的序列同樣會將所有未使用的I/O置于高阻抗狀態。
2.6 串行編程/驗證操作
PGC引腳用作時鐘輸入引腳,PGD引腳用于在串行操作期間輸入命令位和數據輸入/輸出。命令和數據在PGC的上升沿傳輸,在PGC的下降沿鎖存,并且是最低有效位(LSb)優先。
2.6.1 4位命令
所有指令為20位,由前導4位命令和16位操作數組成,操作數取決于執行的命令類型。輸入命令時,PGC循環四次。編程和驗證所需的命令如表2 - 3所示。
2.6.2 核心指令
核心指令將16位指令傳遞給CPU核心執行,這對于設置寄存器以配合其他命令使用是必要的。
三、設備編程
3.1 高壓ICSP批量擦除
通過向地址3C0004h寫入“Erase Option”來擦除代碼或數據EEPROM。代碼內存可以部分擦除,也可以一次性擦除整個設備。批量擦除操作還會清除與擦除的內存塊相關的任何代碼保護設置。擦除選項詳細信息如表3 - 1所示。
3.1.1 低壓ICSP批量擦除
使用低壓ICSP時,如果要執行批量擦除,部件必須由參數D111指定的電壓供電。其他批量擦除細節與高壓ICSP相同。如果需要在低于批量擦除限制的電源電壓下執行程序內存擦除,可參考“ICSP Multi - Panel Single Row Erase”和“Modifying Code Memory”部分的擦除方法。如果需要在低于批量擦除限制的電源電壓下執行數據EEPROM擦除,可按照“Data EEPROM Programming”部分的方法將‘1’寫入陣列。
3.1.2 ICSP多面板單行擦除
無論使用高壓還是低壓ICSP,都可以同時擦除所有面板中的單行(64字節數據)。通過適當配置位于3C0006h的編程控制寄存器來啟用多面板單行擦除。多面板單行擦除持續時間由外部定時,由PGC控制。發出“Start Programming”命令(4位,‘1111’)后,發出NOP,其中第4個PGC在編程時間P9內保持高電平。PGC拉低后,編程序列終止。PGC必須在參數P10指定的時間內保持低電平,以允許內存陣列的高壓放電。
3.2 代碼內存編程
編程代碼內存的方法是先將數據加載到適當的寫緩沖區,然后啟動編程序列。代碼內存空間中的每個面板都有一個8字節深的寫緩沖區,在啟動寫序列之前必須加載。通常,所有程序緩沖區并行寫入(多面板寫入模式)。通過適當配置位于3C0006h的編程控制寄存器來啟用多面板寫入模式。編程持續時間由外部定時,由PGC控制。發出“Start Programming”命令(4位命令,‘1111’)后,發出NOP,其中第4個PGC在編程時間P9內保持高電平。PGC拉低后,編程序列終止。PGC必須在參數P10指定的時間內保持低電平,以允許內存陣列的高壓放電。
3.2.1 單面板編程
在某些情況下,限制寫入單個面板可能是有利的。此時,用戶只需通過適當配置位于3C0006h的編程控制寄存器來禁用設備的多面板寫入功能。要寫入的單個面板將根據表指針的值自動啟用。
3.2.2 修改代碼內存
如果用戶希望僅修改已編程設備的一部分,可以將設備置于單面板寫入模式,加載面板的8字節寫緩沖區,然后啟動寫序列。最小可寫入數據量為8字節,最小可擦除代碼內存量為64字節。使用EECON1寄存器操作代碼內存時,必須設置EEPGD位(EECON1<7> = 1),清除CFGS位(EECON1<6> = 0),設置WREN位(EECON1<2> = 1)以啟用任何類型的寫入,設置FREE位(EECON1<4> = 1)以擦除表指針指向的程序空間,通過設置WR位(EECON1<1> = 1)啟動擦除序列。為防止意外寫入,EECON2用于“啟用”WR位,在設置WR位之前,必須依次將55h和AAh加載到該寄存器。
3.3 數據EEPROM編程
數據EEPROM通過地址指針(寄存器對EEADR:EEADRH)和數據鎖存器(EEDATA)一次訪問一個字節。寫入數據EEPROM時,將所需的內存位置加載到EEADR:EEADRH,將數據加載到EEDATA,并通過適當配置EECON1和EECON2寄存器啟動內存寫入。字節寫入會自動擦除該位置并寫入新數據(先擦除后寫入)。使用EECON1寄存器執行數據EEPROM寫入時,必須清除EEPGD和CFGS位(EECON1<7:6> = 00),設置WREN位(EECON1<2> = 1)以啟用寫入,通過設置WR位(EECON1<1> = 1)啟動寫入序列。為防止意外寫入,EECON2用于“啟用”WR位,在設置WR位之前,必須依次將55h和AAh加載到該寄存器。
3.4 ID位置編程
ID位置的編程與代碼內存類似,但必須禁用多面板寫入。要寫入的單個面板將根據表指針的值自動啟用。ID寄存器映射在地址200000h到200007h,這些位置在代碼保護后仍可正常讀出。
3.5 引導塊編程
引導塊段的編程方式與ID位置完全相同,必須禁用多面板寫入,以便僅寫入0000h到07FFh范圍內的地址。
3.6 配置位編程
與代碼內存不同,配置位一次編程一個字節。使用“Table Write, Begin Programming”4位命令(‘1111’),但僅寫入后續16位有效負載的8位。有效負載的LSB寫入偶地址,MSB寫入奇地址。編程兩個連續配置位置的代碼序列如表3 - 8所示。每次配置字節編程之間需要執行四個NOP。
四、讀取設備
4.1 讀取代碼內存、ID位置和配置位
通過4位命令‘1001’(表讀取,后遞增)一次讀取一個字節的代碼內存。表指針(TBLPTRU:TBLPTRH:TBLPTRL)指向的內存內容加載到表鎖存器,然后在PGD上串行輸出。該技術可用于讀取000000h到3FFFFFh地址空間中的任何內存,因此也適用于讀取ID和配置寄存器。
4.2 驗證代碼內存和ID位置
驗證步驟包括讀回代碼內存空間并與編程器緩沖區中的副本進行比較。內存讀取一次一個字節,因此必須讀取兩個字節以與編程器緩沖區中的字進行比較。驗證代碼內存后,必須手動將表指針設置為200000h(ID位置的基地址)。表讀取4位命令的后遞增功能不能用于將表指針遞增到代碼內存空間之外。
4.3 驗證配置位
通過4位命令‘1001’讀取配置地址并在PGD上輸出。配置數據以字節方式讀取和寫入,因此在比較之前無需將兩個字節合并為一個字。然后可以立即將結果與編程器內存中的相應配置數據進行比較以進行驗證。
4.4 讀取數據EEPROM內存
數據EEPROM通過地址指針(寄存器對EEADR:EEADRH)和數據鎖存器(EEDATA)一次訪問一個字節。讀取數據EEPROM時,將所需的內存位置加載到EEADR:EEADRH,并通過適當配置EECON1寄存器啟動內存讀取。數據將加載到EEDATA,然后通過4位命令‘0010’(Shift Out Data Holding register)在PGD上串行輸出。
4.5 驗證數據EEPROM
通過一系列核心指令(4位命令,‘0000’)讀取數據EEPROM地址,然后通過4位命令‘0010’(Shift Out Data Holding register)在PGD上輸出。然后可以立即將結果與編程器內存中的相應數據進行比較以進行驗證。
4.6 空白檢查
“空白檢查”意味著驗證設備沒有已編程的內存單元。必須驗證所有內存:代碼內存、數據EEPROM、ID位置和配置位。設備ID寄存器(3FFFFEh:3FFFFFh)應忽略。“空白”或“擦除”的內存單元將讀取為‘1’,因此“空白檢查”設備只需驗證所有字節讀取為FFh,配置位除外。未使用(保留)的配置位將讀取為‘0’(已編程)。
五、配置字
5.1 ID位置
用戶可以在八個ID位置(映射在200000h:200007h)中存儲識別信息(ID)。建議每個ID的最高有效半字節為0Fh,這樣如果用戶代碼無意中嘗試從ID空間執行,ID數據將作為NOP執行。
5.2 設備ID字
PIC18FXX80/XX85設備的設備ID字位于3FFFFEh:3FFFFFh。這些位可由編程器用于識別正在編程的設備類型,并且在代碼或讀取保護后仍可正常讀出。
5.3 低壓編程(LVP)位
配置寄存器CONFIG4L中的LVP位啟用低壓ICSP編程。LVP位出廠默認值為‘1’。如果不使用低壓編程模式,可以將LVP位編程為‘0’,此時RB5/PGM成為數字I/O引腳。但LVP位只能通過進入高壓ICSP模式進行編程,其中MCLR/VPP升高到VIHH。一旦LVP位編程為‘0’,則只能使用高壓ICSP模式對設備進行編程。
5.4 嵌入配置字信息到HEX文件
為了實現代碼的可移植性,PIC18FXX80/XX85編程器需要從HEX文件中讀取配置字位置。如果HEX文件中不存在配置字信息,應發出簡單的警告消息。同樣,保存HEX文件時,必須包含所有配置字信息,也可以提供不包含配置字信息的選項。嵌入配置字信息到HEX文件時,應從地址300000h開始。
5.5 校驗和計算
校驗和通過以下內容求和計算:所有代碼內存位置的內容、適當屏蔽的配置字、ID位置。該和的最低有效16位為校驗和。不同設備和代碼保護設置下的校驗和計算方法如表5 - 4所示。
5.6 嵌入數據EEPROM信息到HEX文件
為了實現代碼的可移植性,PIC18FXX80/XX85編程器需要從HEX文件中讀取數據EEPROM信息。如果數據EEPROM信息不存在,應發出簡單的警告消息。同樣,保存HEX文件時,必須包含所有數據EEPROM信息,也可以提供不包含數據EEPROM信息的選項。嵌入數據EEPROM信息到HEX文件時,應從地址F00000h開始。
六、AC/DC特性編程/驗證測試模式的時序要求
標準操作條件建議工作溫度為25°C。文檔中給出了一系列參數,包括電壓、電流、時間等的最小值、最大值和單位,以及相應的條件。例如,高壓編程電壓VIHH在MCLR/VPP上的范圍是9.00 - 13.25V,低壓編程電壓VIHL在MCLR/VPP上的范圍是2.00 - 5.50V等。
在實際應用中,電子工程師需要根據這些編程規范和要求,選擇合適的編程方法和參數,確保PIC18FXX80/XX85系列微控制器的正確編程和使用。大家在編程過程中遇到過哪些問題呢?歡迎在評論區分享交流。
-
編程規范
+關注
關注
0文章
10瀏覽量
9025
發布評論請先 登錄
PIC32MX1XX/2XX 28/36/44 - PIN 32 位微控制器:功能與應用深度解析
深入剖析Microchip PIC18F6393/6493/8393/8493系列微控制器
PIC18CXX2高性能微控制器深度解析
深度剖析Microchip PIC18F2458/2553/4458/4553系列微控制器
PIC18F2XXX/4XXX系列閃存微控制器編程規范解析
PIC18F2331/2431/4331/4431 微控制器:高性能與低功耗的完美結合
深入解析Microchip PIC12C5XX系列8位CMOS微控制器
AT89C51IC2:高性能8位Flash微控制器的深度解析
探索PIC16(L)F183XX微控制器:特性、應用與設計要點
PIC18F8723 系列微控制器:高性能與低功耗的完美結合
Microchip PIC18F2458/2553/4458/4553系列微控制器深度解析
PIC16F72:8位CMOS FLASH微控制器的深度剖析
Microchip PIC18F2XXX/4XXX 系列閃存微控制器編程指南
PIC18F24/25Q24微控制器技術解析與應用指南
PIC18FXX80/XX85 Flash微控制器編程規范解析
評論