1. 程式人生 > >DSP串列埠燒錄過程解析

DSP串列埠燒錄過程解析



     實現串列埠燒寫技術軟體分為PC機內用於資料傳送的頂層軟體和目標機內的底層軟體。頂層軟體可實現使用者程式的解析等;而底層軟體可實現由串列埠傳送的資料燒寫至Flash。F2812DSP每次上電覆位,先執行底層軟體,判斷是否需要重新燒寫Flash。若需要,則將串列埠傳送的目的碼燒寫至F2812片內Flash指定扇區;否則將繼續執行原有的使用者目的碼。燒錄過程主要包括以下三個核心模組:

* 上位機軟體GUI,實現與DSP命令交換和升級程式碼的傳輸;

* DSP板子裡的BootLoader程式,包含通訊程式碼和flash API程式設計程式碼

* 使用者升級的應用程式APPCODE

1 頂層軟體

     頂層軟體可實現使用者程式的解析等工作。其使用者程式為.oul檔案,頂層軟體主要完成.hex檔案的解析,並將解析後的有用資料傳送至目標DSP。.hex檔案的組織格式嚴格,只要提取資料在記憶體中的存放地址和資料長度就可以按照要求將資料傳送給目標DSP。如果使用者程式很大而目標DSP的記憶體空間不足時,該過程還可以分段進行。頂層軟體可以使用VC++或者LabVIEW等實現。

2 底層軟體

      底層軟體用於實現將串列埠發來的資料燒寫至Flash.涉及到使用者程式的正確定位和復位後的啟動過程,是整個軟體設計的重點。底層軟體主要實現以下功能:

    (1)燒寫程式搬移功能。由於F2812片上Flash不支援在其中一個扇區執行程式去擦除或燒寫其他扇區,故完成接收資料和燒寫Flash工作的這部分程式需搬移至片內RAM或片外RAM上執行

     (2)上電覆位查詢功能。上電覆位後查詢一個通用I/O埠的狀態以確定是否需要燒寫程式。這個通用I/O埠可由使用者自行確定,但I/O端口占用後其特殊功能便不可用,上電覆位後保證其確定狀態,否則會不間斷燒寫程式或者不能正確跳轉到使用者應用程式。

      (3)接收PC機發送的資料並儲存到目標DSP記憶體。這是在串列埠接收中斷服務子程式中完成的,並確定用於資料儲存的這部分記憶體未佔用。

     (4)接收結束後將記憶體中的資料燒寫至指定Flash扇區,這由Flash28lx_APl函式完庫成。圖1為底層應用軟體流程圖。

 

3 底層軟體的定位

     電覆位後,XMP/MC引腳為低電平.目標DSP處於計算機模式,CPU將從內部Boot Rom獲得復位向量。復位向量指向BootRom並執行其內部的Bootloader程式,執行完畢後確定從內部Flash啟動.程式指標跳轉到Flash的Ox3F7FF6處.這個地址是同定的,因此底層軟體程式必須燒寫在以這個地址為起始地址的空間內,或者在0x3F7FF6燒寫一條跳轉指令,上電覆位後通過跳轉指令跳轉到底層軟體程式。

4 使用者應用程式的定位

     使用者應用程式從main函式開始,但DSP首先必須呼叫_c_int00函式建立C語言的執行環境,主要包括:建立初始化系統堆疊,把.cinit段中的資料表拷貝到.bss段。對全域性和靜態變數初始化等。_c_int00執行結束後呼叫main函式開始執行使用者應用程式。因此_c_int00函式的首地址才是整個程式的入口點。底層軟體程式執行結束後應該呼叫_c_int00函式,而不是main函式,可用跳轉指令實現,參考程式如下:

 

Flash線上燒寫操作就是將儲存起來的DATA,燒寫到二級載入程式搬移表所指定位置的Flash中。線上燒寫的思想是,首先將儲存起來的DATA載入到DSP的內部RAM或系統的外部RAM中,再通過線上燒寫程式將載入的DATA寫入到Flash中。DSP實驗板Flash採用的是AM29LV160D,根據其資料手冊分別建立擦除voidChipErase(void)和寫入Byte Write(int offsent,short data)子函式。編寫線上燒寫程式如下:

在對Flash寫操作前首先要進行其擦除,在擦除後要指定DATA存放首地址Saddr,要燒寫到的Flash首地址FlashAddr,以及待燒寫的資料長度Length。在有多個DATA段時,程式中要進行相應個數的DATA段燒寫指定操作。

線上燒寫程式設計完成後,編譯將.out檔案下載到DSP中,可以在擦除操作完成,開始燒寫前設定斷點,執行完Flash擦除操作後,將儲存的DATA載入到程式中指定的位置,為了確保燒寫程式的正常執行,不能將DATA載入到燒寫程式佔據的RAM空間。當所需要燒寫的DATA全部載入完成後繼續執行燒寫程式,即可完成Flash的線上燒寫。