OMAP-L138_FlashAndBootUtils使用及編譯指導(dǎo)
2013-07-01
作者:吳紅軍
來(lái)源:TI通用數(shù)字信號(hào)處理系統(tǒng)技術(shù)支持
摘要
本文介紹OMAP-L138_FlashAndBootUtils工具包基本框架和串口燒寫(xiě)工具sfh_OMAP-L138.exe工作原理,使用方法,以及針對(duì)客戶的硬件如何修改代碼,,搭建編譯環(huán)境并重新編譯,并總結(jié)了使用該工具的常見(jiàn)問(wèn)題,。
關(guān)鍵字:OMAPL138, 串口燒寫(xiě), UBL
簡(jiǎn)介
OMAP-L138支持多種啟動(dòng)模式,包括SPI,,NAND,,NOR等。TI為用戶提供了兩套flash燒寫(xiě)工具:
(1) 使用TI 在PSP 包或OMAP-L138_FlashAndBootUtils 包中提供的flash writer 的CCS工程,,通過(guò)仿真器連接硬件板,,按照提示步驟燒寫(xiě)flash。
(2) 使用OMAP-L138_FlashAndBootUtils工具包中的串口燒寫(xiě)工具(如sfh_OMAP-L138.exe),,通過(guò)串口連接,,進(jìn)行命令行燒寫(xiě),。
本文接下來(lái)將針對(duì)第二種方式進(jìn)行詳細(xì)介紹,。
用戶可以從開(kāi)源網(wǎng)站上下載最新的OMAP-L138_FlashAndBootUtils版本[1]。最新的版本為OMAPL138_FlashAndBootUtils_2_40,,本文以此版本展開(kāi)討論,。
OMAP-L138_FlashAndBootUtils_2_40工具包支持TI公司的多種芯片平臺(tái)的flash燒寫(xiě),包括OMAPL138,,AM1808,,C6748等。工具包內(nèi)的代碼是對(duì)應(yīng)LogicPD的OMAL138/AM1808 EVM板的,。如果用于用戶自己的硬件板,,可能需要修改工具包中相應(yīng)代碼并重新編譯,。
該工具包中包括多種flash工具及代碼。主要目錄如表1所示,。
表1 OMAP-L138_FlashAndBootUtils_2_40工具包目錄結(jié)構(gòu)
1. 串口燒寫(xiě)工具sfh_OMAP-L138.exe的工作原理
sfh_OMAP-L138是OMAP-L138_FlashAndBootUtils包中用于實(shí)現(xiàn)串口燒寫(xiě)flash的應(yīng)用程序,。與UartHost.exe[3]工具不同,UartHost.exe是UART啟動(dòng)工具,,不能燒寫(xiě)flash,。
運(yùn)行sfh_OMAP-L138.exe時(shí),通過(guò)UART啟動(dòng)方式下載并運(yùn)行OMAPL138/GNU/sft目錄下的AIS格式bin文件,,完成芯片的初始化操作,。然后通過(guò)UART與sfh進(jìn)行命令交換,實(shí)現(xiàn)flash的擦除和燒寫(xiě)工作,。
從OMAP-L138/GNU/sft/build目錄中的makefile文件可知,,編譯sft目錄內(nèi)各bin文件時(shí)需要sft.c,device.c,,uart.c以及針對(duì)不同flash對(duì)應(yīng)的flash初始化文件,。
例如sft_OMAPL138_SPI_MEM.bin是由sft.c,device.c,,uart.c等文件與spi.c,,spi_mem.c,device_spi.c一起編譯,,并通過(guò)OMAP-L138/GNU/AISUtils目錄下的HexAIS_OMAP-L138.exe,,根據(jù)sft目錄下的配置文件sft_hexais.ini內(nèi)的配置信息,將.out文件轉(zhuǎn)換成AIS格式的.bin文件,。
2. 命令格式介紹
在命令行下輸入sfh_OMAP-L138.exe –help輸出命令格式說(shuō)明如下:
sfh_OMAP-L138 <Command> [-targetType <Target>] [-flashType <FlashType>] [<Options>] [<InputFiles]各參數(shù)說(shuō)明如下表所示,,targetType默認(rèn)為OMAP-L138,F(xiàn)lashType默認(rèn)為SPI_MEM,。使用默認(rèn)選項(xiàng)時(shí)相應(yīng)參數(shù)可以不輸入,。
3. sfh_OMAPL138.exe常用命令的使用
sfh_OMAPL138.exe常用命令如表2所示。
表2 sfh_OMAPL138.exe常用命令表
以SPI flash啟動(dòng)為例,,準(zhǔn)備如下文件:
. ? sfh_OMAPL138.exe,,來(lái)源于OMAP-L138_FlashAndBootUtils_2_40工具包。
. ? ubl-spi_ais.bin,,來(lái)源于OMAP-L138_FlashAndBootUtils_2_40工具包,。
. ? u-boot.bin,來(lái)源于SDK PSP目錄下的UBoot,。
. ? u-boot-ais.bin,,由UBoot編譯出的elf格式文件u-boot,通過(guò)AIS轉(zhuǎn)換工具生成。
首先將OMAL138/AM1808 EVM板設(shè)置為UART2啟動(dòng)模式,,S7開(kāi)關(guān)設(shè)置如圖1所示,。用直連串口線連接PC與EVM板,打開(kāi)EVM板電源,。在命令行模式下進(jìn)入目錄:OMAP-L138_FlashAndBootUtils_2_40\OMAPL138\GNU,。
圖1 S7開(kāi)關(guān)設(shè)置
3.1全局擦除flash命令
sfh_OMAPL138.exe –targetType OMAP-L138 –flashType SPI_MEM –erase
圖2 sfh_OMAPL138.exe –erase命令運(yùn)行界面
運(yùn)行結(jié)果如圖2所示,如果是先上電,,后執(zhí)行該命令,,則需要按下板子上的reset鍵輸出“BOOTME”給上位機(jī)的sfh。
3.2燒寫(xiě)單個(gè)AIS格式的應(yīng)用程序
sfh_OMAP-L138.exe –targetType OMAP-L138 –flashType SPI_MEM -flash_noubl u-boot-ais.bin
OMAP-L138的RBL支持AIS格式,,可以在啟動(dòng)過(guò)程中通過(guò)AIS格式文件中的配置信息初始化芯片,,如PLL,DDR等,。這樣就可以直接將程序加載到片外內(nèi)存,,而不受片上內(nèi)存大小限制,省略二級(jí)Boot,。
編譯UBoot時(shí),,在UBoot根目錄下會(huì)生成一個(gè)elf格式的u-boot文件,如圖3所示,,在AISgen.exe工具里添加PLL,,DDR等配置參數(shù),將此文件轉(zhuǎn)換成AIS格式的bin文件,,可以直接燒寫(xiě)并啟動(dòng),。
圖3 AISgen 配置界面
該命令將AIS格式的UBoot文件寫(xiě)到flash的起始地址。命令執(zhí)行顯示結(jié)果如圖4所示:重新上電,,從圖5啟動(dòng)信息可見(jiàn)沒(méi)有UBL的運(yùn)行信息,,是直接從UBoot運(yùn)行的。
圖4 sfh_OMAPL138.exe –flash_noubl命令運(yùn)行界面
重新上電,,從圖5啟動(dòng)信息可見(jiàn)沒(méi)有UBL的運(yùn)行信息,,是直接從UBoot運(yùn)行的。
圖5 從UBoot直接運(yùn)行界面
3.3燒寫(xiě)UBL和UBoot
sfh_OMAP-L138.exe –targetType OMAP-L138 –flashType SPI_MEM -flash ubl-spi-ais.bin u-boot.bin命令執(zhí)行結(jié)果顯示如圖5所示,。該命令將ubl-spi-ais.bin寫(xiě)到flash的起始地址,,u-boot.bin寫(xiě)到flash的0x10000的偏移地址。
圖6 sfh_OMAPL138.exe –flash命令運(yùn)行界面
UBL和UBoot燒寫(xiě)完后,,關(guān)閉EVM板電源,,按圖6所示,,將EVM板的S7開(kāi)關(guān)設(shè)為SPI flash啟動(dòng),。
圖7 S7開(kāi)關(guān)設(shè)置為SPI Flash啟動(dòng)
打開(kāi)串口終端如Hyper terminal,打開(kāi)EVM板電源,,串口終端輸出信息如圖7所示,,表示UBL和UBoot成功燒寫(xiě),,并成功從SPI flash啟動(dòng)
圖8 終端調(diào)試信息輸出
使用sfh_OMAP-L138.exe燒寫(xiě)UBL和UBoot時(shí),建議使用工具包自帶的UBL,。因?yàn)閁Boot的燒寫(xiě)地址,,要與UBL的讀取地址一致,這樣UBL運(yùn)行時(shí),,才能正確的讀取UBoot,。工具包自帶的UBL與燒寫(xiě)工具保證了這一點(diǎn)。其它版本的UBL需要用戶自行確認(rèn),。
4. 根據(jù)硬件改動(dòng)修改serial flash utility
開(kāi)發(fā)者自己的硬件板與TI的EVM比較,,會(huì)影響工具使用的不同部分可能存在于:
(1)DDR型號(hào)
(2)FLASH型號(hào)
(3)時(shí)鐘頻率
(4)UART配置
4.1 DDR參數(shù)修改
EVM板用的是mDDR,大多數(shù)用戶用的是DDR2,,需要修改OMAP-L138/Common/src/device.c文件中函數(shù)Uint32 DEVICE_ExternalMemInit( )的5個(gè)DDR參數(shù)值,。這個(gè)函數(shù)同樣被UBL調(diào)用,如果不用UBL,,則要在AISgen界面里配置正確的DDR參數(shù),。
可使用TI提供的DDR寄存器配置工具[5]。根據(jù)DDR手冊(cè)進(jìn)行DDR參數(shù)的計(jì)算,,
4.2 SPI flash
如果更改了SPI flash的硬件連接,,可在OMAP-L138\Common\include\device_spi.h文件中修改配置。
#define DEVICE_SPIBOOT_PERIPHNUM (1)//選擇SPI1
#define DEVICE_SPI_UBL_HDR_OFFSET (0*1024)//ubl在SPI flash中的偏移地址
#define DEVICE_SPI_APP_HDR_OFFSET (64*1024)//application image在SPI flash中的偏移地址如果更換了與EVM板不同的SPI flash,,必要時(shí)需要修改如下兩個(gè)文件:
OMAP-L138\Common\drivers\include\Spi_mem.h
OMAP-L138\Common\drivers\src\Spi_mem.c
4.3 NAND flash
NAND flash的數(shù)據(jù)位寬配置在OMAP-L138\Common\include\device_async_mem.h文件中定義:
#define DEVICE_ASYNC_MEM_NANDBOOT_BUSWIDTH (DEVICE_BUSWIDTH_8BIT)
如果NAND flash更換的與EVM上的不同,,必要時(shí)需要修改如下兩個(gè)文件
OMAP-L138\Common\drivers\include\Device_nand.h
OMAP-L138\Common\drivers\src\Device_nand.c
4.4 NOR flash
NOR flash是標(biāo)準(zhǔn)設(shè)備,除了時(shí)序參數(shù)之外,,一般不需要修改,,NOR flash相關(guān)代碼文件如下:
OMAP-L138_FlashAndBootUtils_2_40\Common\drivers\src\nor.c
OMAP-L138_FlashAndBootUtils_2_40\Common\drivers\include\nor.h
OMAP-L138\Common\src\device_async_mem.c
OMAP-L138\Common\include\device_async_mem.h
OMAP-L138_FlashAndBootUtils_2_40\Common\drivers\src\ async_mem.c
4.5 時(shí)鐘及PLL
如果外部輸入時(shí)鐘頻率不是24MHz,則需要OMAP-L138\Common\src\device.c文件中函數(shù)DEVICE_PLL0Init()和DEVICE_PLL1Init()的參數(shù)值,。
函數(shù)原型Uint32 DEVICE_PLL0Init(Uint8 clk_src, Uint8 pllm, Uint8 prediv, Uint8 postdiv, Uint8 div1 ,Uint8 div3, Uint8 div7)中pllm是PLL的倍頻系數(shù),,主頻計(jì)算公式為:
函數(shù)DEVICE_PLL1Init()參數(shù)含義與PLL0的類同,為DDR提供時(shí)鐘,。
4.6 UART配置
如果系統(tǒng)主頻發(fā)生變化,,相應(yīng)的模塊時(shí)鐘也改變,調(diào)試串口的分頻值需要做相應(yīng)調(diào)整,,否則串口輸出會(huì)因?yàn)椴ㄌ芈什徽_而出現(xiàn)亂碼,。根據(jù)不同的主頻修改OMAP-L138\Common\src\device_uart.c中DEVICE_UART_config的UART時(shí)鐘分頻系數(shù)divider的值,得到合適的UART波特率,。
如果不是用UART2做為調(diào)試串口,,修改OMAP-L138\Common\include\ device_uart.h文件中的DEVICE_UART_PERIPHNUM定義。
5. OMAP-L138_FlashAndBootUtils編譯環(huán)境搭建
在根據(jù)硬件改動(dòng),修改了代碼后,,需要對(duì)工具包重新編譯,,生成UBL和sfh_OMAP-L138.exe。如果在Linux下使用此工具,,需要在Linux下進(jìn)行編譯(具體編譯過(guò)程參考參考文獻(xiàn)4),。下面介紹如何在Windows環(huán)境下搭建OMAP-L138_FlashAndBootUtils的編譯環(huán)境。
編譯環(huán)境需要的幾個(gè)工具如下[6]:
(1)cygwin
(2).NET framework
(3)ARM Compiler tools(CodeSourcery G++ Lite)
(4)C6x Compiler Tools
(5)CCSV5
5.1 Cygwin安裝
從http:/ / www. cygwin. com/下載并運(yùn)行在線安裝工具setup.exe,,注意安裝路徑中不能帶有空格,。具體步驟如下:
1) 選擇從互聯(lián)網(wǎng)安裝;也可以選擇先下載,,再?gòu)谋镜匕惭b,。
圖9 cygwin安裝界面1
2) 選擇安裝路徑。
圖10 cygwin安裝界面2
3) 可選擇直接連接或使用代理,。
圖11 cygwin安裝界面3
4) 選擇從哪個(gè)網(wǎng)址或者服務(wù)器上進(jìn)行下載,。
圖12 cygwin安裝界面4
5) 選擇安裝包
圖13 cygwin安裝界面4
一般選擇以下三項(xiàng),其他默認(rèn)即可,。
• Devel-->make: The GNU version of the 'make' utility
• Devel-->subversion: A version control subsystem
• Editor-->vim (or similar)
安裝后要先運(yùn)行一次cygwin 后,,才會(huì)在cygwin/home/下出現(xiàn)Administrator 目錄,進(jìn)入該目錄,,修改.bashrc,。
同時(shí),需要驗(yàn)證變量TMP和TEMP是否包含/tmp,。使用如下命令:
echo $TMP
echo $TEMP
如果找不到"unset TMP" and "unset TEMP",,可在cygwin\home\[user]\.bashrc 文件中添加如下命令創(chuàng)建:
export TMP=/tmp
export TEMP=/tmp
設(shè)置完后,重新打開(kāi)cygwin即可,。至此,,cygwin安裝完成。
5.2 NET framework
從下面網(wǎng)址下載安裝最新的.NET Framework(4.0或者更高的版本)
http:/ / www. microsoft. com/downloads/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992&displaylang=en
安裝默認(rèn)路徑為C盤(pán),。然后將C#編譯器路徑添加到windows系統(tǒng)環(huán)境變量中,。進(jìn)入目錄
C:\WINDOWS\Microsoft.NET\Framework查看軟件的版本號(hào)并復(fù)制,如
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319,。然后右鍵我的電腦->屬性->高級(jí)->環(huán)境變量,,如圖13所示,選擇系統(tǒng)變量中的path 點(diǎn)擊編輯,,在原有變量值后粘帖添加剛剛復(fù)制的內(nèi)容,,路徑之間以’;’分隔。至此,,Net Framework安裝結(jié)束,。
圖14 windows環(huán)境變量設(shè)置
5.3 C6x Compiler Tools
在CCSV5安裝目錄下ccsv5\tools\compiler\c6000_7.3.4即為C6x編譯器目錄,,在CCSV3.3下的路徑為CCStudio_v3.3\C6000\cgtools\bin。如果沒(méi)有安裝CCS,,從下面網(wǎng)址下載TI的C6x 編譯工具并安裝,如不確認(rèn)版本則下載最新版本,。
https:/ / www-a. ti. com/ downloads/ sds_support/ TICodegenerationTools/download. htm
將C6x編譯器路徑添加到windows環(huán)境變量,。
5.4 ARM Compiler tools(CodeSourcery G++ Lite)
從下面網(wǎng)址下載安裝GCC交叉編譯器。注意交叉編譯工具的安裝目錄名不能含有空格,,否則編譯時(shí)會(huì)報(bào)錯(cuò),。
https://sourcery.mentor.com/sgpp/lite/arm/portal/release858
修改OMAP-L138_FlashAndBootUtils_2_40\Common\build.mak文件中的ARM_TOOLS_PATH變量為交叉編譯器的安裝路徑。例如ARM_TOOLS_PATH?=C:\\CodeSourcery\\arm-2009q1-203\\
5.5 CCSV5
如果需要用CCS編譯工程,,則安裝CCS,。
6. 編譯OMAP-L138_FlashAndBootUtils
6.1查看環(huán)境變量
打開(kāi)cygwin,輸入export,,查看環(huán)境變量是否設(shè)置成功,。顯示如下,黑色加粗的目錄為之前添加的環(huán)境變量,。
如未添加成功,,可以使用如下命令添加:
export PATH=<arm-compiler-root>/bin:<MS-.NET-Root>:<C6000-Compiler-Root>/bin:$PATH
6.2 編譯工具包
cd OMAP-L138
如果只是編譯命令行工具(如sfh_OMAP-L138),而不需要重新編譯CCS 工程,,則進(jìn)入GNU目錄進(jìn)行編譯,;如果只需要重新編譯CCS工程,則進(jìn)入CCS目錄進(jìn)行編譯,;如果兩者都需要,,則在OMAP-L138這個(gè)目錄進(jìn)行編譯。編譯命令如下:
make clean
make
7. 使用serial flash utility常見(jiàn)問(wèn)題及解決方法
7.1收不到“BOOTME”
在帶電情況下,,復(fù)位芯片,,如果還是收不到正確的“BOOTME”,檢查BOOTMODE設(shè)置,,串口終端波特率等參數(shù)設(shè)置,,串口線連接方式。
7.2 停在Waiting for SFT on the OMAP-L138…
如圖14 所示,,這種情況的原因通常有兩種:一是由于DDR 參數(shù)配置不正確從而導(dǎo)致程序運(yùn)行異常,,不能返回正確的指令給主機(jī);二是硬件原因,,可能是焊接,,或硬件連接上的錯(cuò)誤造成的??梢酝ㄟ^(guò)仿真器連接目標(biāo)板用BSL庫(kù)提供的測(cè)試程序驗(yàn)證一下DDR,,和相應(yīng)的flash,。如果沒(méi)有仿真器,可以通過(guò)間接的方法,,比如用AISgen 工具包里提供的UART 啟動(dòng)工具UartHost.exe 來(lái)加載運(yùn)行測(cè)試程序,,檢測(cè)DDR,flash 等,,將測(cè)試結(jié)果通過(guò)串口回傳顯示,,或者設(shè)置GPIO的狀態(tài)來(lái)反映。
圖15 sfh_OMAP-L138.exe命令運(yùn)行異常
7.3 燒寫(xiě)中途停止
如圖15所示,,燒寫(xiě)在中途停止,,這種情況通常是因?yàn)镈DR工作不穩(wěn)定,原因可能是DDR布線問(wèn)題導(dǎo)致信號(hào)完整性差,,可以嘗試降低DDR時(shí)鐘,,并用示波器測(cè)量信號(hào)質(zhì)量。
DDR不穩(wěn)定也可能表現(xiàn)在能成功燒寫(xiě),,但運(yùn)行不正常,,通常表現(xiàn)為串口打印停在解壓或啟動(dòng)內(nèi)核階段。
圖16 sfh_OMAP-L138.exe命令運(yùn)行異常信息
7.4 啟動(dòng)后串口沒(méi)打印
燒寫(xiě)成功,,啟動(dòng)后串口沒(méi)打印,,檢查U-boot里的調(diào)試串口配置,默認(rèn)為UART2,。
參考文獻(xiàn):
(1) http://sourceforge.net/projects/dvflashutils/files/OMAP-L138/v2.40/
(2) AISgen工具下載地址:http://www-s.ti.com/sc/techlit/sprab41.zip
(3) http://www.ti.com/lit/an/spraba5b/spraba5b.pdf
(4) http://processors.wiki.ti.com/index.php/Serial_Boot_and_Flash_Loading_Utility_for_OMAP-L138
(5) http://processors.wiki.ti.com/images/d/db/MDDR_DDR2_Memory_Controller_Register_Calc_Rev4.zip
(6) http://processors.wiki.ti.com/index.php/Rebuilding_the_Flash_and_Boot_Utils_Package