1. 程式人生 > >DM365 spi_norflash無作業系統啟動和sys_bios啟動(一)

DM365 spi_norflash無作業系統啟動和sys_bios啟動(一)

專案需要:在TI的多媒體處理器DM365上跑SYS/BIOS系統,而不是通常的linux系統,而啟動方式採用spi 的norflash啟動。開發環境是CCS5.5

TI 官方在SPI flash啟動上所提供的資料並不是很多,而且網上查詢到的一些資料也基本上都是用來啟動linux系統的,但是,啟動的原理是一樣的。也就是這樣的一個流程。


RBL:ARM ROM Boot Loader,UBL:UserBootloader

RBL 是TI固化在晶片ROM中的bootloader。DM365 在上電啟動後先會執行RBL,然後通過RBL載入UBL,再通過UBL載入應用程式。

UBL 是一段小的程式,這段程式用於初始化PLL,DDR以及其他的一些外設,然後進行將應用程式程式碼從flash拷貝到DDR的功能。然後跳轉到應用程式的入口地址。

意思就是,UBL就是用來為想要啟動的應用程式配置環境,然後將應用程式匯入到DDR或者片內,然後進行執行,下面就介紹本次開發所做的主要的5個實驗,從片內程式的啟動到SYS/BIOS系統的啟動。主要的介紹實驗的目的和實驗中所遇到的一些問題,及解決的方法。

二:UBL描述符

UBL 的描述符是用來描述整個UBL 的大小,起始地址,和UBL 的入口地址的一段字元,如果DM365配置為SPI flash啟動的話,在晶片上電的時候,DM365會自動的尋找這個UBL 的描述符,根據描述符的設定,將UBL 拷貝到片內,然後跳轉到UBL的入口地址,開始執行。


0-3 幻數 用來表示SPI 啟動的SPI flash 的定址方式。

4-7 入口地址,意思是編譯生成的bin 檔案的入口地址,可以問自己定義的boot的入口地址,也可以是_c_int00()的函式地址,經測試都是可以進行啟動的。

8-11 UBL 的大小。

12  SPI 的頻率配置。

13  SPI fastread模式是否開啟配置。

14-15 偽位元組,填零即可。

16-19 在flash中的UBL存放的起始的地址。

20-23 把flash中的UBL匯入到片內的起始地址。

三:第一次啟動實驗(點亮LED,程式全部在片內)。

第一次的實驗是將一個點燈的程式當做UBL來進行測試,程式全部放入片內,程式中只有一些psc使能,和PLL配置,以及gpio配置,然後拉高了LED對應的GPIO,需要注意到的問題是:

1:UBL 描述符在燒寫工程中更改。

2:在UBL 的描述符裡需要將入口地址更改為點燈程式的_c_int00,可以通過debug目錄下的.map檔案來找到程式的入口地址,也可以在工程屬性中進行如下配置,使程式模擬的時候不直接跳到main函式。


3:程式要控制到30KB以內。

4:bin檔案的生成


在command下輸入:

"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin""${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin""${CG_TOOL_ROOT}/bin/armofd" "${CG_TOOL_ROOT}/bin/armhex""${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin"

在工程編譯之後會在debug目錄下自動生成.bin檔案,然後在燒錄工程中新增UBL描述符,或者手動修改bin檔案新增UBL描述符,生成最終的bin檔案

5:整個UBL燒寫到FLASH的首地址0x000000.