mini210s上uboot的移植

        mini210s是友善之臂公司推出的基於三星s5pv210的cortex a8 平臺的開發板,其實很感謝他們對此做出的努力,才使得向我這樣的窮孩子可以早些接觸a8(當時買的時候不到600)。可是便宜歸便宜,有好多東東想仔細的搞明白,還要狠下功夫呀,畢竟知識也是財富呀! git

        uboot是arm平臺常常使用的bootloader,友善之臂並無給用戶提供開放的uboot,並且以二進制的形式發佈的他們公司本身的superboot,不過說實在的,確實是很好用。可是做爲想從底層作起的我來講,熟悉並掌握uboot是我必須要攻克的呀。 網絡

        萬事開頭難,關鍵是找準方法呀。總的來講本身對本身仍是有那麼的不自信,想在網絡上可以找到前輩們留下的財富呀。功夫不負有心人,我在一個git網站上找到了可以移植到mini210的uboot,opencsbc-u-boot-mini210_linaro-2011.10-stable.tar.gz。具體的下載網站我忘記了。 app

        不過你們要注意了,這是移植到mini210的uboot,而不是mini210s上的,起初我編譯下載到個人板子上,一直只顯示ok,再沒有其餘信息輸出,其中還有好多地方須要修改,我那個暈呀,沒辦法,本身只能搞個led燈指示程序錯誤可能出現的地方,結果定位到bl1過程當中copy bl2的過程有誤,是因爲這個版本的uboot中對sdram的配置有誤形成的。 網站

        這是頭文件mini210.h中sdram參數配置的部分,須要將DMC0_MEMCONTROL、DMC0_MEMCONFIG_0、DMC0_MEMCONFIG_1的值進行相應的調整。 code

#if defined(CONFIG_MCP_SINGLE)

#define DMC0_MEMCONTROL		0x00202400	// MemControl	BL=4, 1Chip, DDR2 Type, dynamic self refresh, force precharge, dynamic power down off
#define DMC0_MEMCONFIG_0	0x20E00323	// MemConfig0	512MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed
#define DMC0_MEMCONFIG_1	0x00E00323	// MemConfig1
#if 0
#define DMC0_TIMINGA_REF	0x00000618	// TimingAref	7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E)
#define DMC0_TIMING_ROW		0x28233287	// TimingRow	for @200MHz
#define DMC0_TIMING_DATA	0x23240304	// TimingData	CL=3
#define	DMC0_TIMING_PWR		0x09C80232	// TimingPower
#else
#define DMC0_TIMINGA_REF        0x00000618      // TimingAref   7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E)
#define DMC0_TIMING_ROW         0x2B34438A      // TimingRow    for @200MHz
#define DMC0_TIMING_DATA        0x24240000      // TimingData   CL=3
#define DMC0_TIMING_PWR         0x0BDC0343      // TimingPower
#endif

#define	DMC1_MEMCONTROL		0x00202400	// MemControl	BL=4, 2 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down off
#define DMC1_MEMCONFIG_0	0x40E00323	// MemConfig0	512MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed
#define DMC1_MEMCONFIG_1	0x00F00323	// MemConfig1
#if 0
#define DMC1_TIMINGA_REF	0x00000618	// TimingAref	7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4
#define DMC1_TIMING_ROW		0x28233289	// TimingRow	for @200MHz
#define DMC1_TIMING_DATA	0x23240304	// TimingData	CL=3
#define	DMC1_TIMING_PWR		0x08280232	// TimingPower
#else
#define DMC1_TIMINGA_REF        0x00000618      // TimingAref   7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E)
#define DMC1_TIMING_ROW         0x2B34438A      // TimingRow    for @200MHz
#define DMC1_TIMING_DATA        0x24240000      // TimingData   CL=3
#define DMC1_TIMING_PWR         0x0BDC0343      // TimingPower
#endif
#if defined(CONFIG_CLK_800_100_166_133) || defined(CONFIG_CLK_400_100_166_133)
#define DMC0_MEMCONFIG_0	0x20E01323	// MemConfig0	256MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed
#define DMC0_MEMCONFIG_1	0x40F01323	// MemConfig1
#define DMC0_TIMINGA_REF	0x0000030C	// TimingAref	7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E)
#define DMC0_TIMING_ROW		0x28233287	// TimingRow	for @200MHz
#define DMC0_TIMING_DATA	0x23240304	// TimingData	CL=3
#define	DMC0_TIMING_PWR		0x09C80232	// TimingPower

#define	DMC1_MEMCONTROL		0x00202400	// MemControl	BL=4, 2 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down off
#define DMC1_MEMCONFIG_0	0x40C01323	// MemConfig0	512MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed
#define DMC1_MEMCONFIG_1	0x00E01323	// MemConfig1
#define DMC1_TIMINGA_REF	0x0000030C	// TimingAref	7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4
#define DMC1_TIMING_ROW		0x28233289	// TimingRow	for @200MHz
#define DMC1_TIMING_DATA	0x23240304	// TimingData	CL=3
#define	DMC1_TIMING_PWR		0x08280232	// TimingPower
#endif

#else

#error "You should define memory type (AC type or H type)"

#endif

還有須要更改的地方就是 ip

/* MINI210 has 4 bank of DRAM */
#define CONFIG_NR_DRAM_BANKS    1
#define SDRAM_BANK_SIZE        0x20000000    /* 512MB */
#define PHYS_SDRAM_1        MEMORY_BASE_ADDRESS
#define PHYS_SDRAM_1_SIZE    SDRAM_BANK_SIZE
#define PHYS_SDRAM_2        (MEMORY_BASE_ADDRESS + 0x20000000) /* SDRAM Bank #2 */
#define PHYS_SDRAM_2_SIZE    SDRAM_BANK_SIZE 開發

這是最終uboot運行起來的截圖,其uboot具體的原理就不說了,網上資料不少的我把本身最新準備的資料都上傳上去,供你們參考。 it

http://dl.vmall.com/c0s5b6a37t 編譯

http://dl.vmall.com/c06y9nugh5 table

http://dl.vmall.com/c0acbe6syo

相關文章
相關標籤/搜索