天嵌E9 u-boot移植

開發(fā)板:天嵌 E9_v2

參考文獻(xiàn):http://blog.csdn.net/zxr1521904712/article/details/51379578

1.下載 u-boot

https://github.com/Freescale/u-boot-fslc/tree/v2015.04

2.構(gòu)建u-boot

? ?cd ?u-boot 代碼文件夾內(nèi)

$ mkdir board/EmbedSky

$cp -R board/freescale/common board/EmbedSky/common

$cp -R board/freescale/mx6sabresd/ board/EmbedSky/mx6q_tqe9/

$cp include/configs/mx6sabresd.h include/configs/mx6q_tqe9.h

$cp configs/mx6qsabresd_defconfig configs/mx6q_tqe9_defconfig

修改mx6q_tqe9_defconfig如下(粗體為修改部分):

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/EmbedSky/mx6q_tqe9/mx6q_4x_mt41j128.cfg,MX6Q,SYS_USE_SPINOR"

CONFIG_ARM=y

CONFIG_TARGET_MX6Q_TQE9=y

CONFIG_DM=y

CONFIG_DM_THERMAL=y

$mv board/EmbedSky/mx6q_tqe9/mx6sabresd.c board/EmbedSky/mx6q_tqe9/mx6q_tqe9.c

把board/EmbedSky/mx6q_tqe9/Makefile中的下面一行

obj-y ?:= mx6sabresd.o

改成如下一行

obj-y ?:= mx6q_tqe9.o

修改board/EmbedSky/mx6q_tqe9/Kconfig 添加

if TARGET_MX6Q_TQE9

config SYS_BOARD

default "mx6q_tqe9"

config SYS_VENDOR

default "EmbedSky"

config SYS_SOC

default "mx6"

config SYS_CONFIG_NAME

default "mx6q_tqe9"

endif

修改arch/arm/Kconfig,在TARGET_MX6SABRESD下面增加TARGET_MX6Q_TQE9的配置(粗體部分):

config TARGET_MX6SABRESD

bool "Support mx6sabresd"

select CPU_V7

select SUPPORT_SPL

config TARGET_MX6Q_TQE9

bool "Support mx6q_tqe9"

select CPU_V7

select SUPPORT_SPL

source "board/EmbedSky/mx6q_tqe9/Kconfig"

3.編寫創(chuàng)建鏡像腳本build_u-boot.sh:

export ARCH=arm

export CROSS_COMPILE=arm-none-linux-gnueabi-

make distclean

make mx6q_tqe9_defconfig

make

若能正常生成鏡像則說明移植代碼可用

4.修改我們板子的DCD
? ? ? ? ?接下來修改我們板子的DCD,天嵌提供的uboot源碼是基于1.3.4版本,DCD是在板目錄的flash_header.S中配置,我們的uboot版本中DCD是以xxxx.cfg配置文件的形式存在的,而天嵌只給出了一個module,這里當(dāng)然可以直接反匯編出會匯編源碼,然后修改我們的uboot,但這里還是采用飛思卡爾的工具配置DCD,一下步驟在windows上操作。

? ? ? ?首先下載DDR_Stress_Tester_V1.0.3.zip和I.MX6DQSDL DDR3 Script Aid V0.10.xlsx兩個工具,

DDR_Stress_Tester_V1.0.3.zip:https://community.nxp.com/docs/DOC-96412

I.MX6DQSDL DDR3 Script Aid V0.10.xlsx:https://community.nxp.com/docs/DOC-94917

解壓DDR_Stress_Tester_V1.0.3.zip到window c盤根下,把I.MX6DQSDL DDR3 Script Aid V0.10.xlsx放到C:\DDR_Stress_Tester_V1.0.3\Binary,打I.MX6DQSDL DDR3 Script Aid V0.10.xlsx,根據(jù)板子上的DDR3芯片的芯片手冊配置Register Configuration標(biāo)簽頁,如下圖:


此時RealView .inc標(biāo)簽頁將生成相應(yīng)的配置信息。

切換到RealView .inc頁,另存為,文件類型選擇 ?文本文件(制表符分隔)(*.txt),文件名V0.10.txt(可為其他),存到C:\DDR_Stress_Tester_V1.0.3\Binary目錄。

