zoukankan      html  css  js  c++  java
  • tiny4412 --Uboot移植(4) 串口

    开发环境: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初始化步骤

    1. 选择UART的时钟源
    2. 将所涉及的UART通道管脚设为UART功能
    3. 设置波特率:UBRDIVn寄存器(UART BAUD RATE DIVISOR)、UFRACVALn寄存器
    4. 设置传输格式:ULCONn寄存器(UART LINE CONTROL)
    5. 设置UART工作模式:UCONn寄存器(UART CONTROL)
    6. 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 4810202..3e057dc 100644
    --- a/arch/arm/dts/exynos4412-tiny4412.dts
    +++ b/arch/arm/dts/exynos4412-tiny4412.dts
    @@ -14,74 +14,16 @@
            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@13860000 {
    -               samsung,i2c-sda-delay = <100>;
    -               samsung,i2c-slave-addr = <0x10>;
    -               samsung,i2c-max-bus-freq = <100000>;
    -               status = "okay";
    +  chosen {
    +      stdout-path = "serial0";
    +    };
     
    +  aliases {
    +      serial0 = "/serial@13800000";
    +      console = "/serial@13800000";
            };
     
    -       serial@13810000 {
    +  serial0:serial@13810000 {
                    status = "okay";
            };
    -
    -       sdhci@12510000 {
    -               status = "disabled";
    -       };
    -
    -       sdhci@12520000 {
    -               status = "disabled";
    -       };
    -
    -       sdhci@12530000 {
    -               samsung,bus-width = <4>;
    -               samsung,timing = <1 2 3>;
    -               cd-gpios = <&gpk2 2 0>;
    -       };
    -
    -       sdhci@12540000 {
    -               status = "disabled";
    -       };
    -
    -       dwmmc@12550000 {
    -               samsung,bus-width = <8>;
    -               samsung,timing = <2 1 0>;
    -               samsung,removable = <0>;
    -               fifoth_val = <0x203f0040>;
    -               bus_hz = <400000000>;
    -               div = <0x3>;
    -               index = <4>;
    -       };
    -
    -       ehci@12580000 {
    -               compatible = "samsung,exynos-ehci";
    -               reg = <0x12580000 0x100>;
    -               #address-cells = <1>;
    -               #size-cells = <1>;
    -               phy {
    -                       compatible = "samsung,exynos-usb-phy";
    -                       reg = <0x125B0000 0x100>;
    -               };
    -       };
    -
    -       emmc-reset {
    -               compatible = "samsung,emmc-reset";
    -               reset-gpio = <&gpk1 2 0>;
    -       };
     };

    diff
    --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile index 5889802..5575adf 100644 --- a/arch/arm/mach-exynos/Makefile +++ b/arch/arm/mach-exynos/Makefile @@ -15,7 +15,7 @@ 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 100644 --- a/arch/arm/mach-exynos/lowlevel_init.c +++ b/arch/arm/mach-exynos/lowlevel_init.c @@ -218,9 +218,15 @@ 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 !!! "); #endif mem_ctrl_init(actions & DO_MEM_RESET); tzpc_init();

    diff
    --git a/configs/tiny4412_defconfig b/configs/tiny4412_defconfig index ccc9fab..25c6bfb 100644 --- a/configs/tiny4412_defconfig +++ b/configs/tiny4412_defconfig @@ -37,3 +37,14 @@ 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=100000000 + +#
  • 相关阅读:
    Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
    Linkerd 2.10(Step by Step)—多集群通信
    Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
    Linkerd 2.10(Step by Step)—控制平面调试端点
    Linkerd 2.10(Step by Step)—配置超时
    Linkerd 2.10(Step by Step)—配置重试
    Linkerd 2.10(Step by Step)—配置代理并发
    本地正常运行,线上环境诡异异常原因集合
    Need to invoke method 'xxx' declared on target class 'yyy', but not found in any interface(s) of the exposed proxy type
    alpine 安装常用命令
  • 原文地址:https://www.cnblogs.com/chu-yi/p/10387604.html
Copyright © 2011-2022 走看看