日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DAVINCI DM3730开发攻略——xload-1.51移植

發布時間:2024/1/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DAVINCI DM3730开发攻略——xload-1.51移植 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


DM3730開發攻略已經停頓了一段時間,本人和公司其他軟件工程師都在忙攻克客戶定制的DM3730+OV的一款720P高清低照度產品和TVP5158 ?2路D1同時采集軟件,現在基本收尾工作,擠點時間,繼續寫開發攻略,希望對在這方面開發的朋友有幫助。本篇文章是基于本公司(桐燁科技)DM3730超級開發板上面進行描述的,估計和TI EVM有點差別,或者和其他開發板公司有些差別,但問題不大,都有參考作用。


1、DM3730啟動流程介紹


前面3篇文章已經從總體介紹DAVINCI低功耗芯片DM3730的性能、特點、開發環境和軟件開發包,等等。下面就可以進入編程開發階段了。DM3730 boot軟件是Xloader和U-BOOT,這個和DM36X、DM6446、DM6467T(UBL+U-BOOT)有點不一樣,和DM8148、DM8168系列的(U-BOOT MINI+UBOOT)又不一樣。本來想把把xload和uboot一起寫,現在覺得還是分開好,有時寫太長的東西怕沒這么多精力,還有u-boot-2010.06要移植的東西也比較多。這篇文章從軟件角度重點如何讓板子BOOT起來。開發驅動和系統軟件前,有個DM3730非常重要的文件必須要介紹,這個文件就是DM3730系統開發技術參考手冊——sprugn4q.pdf,或者TI已經把版本升級為sprugn4(x).pdf了,這個文件3673頁,比較恐怖,里邊很詳細介紹整個DM3730的每個功能模塊的結構和寄存器描述,等等,開發系統和驅動程序,絕對要認真看。

做好新的高頻布線PCB板子回來,NAND FLASH里邊是沒有程序的,在保證板子電器特性穩定(主要是電源)穩定的情況下,如何讓DM3730板子跑起來呢?這就要了解DM3730BOOT的過程。這一點在sprugn4q.pdf里邊也有介紹,TI的圖描述是這樣的:

圖-1 TI DM3730 BOOT初始化流程

圖-1第一個Preinitialization預初始化是要求從硬件上設計出滿足DM3730軟件BOOT起來的環境,比如電源、時鐘CLK、RESET、BOOT MODE選擇電路等等。TI DAVINCI 芯片DM3730和DM81XX系列的電源管理相當復雜,TI專門為這些主CPU提供對應的電源管理芯片,比如DM3730使用Tps659xx系列的電源IC。時鐘CLOCK電路涉及到外部晶振時鐘和內部進行PLL時鐘的設置,RESET復位電路涉及到冷復位和熱復位等等,BOOT MODE選擇涉及到是從NAND FLASH BOOT、MMC(SD卡) BOOT、USB BOOT、UART BOOT還是XIP BOOT等等,BOOT MODE選擇可以使用電阻通過對sys_boot[5:0]信號腳上拉下拉,進行冷復位上電選擇。

圖-1 第2個框圖描述的是DM3730系統電源、時鐘、復位的上電復位時序,這個很講究的,以前寫DM6446、DM368開發攻略沒有提到這點,其實這些芯片都有上電復位時序。而在DM3730中,電源管理芯片Tps659xx已經幫你實現這些時序的要求。

圖-1 第3個框圖說明DM3730內部的COTEX-A8會從片上的ROM代碼區開始運行,這個ROM CODE已經存在芯片內部,然后根據BOOT MODE,去讀取對應的NAND接口、MMC接口、UART接口、USB接口等等放置的代碼——Xloader,而Xloader編譯出來的文件是MLO文件。比如從MMC (SD卡)BOOT的時候,如果沒有SD卡,ROM CODE會轉到NAND FLASH上去找Xloader,如果NAND FLASH沒有Xloader,就會去找UART接口,這個順序有很多種,可以看看sprugn4q.pdf文檔。舉個例子,我們就把特殊格式化的SD卡或TF卡(使用TI要求的或提供的格式化軟件),COPYMLO文件到SD卡上,這樣一上電片上的ROM CODE就會把MLO給運行起來。下面本人把本公司的開發板上電串口信息COPY上來,讓大家更加了解這個過程。


60 ?(這個60表明ROMCODE已經運行起來)

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的過程,一般工廠生產的時候,通過跳線帽對BOOT MODE的sys_boot[5:0]進行電平設置,選擇SD卡 BOOT或UART串口BOOT,畢竟NAND里邊SMT貼片出來是沒有程序的,當然有些超大批量生產會使用特殊的燒錄器對NAND進行預先燒寫。無程序的板子維修的時候一般也是使用跳線帽對sys_boot[5:0]進行電平設置,選擇不同的BOOT MODE進行啟動板子,目的就是讓板子跑進U-BOOT再說,U-BOOT起來什么都好說。


圖-1 第4個框圖就是Xloader,第5個框圖就是U-BOOT和后面跑起來的kernel、掛載文件系統(ubifs,yaffs2,jaffs2等)、各種linux應用程序。


2xload-1.51移植


依據上篇《DAVINCI DM3730開發攻略——DVSDK4_03和雙核CODEC機制介紹.doc》的介紹,在dvsdk4_03\psp目錄下,有TI 提供的x-load-1.51-psp04.02.00.07.sdk源碼,我們就在這個源碼上就行修改移植。由于前面介紹DM3730支持好多種接口BOOT,我們做產品必須根據產品的特性選擇不同的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是為了生產和測試維修使用的。然后把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的文件,內容如下:

#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的工具,這個一般賣開發板的公司都會提供這個工具,同時也把signGP放到這個x-load-1.51目錄下。上面sh文件make后會直接生成x-load.bin,但是x-load.bin是不能直接被片上的ROM CODE識別的,所以就需要signGP轉化一下,得到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的結構,很像u-boot的源碼組織,主要關注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- ?(使用開發環境篇介紹的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

根據自己板子的特性,如果使用UART1做為LINUX的調試口,則

#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什么地方,從什么地方開始,到什么地方結束,這在x-load-1.51 \lib\board.c里start_armboot()會用到。


改動x-load-1.51\board\omap3evm\platform.S:

這個匯編文件就是要做好DM3730最基本的初始化、設置PLL時鐘,GPMC接口時序設置等等重要的東西,深入研究必須要看看sprugn4q.pdf里邊有關COTEX-A8的主時鐘設置,IVA2.2(C64+DSP)的時鐘設置。在Xlaoder工程里,這個platform.S匯編代碼就是COTEX-A8最開始運行的代碼,它會調用到omap3evm.c\s_init的C函數。如果只是學習過程,可以不用改這個文件。


改動x-load-1.51\board\omap3evm\omap3evm.c:


這個文件主要配置DM3730最小系統的運行環境了,文件里邊描述的MPU就是COTEX-A8,IVA就是C64+ DSP和圖像協處理器,所以在這里設置MPU PLL,IVA PLL,DDR的時序配置,GPMC時序設置(就是NAND FLASH接口)。還有DM3730和OMAP3630 CPU基本一樣,所以有些條件判斷是CPU_OMAP36XX平臺的也等同DM3730平臺。

在s_init(void)函數里,我們要把

// ? ? if((get_mem_type() == GPMC_NAND) || (get_mem_type() == MMC_NAND))

// ? ? ? ? ? ?nand_init(); ?//Jingbo: disable

給屏蔽掉,因為我們使用MMC-NAND-UART3BOOT 模式。

DDR的配置在config_3430sdram_ddr()函數,可以配置165M的頻率,也可以配置200M的頻率,這里就不詳細說了,看代碼和手冊。


per_clocks_enable(void)函數就是在Xloader里邊就開始設置這些外邊并行接口的時鐘,比如UART3,I2C,MMC,等等。

然后重點說一下就是#defineMUX_DEFAULT()

DM3730有423腳和515腳的芯片,芯片封裝又分為CUS、CBP、CBC等等。不同的封裝的管腳描述是不一樣的,而管腳復用更是不一樣。DM81XX系列也一樣,芯片越來越強大,管腳復用越來越復雜,這個讓開發的人非常頭疼。

set_muxconf_regs函數會用到#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 源碼給出這個說明,我想詳細看看代碼會明白如何修改#define MUX_DEFAULT()。這里還有看看DM3730的芯片DATASHEET第2章,里邊說明每個功能管腳都有7種復用模式,比如GPIO使用M4模式。修改這個內容一定要搞清楚你的DM3730芯片是什么型號和封裝。當然,你也可以不用在Xloader修改,因為在U-BOOT的代碼里邊還會有這個管腳復用修改表。同樣在內核源碼也有這個定義。其實就是重復設置了。


第五步,編譯修改生產測試維修用的x-load-1.51-mmc,因為本公司做的產品都帶SD卡或TF卡,所以我們的sys_boot[5:0]模式是默認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

直接執行./ build-x-load.sh就得到我們想要的MLO。前面說過這個MLO和后面要講到的u-boot.bin一起COPY到SD卡或TF卡里邊,才能被DM3730片上ROM CODE運行起來,最后進入u-boot的命令行里進行其他燒寫操作。這里我們需要使用SD卡或TF卡轉USB接口的轉接器,市場上面一般幾塊錢一個,然后使用特殊的格式化工具(比如HP USB Disk Storage Format Tool),進行格式化,絕對不能用XP或WIN7自帶的方法直接FAT32格式化,否則DM3730不認。把帶有MLO和u-boot.bin的sd卡插上,這兩個文件名字不要亂改其他名字,然后給板子上電,出現前面的串口信息才是OK的。


好了,到這里整個DM3730 BOOT過程和Xloader的移植也說完了,具體的操作還需要親自編譯調試燒寫等工作才能更好的掌握。這里確實沒太多精力為每個函數都得去介紹。由于時間緊,估計有些問題沒時間詳細描述,其實都需要看手冊、代碼、DDR NAND芯片手冊就可以搞定。后面還會寫到u-boot的移植,內核的移植,關鍵要看看給其他客戶定制的項目進展如何,更高級的高清浮點CPU項目研發進展如何,或者春節有時間寫寫,明年就要寫更高級的CPU開發攻略了。


(聲明:

? ? 桐燁科技DM3730/DM6446的板子和其他公司的開發板不一樣,特別是DM3730的板子,目前國內好多家公司都只提供ARM端(CORTEX-A8)的應用例子,很少介紹如何添加客戶自己的算法到DSP端的例子,有些需要做DSP算法的人貪便宜,結果買這些便宜的板子回去花大量時間來學習,遲遲搞不清楚整個架構,浪費的這些時間難道不是資金嗎?我們桐燁科技的板子都幫你采集好YUV格式的視頻圖像,并教會你如何把這個原始的圖像數據放到DSP端進行處理,然后再教會你如何傳處理過的圖像數據和參數到ARM端。同時提醒客戶還要注意一些冒牌的公司,特別是杭州有家沒道德的公司直接拿我們桐燁科技的DM3730開發板圖片放到他們公司網站上,欺騙其他人,我們桐燁科技從來沒有想到讓其他公司做代理。



總結

以上是生活随笔為你收集整理的DAVINCI DM3730开发攻略——xload-1.51移植的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。