硬件集成電路設計熱門培訓內容之Freescale HCS12系列MCU的通用編程器設計

時間:2018-03-23 10:12:00

隨著Flash技術在微處理器上的廣泛應用,單片機在開發和應用手段上有了革命性的變化,從傳統的仿真器(ICE)到目前流行的JTAG等。設計人員仍然在不斷地尋找一種移植性更高、更易操作、費用更低的開發手段。隨著微處理器制造工藝的提高,一些高端微處理器(如CPU12/16/32、PowerPC、ColdFire等)內部已經包含了用于調試的微代碼,都可以通過BDM等進行調試。由于這種方法省去了仿真器,因此避免了高頻操作、交直流電的不匹配等問題,而且隨著BDM標準的不斷規范和普及,用BDM調試模式進行嵌入式開發已經成為首選。
    Freescale公司HCS12系列MCU通用編程器是支持Freescale公司MC9S12系列、MC9S12X系列單片機的BDM調試工具,它可以用于對Freescale公司所有16位MCU的寫入和擦除操作。

1 編程器概述
    Freescale公司16位MCU通用編程器是用于Freescale公司16位MCU的BDM調試工具,編程器采用MC68HC908JB8為主控芯片,與目標板以BDM方式進行通信,與PC方則采用USB接口通信,由USB提供電源。編程器系統框圖如圖1所示。編程器的主要功能是實現對目標芯片Flash的擦除和寫入。


    
    編程器采用M68HC908JB8為主控芯片。與PC方通過USB進行通信,與目標板則通過BDM驅動模塊以BDM方式進行通信,系統由USB提供電源。

2 系統軟件設計
    軟件系統的設計主要包括:通信程序接口設計、PC方用戶程序設計、MCU方擦寫程序設計。系統在對目標芯片Flash進行擦除和寫入操作時,首先由PC方程序獲取用戶操作指令,然后調用相應的MCU方擦寫程序。通過通信程序接口將需要執行的擦除或寫入程序寫入目標芯片的RAM區,最后在PC方程序的控制下轉向擦寫程序所在RAM區的地址執行程序以完成對應操作。
    編程器使用USB方式與目標板進行通信。PC方的用戶程序與底層MCU方程序進行通信時,通信程序使用Freescale公司提供的相應動態鏈接庫來實現。
    BDM通信程序動態鏈接庫主要包含的函數如表1所列。具體實現時只需要直接在PC方用戶程序中調用動態鏈接庫的函數即可。


3 PC方用戶程序設計
3.1 程序主流程
    PC方用戶程序界面如圖2所示,主程序流程如圖3所示。S19是編程器生成的可下載的文件格式。


    
    啟動程序后首先檢測設備是否已經連接,如果沒有連接則返回錯誤信息,禁止以下的擦除和寫入操作。
    初始化過程結束,成功進入BDM模式后,系統開始等待用戶的操作指令,根據相應的指令作出操作。用戶在完成所需操作后按退出,關閉設備并退出主程序。
    為了實現編程器對HCS12系列MCU的通用性,“選擇芯片芯號”模塊的設計致關重要。要詳細分析HCS12系列MCU的特性,提取共性和相區別的信息,特別是RAM和ROM區的首尾地址信息,這些信息都需要存放到系統的相應數據庫中,以供編程器系統運行時根據所選芯片型號進行讀取,作為擦寫程序的起始地址數據。
3.2 擦除操作
    PC方擦除操作程序流程如圖4所示。在取得擦除命令后,程序首先載入對應芯片的擦除程序,然后將擦除程序的S19數據寫入目標芯片的RAM區中,最后執行GO PC指令,轉向芯片中擦除程序所在RAM區中的地址,執行擦除程序。


    3.3 打開和分析S19操作
    執行該操作,首先按行讀入打開的S1 9文件,并將S19數據保存到字符串數組中,每讀入一行同時驗證該行的校驗和,數組中一個單元就是S19一行的數據。然后對數據以頁為單位進行重新組合,并重新保存到新的字符串數組中,釋放先前的數組空間。
    3.4 寫入操作
 
    PC方寫入操作程序流程如圖5所示。在取得寫入命令后,程序首先取一頁數據,將數據寫入RAM區相應區域,接著判斷寫入程序是否已經寫入RAM區中,若沒有則再將對應芯片的寫入程序寫入RAM區。然后執行GOPC指令轉向目標芯片寫入程序所在RAM區中的地址處,開始執行寫入。寫入程序則進入等待寫入完成狀態,如果等待超時則中途退出;否則,若一頁寫入完成,則接著進行下一頁的寫入操作,直到最后一頁。


    4 MCU方擦寫程序設計
    MCU方的擦寫程序用于完成對目標芯片Flash的擦除和寫入操作。由于在Flash的擦除和寫入過程中,Flash是不能讀的,故擦除和寫入Flash的程序要放在RAM中,也就是說,在Flash的擦除和寫入前,要把擦除或寫入的可執行代碼復制到RAM中去,并讓程序在RAM中執行,這一部分操作是由PC方程序完成的。
    Flash的擦除和寫入操作應按以下步驟進行:
    ①清除Flash狀態寄存器FSTAT中的出錯標志位ACCERR和PVIOL,這是由于如果過去的Flash操作中如果有過出錯的情況,上面提到的出錯標志位將被鎖存。與其檢查這些標志位是否需要清零,不如清零這兩個標志。方法是向狀態寄存器FSTAT的這兩位寫零。
    ②寫Flash配置寄存器FCNFG的b1和b0。以MC9S12DP256為例,這兩位表示選擇256 KB的Flash中的哪一個64 KB。這里0x00表示PPAGE號為0x3F、0x3E、0x3D、0x3C這64KB,0x01表示PPAGE號為0x3B、0x3A、0x39、0x38這64 KB,0x02表示PPAGE號為0x37、0x36、0x35、0x34這64 KB,0x03表示PPAGE號為0x33、0x32、0x31、0x30這64 KB。
    ③寫PPAGE寄存器。
    ④檢查上一次Flash處理的命令是否執行完成,能否寫入新的命令。這是通過Flash狀態寄存器FSTAT中的命令緩沖區的標志位CBEIF是否為1,即命令緩沖區是否可以使用來實現的。若不能使用,則等待,直到可以使用。
    ⑤將要寫入的數據字寫到相應的地址中,地址必須為偶數地址。對于擦除操作,則被擦除段的任意地址都可以。
    ⑥向FCMD命令寄存器寫命令字0x41表示整體擦除,0x20表示單字節寫入。
    ⑦向Flash狀態寄存器FSTAT中的命令緩沖區的標志位CBEIF寫1清零。這時狀態寄存器中的CCIF位將置位,說明操作成功。
    結語
    利用MC68HC908JB8作為主控芯片,通過USB與PC方交互通信,以BDM方式與目標芯片進行通信,實現了一種用于Freescale HCS12系列MCU的通用編程器。系統選用MC68HC908JB8 MCU進行設計,不僅是因為這款芯片性價比高,而且在于其USB模塊使操作更加方便和可靠,本文所提出的16位通用編程器工作可靠,成本低。讀者可以以本系統為藍本,設計自己的應用于其他系列芯片的編程器,應用到支持BDM標準的其他系列微控制器中。

? 江苏快3号码表