打開V0.10.txt注掉setmem /160x020bc000 =0x30一行:

//setmem /160x020bc000 =0x30

保存。

把板子撥碼開關(guān)撥到USB下載模式。

打開cmd依次輸入以下指令:

>cd c:\DDR_Stress_Tester_V1.0.3\Binary\

>DDR_Stress_Tester.exe -t mx6x -df V0.10.txt

進(jìn)入DDR_Stress_Tester.exe軟件指令界面。

輸入數(shù)字1,選擇ARM工作核心為800MHz;

輸入數(shù)字0,選擇2GB容量;

輸入'y',選擇DDR工作頻率528MHz;

輸入'y',運行write leveling calibration;

輸入?V0.10.txt中MR1寄存器值得高四個十六進(jìn)制位0004;

此時得到write leveling calibration的調(diào)校結(jié)果:

MMDC_MPWLDECTRL0 ch0 after write level cal: 0x00150009

MMDC_MPWLDECTRL1 ch0 after write level cal: 0x00220015

MMDC_MPWLDECTRL0 ch1 after write level cal: 0x0013002C

MMDC_MPWLDECTRL1 ch1 after write level cal: 0x0009002A

用以上四個值修改V0.10.txt:

// For target board, may need to run write leveling calibration to fine tune these settings.

setmem /320x021b080c ?=0x00150009

setmem /320x021b0810 =0x00220015

setmem /320x021b480c ?=0x0013002C

setmem /320x021b4810 =0x0009002A

輸入'y'繼續(xù)后三項調(diào)校,這個將會等上3分鐘左右,然后得到結(jié)果如下:

Read DQS Gating calibration

MPDGCTRL0 PHY0 (0x021b083c) = 0x03340348

MPDGCTRL1 PHY0 (0x021b0840) = 0x03340328

MPDGCTRL0 PHY1 (0x021b483c) = 0x034C0358

MPDGCTRL1 PHY1 (0x021b4840) = 0x03480308

Read calibration

MPRDDLCTL PHY0 (0x021b0848) = 0x48383C38

MPRDDLCTL PHY1 (0x021b4848) = 0x423E3844

Write calibration

MPWRDLCTL PHY0 (0x021b0850) = 0x3A38423E

MPWRDLCTL PHY1 (0x021b4850) = 0x4A304840

用以上結(jié)果修改V0.10.txt,

////Read DQS Gating calibration

setmem /320x021b083c =0x03340348// MPDGCTRL0 PHY0

setmem /320x021b0840 =0x03340328// MPDGCTRL1 PHY0

setmem /320x021b483c =0x034C0358// MPDGCTRL0 PHY1

setmem /320x021b4840 =0x03480308// MPDGCTRL1 PHY1

//Read calibration

setmem /320x021b0848 =0x48383C38// MPRDDLCTL PHY0

setmem /320x021b4848 =0x423E3844// MPRDDLCTL PHY1

//Write calibration

setmem /320x021b0850 =0x3A38423E// MPWRDLCTL PHY0

setmem /320x021b4850 =0x4A304840// MPWRDLCTL PHY1

回到linux系統(tǒng),把官方sabresd中的cfg文件操被一份作為我們的cfg基礎(chǔ)

$cp board/EmbedSky/mx6q_tqe9/mx6q_4x_mt41j128.cfg board/EmbedSky/mx6q_tqe9/mx6q_tqe9_ddr3.cfg

根據(jù)V0.10.txt修改我們的mx6q_tqe9_ddr3.cfg。

修改configs/mx6q_tqe9_defconfig文件:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/EmbedSky/mx6q_tqe9/mx6q_tqe9_ddr3.cfg,MX6Q,SYS_USE_SPINOR"

CONFIG_ARM=y

CONFIG_TARGET_MX6Q_TQE9=y

CONFIG_DM=y

CONFIG_DM_THERMAL=y

回到linux系統(tǒng),把官方sabresd中的cfg文件操被一份作為我們的cfg基礎(chǔ)

