开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位
工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi
要移植的u-boot版本:u-boot-2016-11
Tiny4412开发板硬件版本为:
底板: Tiny4412SDK 1312B
核心板:Tiny4412 - 1306
1,原理图
查看tiny4412SDK-1312B -Schematic.pdf
可看出,底板使用UART0作为外接串口
2、uart0初始化步骤
- 选择UART的时钟源
- 将所涉及的UART通道管脚设为UART功能
- 设置波特率:UBRDIVn寄存器(UART BAUD RATE DIVISOR)、UFRACVALn寄存器
- 设置传输格式:ULCONn寄存器(UART LINE CONTROL)
- 设置UART工作模式:UCONn寄存器(UART CONTROL)
- UFCONn寄存器(UART FIFO CONTROL)、UFSTATn寄存器(UART FIFO STATUS)
3、使用Tiny4412 Debug 串口uart0代码设置
diff --git a/arch/arm/dts/exynos4412-tiny4412.dts b/arch/arm/dts/exynos4412-tiny
index ..3e057dc
--- a/arch/arm/dts/exynos4412-tiny4412.dts
+++ b/arch/arm/dts/exynos4412-tiny4412.dts
@@ -, +, @@
model = "Tiny4412 based on Exynos4412";
compatible = "samsung,tiny4412", "samsung,exynos4412"; - aliases {
- i2c0 = "/i2c@13860000";
- i2c1 = "/i2c@13870000";
- i2c2 = "/i2c@13880000";
- i2c3 = "/i2c@13890000";
- i2c4 = "/i2c@138a0000";
- i2c5 = "/i2c@138b0000";
- i2c6 = "/i2c@138c0000";
- i2c7 = "/i2c@138d0000";
- serial0 = "/serial@13800000";
- console = "/serial@13810000";
- mmc2 = "/sdhci@12530000";
- mmc4 = "/dwmmc@12550000";
- };
-
- i2c@ {
- samsung,i2c-sda-delay = <>;
- samsung,i2c-slave-addr = <0x10>;
- samsung,i2c-max-bus-freq = <>;
- status = "okay";
+ chosen {
+ stdout-path = "serial0";
+ }; + aliases {
+ serial0 = "/serial@13800000";
+ console = "/serial@13800000";
}; - serial@ {
+ serial0:serial@ {
status = "okay";
};
-
- sdhci@ {
- status = "disabled";
- };
-
- sdhci@ {
- status = "disabled";
- };
-
- sdhci@ {
- samsung,bus-width = <>;
- samsung,timing = < >;
- cd-gpios = <&gpk2 >;
- };
-
- sdhci@ {
- status = "disabled";
- };
-
- dwmmc@ {
- samsung,bus-width = <>;
- samsung,timing = < >;
- samsung,removable = <>;
- fifoth_val = <0x203f0040>;
- bus_hz = <>;
- div = <0x3>;
- index = <>;
- };
-
- ehci@ {
- compatible = "samsung,exynos-ehci";
- reg = <0x12580000 0x100>;
- #address-cells = <>;
- #size-cells = <>;
- phy {
- compatible = "samsung,exynos-usb-phy";
- reg = <0x125B0000 0x100>;
- };
- };
-
- emmc-reset {
- compatible = "samsung,emmc-reset";
- reset-gpio = <&gpk1 >;
- };
}; diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile
index ..5575adf
--- a/arch/arm/mach-exynos/Makefile
+++ b/arch/arm/mach-exynos/Makefile
@@ -, +, @@ ifdef CONFIG_SPL_BUILD
obj-$(CONFIG_EXYNOS5) += clock_init_exynos5.o
obj-$(CONFIG_EXYNOS5) += dmc_common.o dmc_init_ddr3.o
obj-$(CONFIG_EXYNOS4210)+= dmc_init_exynos4.o clock_init_exynos4.o
-obj-$(CONFIG_EXYNOS4412)+= dmc_init_exynos4412.o clock_init_exynos4412.o
+obj-$(CONFIG_EXYNOS4412)+= dmc_init_exynos4.o clock_init_exynos4412.o obj-y += spl_boot.o tzpc.o
obj-y += lowlevel_init.o diff --git a/arch/arm/mach-exynos/lowlevel_init.c b/arch/arm/mach-exynos/lowleve
index 1e090fd..c69be57
--- a/arch/arm/mach-exynos/lowlevel_init.c
+++ b/arch/arm/mach-exynos/lowlevel_init.c
@@ -, +, @@ int do_lowlevel_init(void)
#ifdef CONFIG_DEBUG_UART
#if (defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_SERIAL_SUPPORT)) || \
!defined(CONFIG_SPL_BUILD)
- exynos_pinmux_config(PERIPH_ID_UART3, PINMUX_FLAG_NONE);
- debug_uart_init();
+
+ #ifdef TINY4412
+ exynos_pinmux_config(PERIPH_ID_UART0, PINMUX_FLAG_NONE);
+ #else
+ exynos_pinmux_config(PERIPH_ID_UART3, PINMUX_FLAG_NONE);
+ #endif
+ debug_uart_init();
#endif
+ printascii("UART0 init ... OK !!!\n\r");
#endif
mem_ctrl_init(actions & DO_MEM_RESET);
tzpc_init(); diff --git a/configs/tiny4412_defconfig b/configs/tiny4412_defconfig
index ccc9fab..25c6bfb
--- a/configs/tiny4412_defconfig
+++ b/configs/tiny4412_defconfig
@@ -, +, @@ CONFIG_OF_CONTROL=y
#CONFIG_G_DNL_MANUFACTURER="Samsung"
#CONFIG_G_DNL_VENDOR_NUM=0x04e8
#CONFIG_G_DNL_PRODUCT_NUM=0x6601
+
+#DEBUG UART
+#
+CONFIG_DEBUG_UART=y
+CONFIG_SPL_SERIAL_SUPPORT=y
+CONFIG_SPL_GPIO_SUPPORT=y
+CONFIG_DEBUG_UART_S5P=y
+CONFIG_DEBUG_UART_BASE=0x13800000
+CONFIG_DEBUG_UART_CLOCK=
+
+#