基于USB總線的MC68HC908JB8 Flash在線編程
$FFF6~$FFFD的8字節內容用于進入JB8的監控模式。監控軟件能完全訪問F1ash區,正常情況下,8字節的安全密鑰是不可能被猜出的,因為這些中斷服務程序的起始地址是被固化到用戶代碼區中的。
1.4 在ICP期間防止掉電的措施
配置ICP時必須考慮到ICP子程序運行過程中有可能掉電,系統必須能夠恢復和完成ICP程序。ICP_FLAG字的設計正是基于此目的。復位后讀ICP_FLAG字,決定JB8是進入正常的工作模式還是ICP模式。該字地址是$F7FE,在用戶代碼區的最后2個字節。復位之后,復位向量地址$FFFE~$FFFF指向ICP程序入口地址$F800,一旦初始化完成,檢查進入ICP模式或用戶模式的條件。在以下2種情況下JB8進入ICP模式:
?、?ldquo;假”向量的高字節$FF7C是無效的,即不在$DC和$F7之間;
②ICP_FLAG字不等于校驗和。否則,JB8進入正常的工作模式。
1.5 ICP編程
ICP編程流程圖如圖3所示。

一旦用戶代碼被燒入芯片,而“假”向量的高字節在無效的范圍($DC~$F7),同時ICP_FLAG被寫入校驗和(不能是$0000),則在插撥USB設備后,ICP代碼跳轉到正常操作的用戶模式。
進入JB8 ICP模式有2種方式:ICP_FLAG被寫入$0000,或者PTA0被下拉成低電平。用戶代碼包括特別的命令來編寫ICP_FLAG,一旦ICP_FLAG被寫入零,則再次插撥上電后,JB8進入ICP模式。ICP指令支持有限的USB標準協議,如讀取描述符和狀態字,設置地址和配置字,以及清特征字。
本文使用了一些必要的擦除、編程、校驗Flash命令,如表2所列。

在使用讀取狀態命令后,程序返回1字節的應答命令來表示Program Row(行編程命令)、Erase Block(塊擦除命令)和Verify Row(行校驗命令)命令是否成功。字節$01表示命令執行成功,字節$04表示命令執行失敗。
1.6 ICP_FLAG的編程
由于JB8是為HID應用設計的,最好使用HID命令來編寫ICP_FLAG,這樣可以無需額外的驅動。本文使用8字節的Set_Feature指令來設置ICP_FLAG,使用8字節的Get_Ack指令(只有1字節是有用的)來校驗設置是否正確(響應為$0O表示命令成功,為$01表示命令失敗)。設置8字節足出于安全的考慮,如果這8字節與JB8中$FFE6~$FFED的8字節相匹配,那么命令才是有效的。只有命令有效,ICP_FLAG才會被寫入0。指令使用格式如表3所列。














評論