2009年12月25日 星期五

[PIC] 如何辨別 PIC MCU Device

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 裏含有兩個資訊:

  1. Device ID bits: 由 DEVID2 和 DEVID1 bit7~5 共 11 bits 組成
  2. 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:

image

如何讀取 Device ID

底下示範 Device ID 的讀取,程式利用 memcpypgm2ram() 從 0x3FFFFE~0x3FFFFF 位置讀出 Device ID:

在 PIC452(Rev. 7) MCU 上的執行結果:

image

如何辨別 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:

image

查看 PIC18F452 Rev. C0 datasheet,可知 Rev. C0 對應的 Revision ID 為 0×07:

image

利用 ICD2 讀出的 Revision 也是有意義的符號 C0:

image

要對照 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 意見: