DAVINCI DM3730开发攻略——xload-1.51移植
DM3730開發(fā)攻略已經(jīng)停頓了一段時間,本人和公司其他軟件工程師都在忙攻克客戶定制的DM3730+OV的一款720P高清低照度產(chǎn)品和TVP5158 ?2路D1同時采集軟件,現(xiàn)在基本收尾工作,擠點時間,繼續(xù)寫開發(fā)攻略,希望對在這方面開發(fā)的朋友有幫助。本篇文章是基于本公司(桐燁科技)DM3730超級開發(fā)板上面進行描述的,估計和TI EVM有點差別,或者和其他開發(fā)板公司有些差別,但問題不大,都有參考作用。
1、DM3730啟動流程介紹
前面3篇文章已經(jīng)從總體介紹DAVINCI低功耗芯片DM3730的性能、特點、開發(fā)環(huán)境和軟件開發(fā)包,等等。下面就可以進入編程開發(fā)階段了。DM3730 boot軟件是Xloader和U-BOOT,這個和DM36X、DM6446、DM6467T(UBL+U-BOOT)有點不一樣,和DM8148、DM8168系列的(U-BOOT MINI+UBOOT)又不一樣。本來想把把xload和uboot一起寫,現(xiàn)在覺得還是分開好,有時寫太長的東西怕沒這么多精力,還有u-boot-2010.06要移植的東西也比較多。這篇文章從軟件角度重點如何讓板子BOOT起來。開發(fā)驅(qū)動和系統(tǒng)軟件前,有個DM3730非常重要的文件必須要介紹,這個文件就是DM3730系統(tǒng)開發(fā)技術(shù)參考手冊——sprugn4q.pdf,或者TI已經(jīng)把版本升級為sprugn4(x).pdf了,這個文件3673頁,比較恐怖,里邊很詳細(xì)介紹整個DM3730的每個功能模塊的結(jié)構(gòu)和寄存器描述,等等,開發(fā)系統(tǒng)和驅(qū)動程序,絕對要認(rèn)真看。
做好新的高頻布線PCB板子回來,NAND FLASH里邊是沒有程序的,在保證板子電器特性穩(wěn)定(主要是電源)穩(wěn)定的情況下,如何讓DM3730板子跑起來呢?這就要了解DM3730BOOT的過程。這一點在sprugn4q.pdf里邊也有介紹,TI的圖描述是這樣的:
圖-1 TI DM3730 BOOT初始化流程
圖-1第一個Preinitialization預(yù)初始化是要求從硬件上設(shè)計出滿足DM3730軟件BOOT起來的環(huán)境,比如電源、時鐘CLK、RESET、BOOT MODE選擇電路等等。TI DAVINCI 芯片DM3730和DM81XX系列的電源管理相當(dāng)復(fù)雜,TI專門為這些主CPU提供對應(yīng)的電源管理芯片,比如DM3730使用Tps659xx系列的電源IC。時鐘CLOCK電路涉及到外部晶振時鐘和內(nèi)部進行PLL時鐘的設(shè)置,RESET復(fù)位電路涉及到冷復(fù)位和熱復(fù)位等等,BOOT MODE選擇涉及到是從NAND FLASH BOOT、MMC(SD卡) BOOT、USB BOOT、UART BOOT還是XIP BOOT等等,BOOT MODE選擇可以使用電阻通過對sys_boot[5:0]信號腳上拉下拉,進行冷復(fù)位上電選擇。
圖-1 第2個框圖描述的是DM3730系統(tǒng)電源、時鐘、復(fù)位的上電復(fù)位時序,這個很講究的,以前寫DM6446、DM368開發(fā)攻略沒有提到這點,其實這些芯片都有上電復(fù)位時序。而在DM3730中,電源管理芯片Tps659xx已經(jīng)幫你實現(xiàn)這些時序的要求。
圖-1 第3個框圖說明DM3730內(nèi)部的COTEX-A8會從片上的ROM代碼區(qū)開始運行,這個ROM CODE已經(jīng)存在芯片內(nèi)部,然后根據(jù)BOOT MODE,去讀取對應(yīng)的NAND接口、MMC接口、UART接口、USB接口等等放置的代碼——Xloader,而Xloader編譯出來的文件是MLO文件。比如從MMC (SD卡)BOOT的時候,如果沒有SD卡,ROM CODE會轉(zhuǎn)到NAND FLASH上去找Xloader,如果NAND FLASH沒有Xloader,就會去找UART接口,這個順序有很多種,可以看看sprugn4q.pdf文檔。舉個例子,我們就把特殊格式化的SD卡或TF卡(使用TI要求的或提供的格式化軟件),COPYMLO文件到SD卡上,這樣一上電片上的ROM CODE就會把MLO給運行起來。下面本人把本公司的開發(fā)板上電串口信息COPY上來,讓大家更加了解這個過程。
60 ?(這個60表明ROMCODE已經(jīng)運行起來)
Texas Instruments X-Loader 1.51 (Jun ?1 2013 - 15:31:34) (開始運行Xloader代碼——MLO)
Starting X-loader on MMC ?(如果使用NAND BOOT,這里顯示的信息不一樣)
Reading boot sector
231524 Bytes Read from MMC (Xloader開始從SD卡讀U-BOOT的代碼)
Starting OS Bootloader from MMC...
Starting OS Bootloader... ? ?
U-Boot 2010.06-rc2 (Oct 29 2013 - 21:34:04) ?(開始運行U-BOOT)
OMAP34xx/35xx-GP ES2.1, CPU-OPP2 L3-165MHz
OMAP3 EVM board + LPDDR/NAND
I2C: ? ready
DRAM: ?512 MiB
NAND: ?512 MiB
*** Warning - bad CRC or NAND, using default environment
In: ? ?serial
Out: ? serial
Err: ? serial
Die ID #439600029e3800000149c75518033013
Net: ? resettingDM9000
dm9000
Hit ' ' or 'CR' or 'Esc' key to stop autoboot: ?0 (一上電就回車或空格進入U-BOOT命令行)
DM3730->
DM3730->
上面就是SD卡或TF卡BOOT的過程,一般工廠生產(chǎn)的時候,通過跳線帽對BOOT MODE的sys_boot[5:0]進行電平設(shè)置,選擇SD卡 BOOT或UART串口BOOT,畢竟NAND里邊SMT貼片出來是沒有程序的,當(dāng)然有些超大批量生產(chǎn)會使用特殊的燒錄器對NAND進行預(yù)先燒寫。無程序的板子維修的時候一般也是使用跳線帽對sys_boot[5:0]進行電平設(shè)置,選擇不同的BOOT MODE進行啟動板子,目的就是讓板子跑進U-BOOT再說,U-BOOT起來什么都好說。
圖-1 第4個框圖就是Xloader,第5個框圖就是U-BOOT和后面跑起來的kernel、掛載文件系統(tǒng)(ubifs,yaffs2,jaffs2等)、各種linux應(yīng)用程序。
2、xload-1.51移植
依據(jù)上篇《DAVINCI DM3730開發(fā)攻略——DVSDK4_03和雙核CODEC機制介紹.doc》的介紹,在dvsdk4_03\psp目錄下,有TI 提供的x-load-1.51-psp04.02.00.07.sdk源碼,我們就在這個源碼上就行修改移植。由于前面介紹DM3730支持好多種接口BOOT,我們做產(chǎn)品必須根據(jù)產(chǎn)品的特性選擇不同的BOOT MODE,在這里我們公司使用NAND BOOT和MMC BOOT模式。
第一步,在dvsdk4_03\psp\目錄下生成x-load-1.51和x-load-1.51-mmc兩個文件,前面的x-load-1.51是要燒寫進NAND FLASH的,而x-load-1.51-mmc編譯出來的MLO是為了生產(chǎn)和測試維修使用的。然后把x-load-1.51-psp04.02.00.07.sdk里邊的源碼COPY過來,而x-load-1.51-psp04.02.00.07.sdk里邊的源碼保持不動,是出于備份和以后出問題的對比參照源碼而考慮的。而x-load-1.51是我們要移植的,想怎么改都可以。
第一步,裁剪多余的文件夾和文件,在dvsdk4_03\psp\x-load-1.51\board目錄下只保留omap3evm文件夾,其他OMAP芯片平臺刪除掉,dvsdk4_03\psp\x-load-1.51\include\configs目錄下只保留omap3evm.h,沒辦法,本人追求簡潔。
第三步,在dvsdk4_03\psp\x-load-1.51目錄下生成build-x-load.sh的文件,內(nèi)容如下:
#for building x-load
exportPATH=$PATH:/home/davinci/dm3730/dvsdk4_03/linux-devkit/bin:(這行可以不要)
make distclean
make omap3evm_config
make
./signGP x-load.bin
chmod 777 x-load.bin.ift
cp x-load.bin.ift dm3730_xload.bin
cp dm3730_xload.bin /tftpboot
就是編譯的時候直接運行build-x-load.sh就可以得到我們想要的dm3730_xload.bin,這個dm3730_xload.bin就是要燒寫到NAND FLASH的,到時候會通過U-BOOT進行燒寫。Xloader放在NAND FLASH的地址范圍是0x00000000-0x00080000,其實放到第一個BLOCK 0x00000000-0x00020000就夠了,而從0x000080000的開始地方保存u-boot.bin,這個后面移植u-boot會提到。build-x-load.sh提到一個signGP的工具,這個一般賣開發(fā)板的公司都會提供這個工具,同時也把signGP放到這個x-load-1.51目錄下。上面sh文件make后會直接生成x-load.bin,但是x-load.bin是不能直接被片上的ROM CODE識別的,所以就需要signGP轉(zhuǎn)化一下,得到x-load.bin.ift,然后重新命名成dm3730_xload.bin并COPY到/tftpboot,到時候可以通過U-BOOT TFTP燒寫,等等。
第四步,開始修改源碼移植。為了使上面編譯出來的dm3730_xload.bin燒到NAND FLASH能讓ROM CODE識別,我們還得對x-load-1.51里邊的源碼進行修改,讓這個x-load-1.51能夠NAND BOOT,這里必須修改x-load-1.51\include\configs\omap3evm.h的一個宏定義:
/* Enable the below macro if MMC bootsupport is required */
//#define CONFIG_MMC ? ? ? ? ? ? ? 1 //Jingbo: for nand
就是要把#defineCONFIG_MMC給屏蔽掉。
x-load-1.51相對u-boot 來說,代碼比較簡單,文件也比較少,但是整個源碼工程也是參考了u-boot的結(jié)構(gòu),很像u-boot的源碼組織,主要關(guān)注x-load-1.51\Makefile,x-load-1.51\board\omap3evm\omap3evm.c和platform.S,x-load-1.51\include\configs\omap3evm.h。
先改x-load-1.51\Makefile:
第56行,
#CROSS_COMPILE = arm-none-linux-gnueabi- (屏蔽這個)
CROSS_COMPILE =arm-arago-linux-gnueabi- ?(使用開發(fā)環(huán)境篇介紹的linux-devkit交叉編譯工具)
第149行的
omap3evm_config : ? ? ? unconfig
? ? ? @./mkconfig$(@:_config=) arm omap3 omap3evm
這個就沒必要改動了。Make編譯就使用omap3evm_config。如果你喜歡改成你自己的板子也可以,和u-boot一樣。
改動x-load-1.51\include\configs\omap3evm.h:
屏蔽第74行://#defineCONFIG_DDR_256MB_STACKED
根據(jù)自己板子的特性,如果使用UART1做為LINUX的調(diào)試口,則
#defineCFG_NS16550_COM1 ? ? ? ? OMAP34XX_UART1
/*
* select serial console configuration
*/
#defineCONFIG_SERIAL1 ? ? ? ? ? 1 ? ?/* UART1 on OMAP3EVM */
#defineCONFIG_CONS_INDEX ? ? ? ?1
不需要改動,如果是UART3什么的把那個1改成3就OK。
#defineNAND_UBOOT_START ? ? ? ?0x0080000 /*Leaving first 4 blocks for x-load */
#defineNAND_UBOOT_END ? ? ? ? ? ?0x0100000 /*Giving a space of 4 blocks = 512KB */
#defineNAND_BLOCK_SIZE ? ? ? ? 0x20000
這里的定義也需要注意,就是u-boot.bin到底要存放NAND FLASH什么地方,從什么地方開始,到什么地方結(jié)束,這在x-load-1.51 \lib\board.c里start_armboot()會用到。
改動x-load-1.51\board\omap3evm\platform.S:
這個匯編文件就是要做好DM3730最基本的初始化、設(shè)置PLL時鐘,GPMC接口時序設(shè)置等等重要的東西,深入研究必須要看看sprugn4q.pdf里邊有關(guān)COTEX-A8的主時鐘設(shè)置,IVA2.2(C64+DSP)的時鐘設(shè)置。在Xlaoder工程里,這個platform.S匯編代碼就是COTEX-A8最開始運行的代碼,它會調(diào)用到omap3evm.c\s_init的C函數(shù)。如果只是學(xué)習(xí)過程,可以不用改這個文件。
改動x-load-1.51\board\omap3evm\omap3evm.c:
這個文件主要配置DM3730最小系統(tǒng)的運行環(huán)境了,文件里邊描述的MPU就是COTEX-A8,IVA就是C64+ DSP和圖像協(xié)處理器,所以在這里設(shè)置MPU PLL,IVA PLL,DDR的時序配置,GPMC時序設(shè)置(就是NAND FLASH接口)。還有DM3730和OMAP3630 CPU基本一樣,所以有些條件判斷是CPU_OMAP36XX平臺的也等同DM3730平臺。
在s_init(void)函數(shù)里,我們要把
// ? ? if((get_mem_type() == GPMC_NAND) || (get_mem_type() == MMC_NAND))
// ? ? ? ? ? ?nand_init(); ?//Jingbo: disable
給屏蔽掉,因為我們使用MMC-NAND-UART3BOOT 模式。
DDR的配置在config_3430sdram_ddr()函數(shù),可以配置165M的頻率,也可以配置200M的頻率,這里就不詳細(xì)說了,看代碼和手冊。
per_clocks_enable(void)函數(shù)就是在Xloader里邊就開始設(shè)置這些外邊并行接口的時鐘,比如UART3,I2C,MMC,等等。
然后重點說一下就是#defineMUX_DEFAULT()
DM3730有423腳和515腳的芯片,芯片封裝又分為CUS、CBP、CBC等等。不同的封裝的管腳描述是不一樣的,而管腳復(fù)用更是不一樣。DM81XX系列也一樣,芯片越來越強大,管腳復(fù)用越來越復(fù)雜,這個讓開發(fā)的人非常頭疼。
set_muxconf_regs函數(shù)會用到#define MUX_DEFAULT()的定義,這里確定某個管腳是GPIO功能還是其他接口功能,都在這里定義
/*
*IEN ?- Input Enable
*IDIS - Input Disable
*PTD ?- Pull type Down
*PTU ?- Pull type Up
*DIS ?- Pull type selection is inactive
*EN ? - Pull type selection is active
*M0 ? - Mode 0
*The commented string gives the final mux configuration for that pin
*/
TI 源碼給出這個說明,我想詳細(xì)看看代碼會明白如何修改#define MUX_DEFAULT()。這里還有看看DM3730的芯片DATASHEET第2章,里邊說明每個功能管腳都有7種復(fù)用模式,比如GPIO使用M4模式。修改這個內(nèi)容一定要搞清楚你的DM3730芯片是什么型號和封裝。當(dāng)然,你也可以不用在Xloader修改,因為在U-BOOT的代碼里邊還會有這個管腳復(fù)用修改表。同樣在內(nèi)核源碼也有這個定義。其實就是重復(fù)設(shè)置了。
第五步,編譯修改生產(chǎn)測試維修用的x-load-1.51-mmc,因為本公司做的產(chǎn)品都帶SD卡或TF卡,所以我們的sys_boot[5:0]模式是默認(rèn)MMC---NAND----UART3的模式(或者也可以類似做個x-load-1.51-uart的模式)。把x-load-1.51里邊修改好的源碼全部COPY過來,然后修改x-load-1.51-mmc\include\configs\omap3evm.h第47行:
/* Enable the below macro if MMC bootsupport is required */
#define CONFIG_MMC ? ? ? ? ? ? ? 1 //Jingbo MLO for mmc
就是要打開這個CONFIG_MMC
然后修改x-load-1.51-mmc\build-x-load.sh
exportPATH=$PATH:/home/davinci/dm3730/dvsdk4_03/linux-devkit/bin:
make distclean
make omap3evm_config
make
./signGP x-load.bin
chmod 777 x-load.bin.ift
cp x-load.bin.ift MLO
直接執(zhí)行./ build-x-load.sh就得到我們想要的MLO。前面說過這個MLO和后面要講到的u-boot.bin一起COPY到SD卡或TF卡里邊,才能被DM3730片上ROM CODE運行起來,最后進入u-boot的命令行里進行其他燒寫操作。這里我們需要使用SD卡或TF卡轉(zhuǎn)USB接口的轉(zhuǎn)接器,市場上面一般幾塊錢一個,然后使用特殊的格式化工具(比如HP USB Disk Storage Format Tool),進行格式化,絕對不能用XP或WIN7自帶的方法直接FAT32格式化,否則DM3730不認(rèn)。把帶有MLO和u-boot.bin的sd卡插上,這兩個文件名字不要亂改其他名字,然后給板子上電,出現(xiàn)前面的串口信息才是OK的。
好了,到這里整個DM3730 BOOT過程和Xloader的移植也說完了,具體的操作還需要親自編譯調(diào)試燒寫等工作才能更好的掌握。這里確實沒太多精力為每個函數(shù)都得去介紹。由于時間緊,估計有些問題沒時間詳細(xì)描述,其實都需要看手冊、代碼、DDR NAND芯片手冊就可以搞定。后面還會寫到u-boot的移植,內(nèi)核的移植,關(guān)鍵要看看給其他客戶定制的項目進展如何,更高級的高清浮點CPU項目研發(fā)進展如何,或者春節(jié)有時間寫寫,明年就要寫更高級的CPU開發(fā)攻略了。
(聲明:
? ? 桐燁科技DM3730/DM6446的板子和其他公司的開發(fā)板不一樣,特別是DM3730的板子,目前國內(nèi)好多家公司都只提供ARM端(CORTEX-A8)的應(yīng)用例子,很少介紹如何添加客戶自己的算法到DSP端的例子,有些需要做DSP算法的人貪便宜,結(jié)果買這些便宜的板子回去花大量時間來學(xué)習(xí),遲遲搞不清楚整個架構(gòu),浪費的這些時間難道不是資金嗎?我們桐燁科技的板子都幫你采集好YUV格式的視頻圖像,并教會你如何把這個原始的圖像數(shù)據(jù)放到DSP端進行處理,然后再教會你如何傳處理過的圖像數(shù)據(jù)和參數(shù)到ARM端。同時提醒客戶還要注意一些冒牌的公司,特別是杭州有家沒道德的公司直接拿我們桐燁科技的DM3730開發(fā)板圖片放到他們公司網(wǎng)站上,欺騙其他人,我們桐燁科技從來沒有想到讓其他公司做代理。
)
總結(jié)
以上是生活随笔為你收集整理的DAVINCI DM3730开发攻略——xload-1.51移植的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java控件数组_java通过复选框控件
- 下一篇: el-cascader多层级联点击动态加