Introduction
本文說明如何分辨 PIC MCU Device。
Highlights
本文討論下列項目:
- Device ID 簡介
- 如何讀取 Device ID
- 如何辨別 MCU
- 如何對照 Revision 符號
Device ID 簡介
記憶體 0x3FFFFE-3FFFFF 這個位置有特殊的用途,這兩個 bytes 儲存了 PicMicro 的 Device ID。Device ID 是 Microchip 設定的,當需要分辨 device 的時候會用得到。Device ID 可以用 Device Programmer (ex: ICD2) 或者是在程式裏以 TBLRD 指令讀出來。
Device ID 裏含有兩個資訊:
- Device ID bits: 由 DEVID2 和 DEVID1 bit7~5 共 11 bits 組成
- Revision ID bits: 由 DEVID1 bit0~4 共 5 bits 組成
底下是 PIC18F2525/2620/4525/4620 的 Device ID 暫存器的說明。以 4620 為例,將 DEVID2 (00001100) 和 DEVID1 bit7~5 (000) 組起來,就可以得到 4620 的 Device ID bits 為 00001100000,也就是十進位的 96:
如何讀取 Device ID
底下示範 Device ID 的讀取,程式利用 memcpypgm2ram() 從 0x3FFFFE~0x3FFFFF 位置讀出 Device ID:
在 PIC452(Rev. 7) MCU 上的執行結果:
如何辨別 MCU
要辨別 MCU,方法是先讀出 Device ID 兩個 bytes,取出 Devie ID bits (DEVID 2 和 DEVID1 bit7~5 這 10 bits),然後再對照各款 MCU 的 Device ID (欲知各款 MCU 的 Device ID 為何,需查閱 MCU datasheet)。
AN851 Source Code (Module1.bas) 裏有一個 Device ID 的簡易算法:
主要是底下這一行,利用除以 32 去除 Revision ID bits,留下 Device ID bits:
以 4620 為例,查 datasheet 得其 Device ID bits 為 00001100000,即十進位 96;而 452 的 Device ID bits 為 00000100001,即十進位 33。利用上式算出來的 Device ID,如果是 96 就是 4620,如果是 33 那就是 452 了。
計算式的 Tcl 寫法:
如何對照 Revision 符號
Revision ID bits 由 DEVID1 bit0~4 共 5 bits 組成,值域是 0 ~ 31。不過 Microchip 似乎很少用 Revision number,而常用 A1, B0, B1, C0, C1 這類文數字來稱呼 MCU 的 Revision。舉個例子, PIC18F452 目前有 B2,B3,B4,B5,C0,C1 這些 Revision:
查看 PIC18F452 Rev. C0 datasheet,可知 Rev. C0 對應的 Revision ID 為 0×07:
利用 ICD2 讀出的 Revision 也是有意義的符號 C0:
要對照 Revision 符號,可以到 C:\Program Files\Microchip\MPLAB IDE\Device 路徑下尋找 .dev file,然後找出 .dev file 中關於 devid 的描述。比如底下這是 PIC18F452.dev 的 devid 描述:
有了 devid 描述,就可以寫程式對照出 Revision number 與符號。
上列 devid 描述提供了另一個辨別 MCU 的方法,利用 idmask 和 id,我們可以:
-
辨別 Device 是否為 452:
-
對照 Revision number 與符號
0 意見:
張貼留言