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