• 沒有找到結果。

如何建立 DSP 的 Boot ROM

第四章 嵌入式影像處理系統之應用

4.6 如何建立 DSP 的 Boot ROM

  DSP 程式在開發階段通常使用 JTAG 模擬器進行程式碼下載與除錯,實際應 用時則需要DSP 在每次送電後都能開始獨立運作,因此必須將開發完成的程式碼 燒錄到電路板上的FLASH ROM。要達到 ROM 開機之目的,首先要撰寫二次開 機 載入 程式(Secondary Bootloader) 並將它加入原本的 DSP 專案中,程式開發完 成 後 再 使 用 德 州 儀 器 公 司 提 供 的 hex6x 工 具 程 式 將 專 案 編 譯 後 產 生 的 COFF 檔 (.out) 轉 換 成 燒 錄 用 的 Hex 文 字 檔 , 最 後 則 是 將 Hex 檔 的 內 容 燒 錄 到 外 部 的 FLASH ROM。

4.6.1 C6414T 的 ROM 開機程序

  德州儀器公司有多種的DSP 產品線,而且不同型號的 DSP 其 ROM 開機程序 也不盡相同。以 C6414T 為例,在上電重置後只能使用 8-bit ROM 開機模式,從 EMIF-B 的 CE1 複 製 1K Bytes 的 資 料 到 內 部 記 憶 體 的 位 址 0 , 由 於 實 際 應 用 上 DSP 程式必定會超過此大小,故此部分通常只儲存另外撰寫的二次開機載入程式 (Secondary Bootloader),負責把其它程式區段複製到執行程式的記憶體,完成後 便跳到專案程式的進入點開始執行,如圖4-14 所示。

4.6.2 產生燒錄用的 Hex 檔

  為了產生燒錄用的 Hex 檔,要做一些對應的設定及增加 2 至 3 個檔案到專案 中,圖4-15 是 DSP 開發環境 CCStudio 的專案列表與 DSP/BIOS 配置的部分畫面,

以下將其分成三個部分說明。

① C6414T 的內部記憶體有 1M Bytes,因為這次的 DSP 專案中有使用到德州 儀 器 公司 提 供 的即時作 業 系統DSP/BIOS,因此配置記憶體時要將此 區域 分成二部分:

 BOOT_ISRAM:儲存 ROM 開機時硬體自動由 EMIF-B 的 CE1 空間 複製來的1K(0x00000400)Bytes 資料,起始位址是 0x00000000。此 區的create a heap in this memory 選項必須取消,同時 space 要設為 code/data。

 ISRAM:起始位址緊接於 BOOT_ISRAM 之後(0x00000400) ,長度 則是1M -1K = 1047552(0x000FFC00) 。由於本專案使用此區做為程 式 與 主 要的 資料 記憶 體, 因此 space 一樣設為 code/data ,同時要勾 選create a heap in this memory,給程式中動態配置記憶體時使用。

圖4-14 C6414T 的 ROM 開機程序

圖4-15 產生燒錄用的 Hex 檔所需之相關設定與檔案

② BootLoader.asm 即前述的二次開機載入程式,在 ROM 開機時 包含於前述 的1K Bytes 裏被複製到 BOOT_ISRAM 之後開始執行。此部分使用 [20]書 附 光 碟 第 六 章的 範 例 檔boot.asm,負責將 DSP 專案的其它節區由 FLASH ROM 複製到 ISRAM。

③ 連結 命令 檔, 主要用來 定義 程式 節區 、記憶體配置與連 結命 令等。其中的 EIP2008cfg.cmd 是由 DSP/BIOS 配置程式自動產生,另外二個 cmd 檔則是 當作工具程式hex6x 的輸入檔,目的是將專案編譯後的 COFF 檔(.out)轉成 要燒錄的.hex 檔,這二個檔案內容幾乎相同,只是裏面指定的.out 檔分別 為Debug 版或 Release 版。因為 DSP 專案中只能有一個 cmd 檔,因此要將 這 二 個 cmd 檔 在 編 譯 時 排 除 , 作 法 是 在 檔 名 處 按 滑 鼠 右 鍵 選 擇 File Specific Options... ,然後將 Exclude file from build 選項打勾。圖 4-16 是 使用Debug 版的.out 檔轉換成 Hex 燒錄檔所需的 cmd 檔內容。

