天天看點

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

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

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

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

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的入口位址,開始執行。

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

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函數。

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

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

4:bin檔案的生成

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

在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.

繼續閱讀