$cp board/EmbedSky/mx6q_tqe9/mx6q_4x_mt41j128.cfg board/EmbedSky/mx6q_tqe9/mx6q_tqe9_ddr3.cfg

根據(jù)V0.10.txt修改我們的mx6q_tqe9_ddr3.cfg。

修改configs/mx6q_tqe9_defconfig文件:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/EmbedSky/mx6q_tqe9/mx6q_tqe9_ddr3.cfg,MX6Q,SYS_USE_SPINOR"

CONFIG_ARM=y

CONFIG_TARGET_MX6Q_TQE9=y

CONFIG_DM=y

CONFIG_DM_THERMAL=y

E9的串口終端IO跟sabresd不太一樣,使用了SD3_DAT7、SD3_DAT分別作UART1_TXD、UART1_RXD,所以這里需要做相應(yīng)的改變。

修改board/EmbedSky/mx6q_tqe9/mx6q_tqe9.c ?:

static iomux_v3_cfg_t const uart1_pads[] = {

MX6_PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),

MX6_PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),

};

由于MX6_PAD_SD3_DAT7、MX6_PAD_SD3_DAT6已經(jīng)被USDHC3占用,繼續(xù)修改board/EmbedSky/mx6q_tqe9/mx6q_tqe9.c ?:

static iomux_v3_cfg_t const usdhc3_pads[] = {

MX6_PAD_SD3_CLK__SD3_CLK ? | MUX_PAD_CTRL(USDHC_PAD_CTRL),

MX6_PAD_SD3_CMD__SD3_CMD ? | MUX_PAD_CTRL(USDHC_PAD_CTRL),

MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

MX6_PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

MX6_PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

//MX6_PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

//MX6_PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

//MX6_PAD_NANDF_D0__GPIO2_IO00 ? ?| MUX_PAD_CTRL(NO_PAD_CTRL), /* CD ? ? ?*/

};

E9的sd卡槽使用的是USDHC2控制器,并且與sabresd不同的是該SD CARD電路的CD引腳使用的是GPIO_4,繼續(xù)修改board/EmbedSky/mx6q_tqe9/mx6q_tqe9.c ?:

引腳配置:

//MX6_PAD_NANDF_D2__GPIO2_IO02 ? ?| MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */

MX6_PAD_GPIO_4__GPIO1_IO04 ? ?| MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */

sd卡槽cd引腳宏定義:

#define USDHC2_CD_GPIO ?IMX_GPIO_NR(1, 4)

5.編譯uboot,燒寫sd卡

$./build_u-boot.sh

$sudo dd if=u-boot.imx of=/dev/sdc bs=512 seek=2 ? conv=fsync

運行開發(fā)板報錯:

Can't find PMIC:PFUZE100

天嵌這塊板子沒有使用sabresd官方使用的PFUZE100,故要關(guān)掉相應(yīng)驅(qū)動。

include/configs/mx6q_tqe9.h +:

/* PMIC */

/*************************************

#define CONFIG_POWER

#define CONFIG_POWER_I2C

#define CONFIG_POWER_PFUZE100

#define CONFIG_POWER_PFUZE100_I2C_ADDR ?0x08

**************************************/

board/EmbedSky/mx6q_tqe9/mx6q_tqe9.c +973:

使用#if 0/#endif 注掉static struct pmic *pfuze;和int power_init_board(void)

./include/configs/mx6_common.h +48:

/*#define CONFIG_LDO_BYPASS_CHECK*/

重新編譯燒寫u-boot

$./build_u-boot.sh

$sudo dd if=u-boot.imx of=/dev/sdc bs=512 seek=2 ? conv=fsync

6.燒寫EMMC

打開文件夾Mfgtools-Rel-1.1.0_121218_MX6Q_UPDATER

修改cfg.ini

[profiles]

chip = MX6Q Linux Update

[platform]

board = SabreSD

[LIST]

name =Linux-SabreSD-eMMC

修改:Mfgtools-Rel-1.1.0_121218_MX6Q_UPDATER\Profiles\MX6Q Linux Update\OS Firmware\files? ucl2.xml文件內(nèi)容 找到Linux-SabreSD-eMMC

替換:

修改內(nèi)容為:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容