1. 程式人生 > >HC12微控制器上的快閃記憶體核心程式設計

HC12微控制器上的快閃記憶體核心程式設計

HC12微控制器上的快閃記憶體核心程式設計

作者       Sven Deckardt

限制       草案檔案

摘要       本應用筆記的目的是解釋如何為HC12實現CCP快閃記憶體核心以及如何為快閃記憶體程式設計配置CANape Graph。

目錄

1.0概述... 1

快閃記憶體核心的一般用法... 1

2.0 Flash核心... 3

2.1結構... 3

2.2 Flash例程... 5

2.3一般準備... 5

3.0 D60 Flash核心示例... 5

3.1 CAN / CCP驅動程式... 5

3.2 Flash例程... 6

3.3 XCPPAR.H.. 7

3.4 CANape圖的配置... 8

4.0聯絡... 10

 

 

1.0概述

本文件介紹瞭如何為HC12D60微控制器編寫快閃記憶體核心以及如何配置CANape Graph中的設定以啟用快閃記憶體程式設計。快閃記憶體核心的目的是將CANape Graph中的hex檔案下載到電子控制單元(ECU)的快閃記憶體中。

 

每當快閃記憶體必須重新程式設計時,CAN核心通過CCP自動將快閃記憶體核心載入到微控制器的RAM中。快閃記憶體核心包含一個最小的CCP和CAN驅動程式以及執行快閃記憶體程式設計所需的所有快閃記憶體程式。

 

該文件應該用作骨架,這使您可以為ECU編寫自己的快閃記憶體核心。

 

注意:本應用筆記的原始碼僅在Vector的客戶請求中提供。

快閃記憶體核心的一般用法

ECU的目的是利用RAM中的感測器資料或其他訊號進行計算。主應用程式儲存在ECU的ROM或快閃記憶體中。在執行操作中,使用者可以通過更改來改變ECU的行為 一些引數藉助於測量和校準工具,如CANape Graph(見圖1)。一般的缺點是隻能更改RAM資料。儲存在快閃記憶體中的資料只能通過特殊的快閃記憶體程式進行程式設計。

 

圖1:ECU的正常執行,使用CANape進行測量

 

為了解決這個問題,可以將快閃記憶體例程整合到主ECU應用程式的程式碼中。這個解決方案的缺點是快閃記憶體必須要浪費,因為這些快閃記憶體例程不經常使用,出於安全考慮,它們不應該是在已釋出的產品中可用。另一種解決方案是使用快閃記憶體核心。 每當快閃記憶體必須重新程式設計時,CAN核心通過CCP將快閃記憶體核心載入到微控制器的RAM中。快閃記憶體核心包含所需的快閃記憶體例程,它自己的CAN和CCP驅動程式通過CAN介面與CANape Graph進行通訊。

圖2:使用者在CANape的幫助下將帶有整合CCP和CAN驅動器的快閃記憶體核心載入到ECU的RAM中

 

下載快閃記憶體核心後,它將在ECU的RAM中執行。最小的CCP驅動程式與CANape Graph通訊並等待資料,該資料必須由快閃記憶體程式程式設計。

圖3:CANape通過使用核心的CAN介面將一個hex檔案(例如主應用程式)快閃記憶體到ECU的快閃記憶體中,舊的主應用程式儲存在快閃記憶體中將被擦除然後重新程式設計

 

注意:

如果在快閃記憶體程式設計期間出現任何問題,請檢查以下幾點:

   RAM區域是空的(快閃記憶體核心是否使用)?

   來自主應用程式的中斷函式是否覆蓋快閃記憶體核心,例如 “定時器中斷”

2.0 Flash核心

2.1結構

Flash核心包含三部分程式碼:

   CAN驅動程式,用於CAN通訊

   用於ECU和CANape Graph之間通訊的CCP驅動程式

   快閃記憶體程式設計程式,用於程式設計ECU的快閃記憶體

圖4:快閃記憶體核心的內容

由於ECU中使用了不同的微控制器,因此使用者必須使CAN驅動程式和快閃記憶體程式設計程式適應ECU.VECTOR提供的CCP驅動程式不需要任何更改。

 

在第4章(帶有Flash核心的CCP_TEST示例)中,將討論如何調整這些檔案的示例。

 