1K Bytes (Secondary Bootloader) 0x64000000

0x64000400

負責將FLASH 的 專案程式碼複製到

執行用記憶體

0x00000000

0x00000400

執行用記憶體 (1)

ROM Boot

(2) Secondary Bootloader

EMIF-B CE1 (FLASH) DSP 內部記憶體

其它外部記憶體 專案程式碼

執行用記憶體

圖4-16 將 out 檔轉換成 Hex 燒錄檔所需的 cmd 檔內容

上列 三 個部分 只 需設 定 或撰寫一 次 ,以 後只 要燒錄 前 在 DOS 命令列執行下列命 令,就可以將最終編譯後產生的.out 檔轉換成 Hex 燒錄檔:

除錯版程式碼轉換: hex6x Source\EIP2008_ROMBoot.cmd 或

發行版程式碼轉換: hex6x Source\EIP2008_ROMBoot_Release.cmd 如果擔心燒錄前忘了轉換成最新的Hex 檔,也可以使用 Project→Build Options...

叫出圖4-17 的畫面,將上述命令依程式碼的版本 擇一加入 Final build steps 。如 檔』,包含多種格式,例如:Intel Hex、ASCII-Hex、Motorala-S 等等。目前我 們使用hex6x 的版本是 v6.0.8,當如圖 4-16 的 cmd 檔內設定輸出格式使用-a 選項

-a -o .\Output\EIP2008.hex -map .\Output\EIP2008_hex.map

/*********************************************************

設定FLASH ROM 相關的資訊 , 並使用 -boot 相關的選項 其中的 .boot_load 要與 BootLoader.asm 裏設定的 .sect 相同

**********************************************************/

-memwidth 8 -boot

-bootorg 0x64000400

-bootsection .boot_load 0x64000000

資料, 每 列的資料個數可能不同但 仍 然是連 續 位 址 ,除 非 再次 遇 到$A 開頭的位 址。Hex 檔解析之目的就是把以字元表示的十六進制位址與資料轉換成二進制的 數值,然後由USB 傳送到 DSP 進行 FLASH ROM 的燒錄。

b) 燒錄函式

  燒錄函式位於DSP 程式中,負責接收 PC 端解析 Hex 檔之後傳來的資料,然 後對FLASH ROM 進行燒錄與比對。FLASH ROM 連接於 EMIF-B 匯流排上,而 程式裏的邏輯位址與EMIF-B 實體位址之間的對應關係會因為所連接的記憶體資 料匯流排寬度而不同。因為C6414T 在 ROM 開機階段固定使用 8 位元的非同步記 憶 體 時 序 , 所 以 兩 種 位 址 的 對 應 關 係 如 表 4-3 所 示 , 再 參 考 圖 2-8 EMIF-B 與 FLASH ROM 的位址連接方式,可得到邏輯位址與 FLASH ROM 位址剛好對齊於 第0 個位元,即程式中的位址值可以直接對應到 FLASH ROM 的位址。

  FLASH ROM 的讀寫操作是以命令方式進行,而命令位址與電路中設定的資 料匯流排寬度有關,雖然DSP 在 ROM 開機時使用的是 8 位元模式,但電路設計 時FLASH ROM 是定義為 16 位元模式,因此對 FLASH ROM 讀寫時要使用它的 Word 命令。完整的命令定義可參考[17]的表 14,表 4-4 僅列出目前燒錄時有使用 到的命令。

圖4-17 設定編譯後自動產生 Hex 燒錄檔

$AYYYYYYYY, XX XX XX XX …

8 位數的十六進制位址

2 位數的十六進制資料 圖4-18 ASCII-Hex 格式

表4-3 使用非同步憶記體時邏輯位址與 EMIF 位址的對應關係[28]

表4-4 FLASH ROM(Am29LV320DB)燒錄命令摘要

表4-4 中,Addr 與 Data 欄位的數值均為十六進制。RA:要讀取的位址、RD:讀 取 的 內 容 、PA : 要 燒 錄 的 位 址 、 PD : 要 燒 錄 的 內 容 、 SA : 區 段 的 位 址 , 由 FLASH ROM 的位址線 A[20:12] 指定。Am29LV320DB 屬於 Bottom Boot Block 型式的FLASH,詳細的 SA 與區段編號或位址範圍的關係請參考[17]的表 4。

相關文件