flash核心檔案(例如D60ccp.fkl)由兩部分組成:ASCII-header部分和Intel-Hex檔案部分。核心標頭檔案必須由使用者調整。必須編譯flash核心並且必須轉換為Intel-Hex格式。

 

圖5:快閃記憶體核心的詳細資訊

2.1.1 flash核心標頭檔案

Flash核心標頭檔案包含有關核心檔名,RAM位置的地址以及快閃記憶體核心中主函式的起始地址的一些資訊。

 

注意:

flash核心的主要應用必須以函式:ccpBootLoaderStartup()開頭,確保FLASH_KERNEL_RAM_START具有正確的函式地址。 有時,快閃記憶體核心位置與向量中斷表位於同一地址。 要檢查這一點,開發人員必須將核心的大小新增到FLASH_KERNEL_RAM_START地址。 例如,FLASH_KERNEL_RAM_START + FLASH_KERNEL_SIZE = 1533.這意味著0x1000  -  0x1533的RAM位置必須為空。

圖6:快閃記憶體核心的示例標頭檔案

2.1.2Intel®-Hex檔案

通常,使用者在使用HC12微控制器時會獲得Motorola-S檔案。但是,快閃記憶體核心需要Intel-Hex檔案。可以使用程式HEXTOOL.EXE建立轉換,該程式將Motorola-S檔案轉換為Intel Hex檔案.HEXTOOL程式由VECTOR提供。

 

要生成Intel-Hex檔案,您需要以下命令:

- HEXTOOL.EXE D60xcp.s D60ccp.hex

 - 複製kernelhead.txt + D60ccp.hex D:\ CAN \ CANape32 \ Exec \ D60ccp.fkl

圖7:Intel-Hex檔案的示例

2.2 Flash例程

使用者必須編寫四個快閃記憶體例程,由CCP驅動程式呼叫:

int flashEraseBlock(unsigned char * ptr)

擦除快閃記憶體部分

   int flashByteWrite(unsigned char * dest,unsigned char data)

在給定目的地寫一個位元組(快閃記憶體地址)

   void flashInit()

準備ECU進行程式設計

   void flashExit()

呼叫使用者特定的後續例程

 

這些功能的程式碼對於每個微控制器都是不同的。本應用筆記介紹瞭如何為Motorola HC12微控制器編寫這些功能。有關詳細資訊,請參閱第4節中我們實現的原始碼flash.c。

2.3一般準備

要通過快閃記憶體核心使用快閃記憶體程式設計功能,必須啟用ECU主應用程式的ccppar.h檔案中的“快閃記憶體程式設計核心下載”定義。

 

注意:

此選項啟用通過CANape Graph下載的快閃記憶體核心,但ECU內的常駐CCP驅動程式不包含任何快閃記憶體例程!

3.0 D60 Flash核心示例

3.1 CAN / CCP驅動程式

在此示例中,VECTOR提供的CAN驅動程式僅包含三個基本功能.VECTOR提供的快閃記憶體核心的CCP驅動程式無需任何更改即可使用。

圖8:boot_can.c和boot_ccp.c檔案

CAN驅動程式

  ccpBootInit()

初始化CAN驅動程式並配置匯流排時序

  ccpBootTransmitCrm()

功能用於傳送最大八個位元組的單個CAN訊息。,訊息儲存在傳送緩衝區0中,然後傳送

  ccpBootReceiveCro()

如果正確接收到訊息,則檢查接收緩衝區中是否有新訊息可用,然後返回值1

3.2 Flash例程

如前所述,使用者必須在flash.c檔案中編寫四個主要功能。

called by the CCP driver

 int flashEraseBlock (unsigned char *ptr)

該函式包含一個例程,它分析地址* ptr並選擇正確的快閃記憶體陣列和D60 HC12的位元組長度:

圖9:快閃記憶體陣列選擇,D60 HC12快閃記憶體核心的程式碼示例

 

通過應用擦除電壓,將完全擦除所選的快閃記憶體陣列。如果快閃記憶體陣列成功擦除,將返回值1.有關詳細資訊,請參閱flash.c.

 

注意:

D60 HC12包含兩個快閃記憶體陣列$ 1000 ... $ 7FFF和$ 8000 ...&FFFF。我們示例中使用的演示板包含一個內部監控程式,它保留$ C000 ... $ FFFF,因此第二個快閃記憶體陣列無法完全擦除(位元組長度= 4000h)。

 

int flashByteWrite(unsigned char * dest,unsigned char data)

此函式包含一個例程,該例程分析地址* dest並選擇正確的快閃記憶體陣列,並對儲存在該地址的資料中的單位元組進行程式設計。

   void flashInit()

通過設定I位禁用所有中斷

  voidflashExit()

是空的

flash_empty()

此函式檢查,如果地址startflash中的flash陣列的長度長度僅包含值

0xFFFF(=空)並在這種情況下返回值1。

  fpApplyEraseVoltage()

以特殊時序施加擦除電壓

  fpApplyProgrammingVoltag()

應用具有特殊時序的程式設計電壓

   fpDelayms()

延遲毫秒

  fpDelayus()

延遲us

 

重要筆記

為避免程式設計過程中的錯誤,請確保:

   快閃記憶體核心的大小盡可能小,不要浪費RAM!主要的CAN / CCP驅動程式還需要RAM空間,直到快閃記憶體核心執行。

   不要覆蓋您的堆疊指標或其內容

   必須正確選擇快閃記憶體陣列

   flash核心頭必須包含正確的RAM地址和檔案大小

3.3 XCPPAR.H

ccppar.h檔案包含快閃記憶體核心中XCP驅動程式的重要配置和選項。要建立正確的快閃記憶體核心,設定以下選項非常重要:

#define CCP_PROGRAM
#define CCP_BOOTLOADER_DOWNLOAD
#define CCP_BOOTLOADER_SIMPLE

CCP_PROGRAM

告訴我,快閃記憶體例程包含在這個應用程式中(快閃記憶體核心)

CCP_BOOTLOADER_DOWNLOAD

允許下載快閃記憶體核心

CCP_BOOTLOADER_SIMPLE

在定義時,只實現了一些主要功能來保持檔案大小

圖10:ccppar.h,D60 HC12快閃記憶體核心的程式碼示例

3.4 CANape圖的配置

要通過快閃記憶體核心在CANape Graph中啟用快閃記憶體程式設計,必須實現以下幾點:

   將副檔名為* .fkl的所需flash核心檔案複製到CANape \ Exec  - 或工作資料夾中

   開啟CANape專案,單擊選單中的“裝置/裝置配置”

點選“驅動程式配置”按鈕

切換到“FLASH”選項卡並插入ECU的每個快閃記憶體陣列的起始地址和位元組長度

啟用以下複選框:

 -  0xFF優化

 - 重新連線

並在組合框中選擇以前複製的快閃記憶體核心(D60ccp.fkl)。

   點選“淥k”然後“丟失”檢查,如果快閃記憶體核心執行正常,請將ECU ROM內容上傳到CANape:

   選擇“校準/從Flash上傳檔案”

選擇要儲存的檔名現在選擇選單條目“下載檔案到快閃記憶體”,然後選擇以前儲存的上傳檔案,並單擊“按鈕”。

如果一切配置正確,則會閃爍hex檔案。在狀態列中,進度條顯示快閃記憶體程式設計過程。

4.0聯絡

Vector Informatik GmbH
Ingersheimer Straße 24
70499 Stuttgart
Germany
Tel.: +49 711-80670-0
Fax: +49 711-80670-111
Email: [email protected]

Vector CANtech, Inc.
39500 Orchard Hill Pl., Ste 550
Novi, MI 48375
Tel: (248) 449-9290
Fax: (248) 449-9704
Email: [email protected]

VecScan AB
Fabriksgatan 7
412 50 Göteborg
Sweden
Tel: +46 (0)31 83 40 80
Fax: +46 (0)31 83 40 99
Email: [email protected]

Vector France SAS
168 Boulevard Camélinat
92240 Malakoff
France
Tel: +33 (0)1 42 31 40 00
Fax: +33 (0)1 42 31 40 09
Email:
[email protected]
Vector Japan Co. Ltd.
Nishikawa Bld. 2F, 3-3-9 Nihonbashi
Chuo-ku Tokyo 103-0027
Japan
Tel: +81(0)3-3516-7850
Fax: +81-(0)3-3516-7855
Email: [email protected]