This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] TDA4VM: 是否有定制电路板调试指南?

Part Number: TDA4VM

问:

定制电路板需要在 TI SDK 上进行一些软件调整。是否有电路板调试指南可提供


所需的更改参考示例?

  • 答:

    TDA4-EVM 是一个参考开发平台,该平台具有可展示 SoC 功能的外设超集。


    客户根据需要其平台支持的用例开发电路板。通常,减少外设、更改所选的外设器件和改变支持的外设实例数最终会产生不同的设计。因此,引脚多路复用和电源要求会发生变化。


    下面列出了此类常见更改以及如何调整 SDK 来实现这些更改:

    • 引脚多路复用指南
    • PMIC 和电源定制更改
    • 定制 DDR 相关更改
    • 开始使用的最小内核 DT
    • 引导模式支持汇总
    • 定制电路板调试期间的常见问题
    • 如何在没有控制台打印时使用 CCS 进行调试

    引脚多路复用指南

    为 Jacinto 器件配置引脚多路复用的建议方法是使用 PinMux 工具。该工具可在线使用,也提供了安装程序供离线使用。

    配置 PinMux 的步骤: 

    1. 转到:https://dev.ti.com/sysconfig/?fromPinmux=true#/start

    在“Start a new Design”中,选择一个与器件型号相匹配的现有设计。例如:J721E_DRA829_TDA4VM_AM752x

     


    将“Part”选项卡保持为默认值,然后为“Package”选择“ALF”。点击“Start”按钮。如下面的屏幕截图所示:

    3. 通过在“Type Filter Text”(页面左上角)中输入相应的名称来选择外设。

     
    例如:GPIO,点击“+”符号。这将在中心添加一个模块。

    4. MyGPIO1 会有一些默认值。  在“Use peripheral”菜单中选择确切的模块实例。

     


    默认情况下,该实例为“ANY”。使用下拉菜单选择相应的实例。例如:在本例中,假设选择:GPIO0

     

    5. 这样我们就完成了模块级选择。现在,我们只需选择与电路板原理图中的焊球名称对应的焊球名称。

     


    这可以通过在“Pins”下拉菜单中选择正确的焊球名称来实现。

     


    根据原理图,从下拉菜单中选择相应的“Pull Up/Down”。

     


    例如:请参阅下面的“手动审核”部分,了解我们如何选择引脚名称 EXTINTn

    6. 根据 OS 选择,从“Generated Files”部分下载以下文件之一:

     


         - Linux:devicetree.dtsi:只需复制节点并将其粘贴到正确的父引脚多路复用节点之下(有关详细信息,请参阅下文)

     


         - PDK (RTOS):J721E_pinmux.h/J721E_pinmux.c

    7. 例如:Linux:dtsi。
    我们选择了主 gpio0,因此在 arch/arm64/boot/dts/ti/j721-common-proc-board.dts 文件中示例 mygpio1_pins_default 的引脚多路复用节点应位于 main_pmx0 节点之下。

    /* This file was auto-generated by TI PinMux on 7/22/2020 at 9:21:31 AM.*/

    /* This file should only be used as a reference.Some pins/peripherals, */

    /* depending on your use case, may need additional configuration.*/

    &main_pmx0 {

                                mygpio1_pins_default: mygpio1_pins_default {

                                               pinctrl-single,pins = <

                                                             J721E_IOPAD(0x0, PIN_INPUT, 7) /* (AC18) EXTINTn.GPIO0_0 */

                                               >;

                                };

    };

    可以对 u-boot 器件树执行相同的操作。我们采用相同的示例文件 arch/arm/dts/j721-common-proc-board.dts

     

    引脚多路复用的手动审核:

    1. 检查原理图中是否存在确切的焊球编号。例如:J721E/TDA4VM(SoC) à gpio0_0(Signal_name)。
    在 TDA4VM/J721E 的相应数据手册中进行搜索:
    https://www.ti.com/cn/lit/ds/symlink/tda4vm.pdf?ts=1593521450358&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTDA4VM

    2. 表中给出了第一个搜索实例,其中提供了焊球编号和名称,

     


    这正是我们需要在电路板原理图中检查的内容,以了解在电路板上的哪个焊球上输出了 gpio0_0。

     


    例如:AC18 映射到 GPIO0_0。页:15:AC18

     

    3. 搜索映射到 padconfig 寄存器的 AC18,如下所示。

    在数据手册中的 PADCONFIG0 寄存器中搜索 AC18,这是需要编程的模式。

    例如:GPIO0_0 处于模式 7,因此引脚多路复用文件应该采用模式 7,以便从焊球 AC18 中输出 gpio0_0 信号。

    页:133

    我们可以统计由 PinMux 工具生成的dtsi、手动审核的寄存器和位字段以及交叉验证。

    例如:J721E_IOPAD(0x0, PIN_INPUT, 7)

    0x0 对应于 PADCONFIG0 寄存器的寄存器偏移 0x0,7 对应于多路复用器模式 7。

     

    PMIC 和电源定制更改

    定制电路板可以具有不同的 PMIC 来提供 SoC 电压域。可能会由于成本优势、不同的电源要求和可用性而选择不同的 PMIC。PMIC 配置通常在安全型 MCU R5F0 中完成。R5 SPL 主要使用 AVS 补偿电压来配置 CPU 电源轨。需要在 2 个位置对定制 PMIC 进行更改:


    1) 器件树:需要使用正确的 PMIC 节点来填充 WKUP_I2C0 的器件树。示例:arch/arm/dts/k3-j721e-r5-common-proc-board.dts


    连接正确的稳压器节点作为 VTM 节点的电源。


    &wkup_i2c0 {

            u-boot,dm-spl;

            tps659413a: tps659413a@48 {

                    reg = <0x48>;

                    compatible = "ti,tps659413";

                    u-boot,dm-spl;

                    pinctrl-names = "default";

                    pinctrl-0 = <&wkup_i2c0_pins_default>;

                    clock-frequency = <400000>;

     

                    regulators: regulators {

                            u-boot,dm-spl;

                            buck12_reg: buck12 {

                                    /*VDD_MPU*/

                                    regulator-name = "buck12";

                                    regulator-min-microvolt = <800000>;

                                    regulator-max-microvolt = <1250000>;

                                    regulator-always-on;

                                    regulator-boot-on;

                                    u-boot,dm-spl;

                            };

    2) 在 configs/j721e_evm_r5_defconfig 中更改 PMIC 的配置,例如,以下是 TPS65941 PMIC 所需的更改:


    CONFIG_DM_PMIC=y

    CONFIG_PMIC_TPS65941=y

    CONFIG_DM_REGULATOR=y

    CONFIG_SPL_DM_REGULATOR=y

    CONFIG_DM_REGULATOR_TPS65941=y

    定制 DDR 相关更改

    定制电路板可以具有不同的 DDR 器件。  可能会由于成本优势、不同的存储器要求和电源设计而选择不同的 DDR 器件。所有与 DDR 相关的配置和初始化都在 R5 SPL 中进行。我们需要生成一个定制 DT 文件来解决差异。我们需要将 arch/arm/dts/k3-j721e-ddr-evm-lp4-4266.dtsi 替换为与所选 DDR 器件相对应的定制 dts 文件。这涉及使用 DDR 配置工具。


    以下应用手册提供了详细信息。

    https://www.ti.com/cn/lit/pdf/spracu8

    开始使用的最小内核 DT

    第一个主要目标是使用 TDA4 在定制电路板上启动 Linux。从仅涵盖引导介质、控制台 UART、计时器和其他必要 DT 节点的最小器件树开始,始终是更好且更轻松的选择。


    以下 zip 文件包含用于禁用对引导 Linux 非必需的外设节点的补丁。


    SDK 中提供的默认器件树是 TDA4 支持的所有外设的超集。因此,需要在 DT 中进行优化,以避免由于定制电路板中的外设不匹配而导致崩溃/挂起。选择最小节点集并使用该节点集引导至 Linux 提示符。宣布客户可以启用与其定制电路板相关的节点。

    以下是一组用于 8.0 Linux SDK 的参考 DT 优化补丁:


    0001-arm64-dts-j721e-Enable-Minimal-DT-configuration.patch

    以下是一组用于 7.3 Linux SDK 的参考 DT 优化补丁:


    8512.boot-time-opt-7.3.zip

     

    引导模式支持汇总

    待添加

    定制电路板调试期间的常见问题

    1.U-Boot 中的定制 dts 文件:



    U-Boot 框架要求为 A72 SPL 提供对应于 k3-j721e-common-proc-board.dtsi 的 k3-j721e-common-proc-board-u-boot.dtsi。


    因此,如果定制电路板具有名为 k3-j721e-custom-board.dts 的 DTS 文件,则应添加 k3-j721e-custom-board-u-boot.dts。这对于 A72 SPL 而言是强制性的。

    2.MMC UHS 通常会导致在 A72 SPL 级挂起。如下所示将其禁用:


    此处介绍了 j7 引导流程:https://git.ti.com/gitweb?p=ti-u-boot/ti-u-boot.git;a=blob_plain;f=board/ti/j721e/README;hb=HEAD

    R5 SPL 不支持 UHS,因此与 UHS 相关的问题不会在 R5 SPL 级发生。

    之所以产生该错误,是因为 A72 SPL 支持 SD 卡的 UHS。UHS 代表超高速。

     


    UHS 功能需要 3.3V 至 1.8V 的 vqmmc 电源电压开关。如果未安装稳压器,则开关会发生故障,因此 A72 SPL 在该级挂起。

     

    因此,我们可以禁用 UHS 功能以快速进入 u-boot 提示符。执行以下步骤:


    步骤 1:在 u-boot defconfig 中进行以下更改:

    diff --git a/configs/j721e_evm_a72_defconfig b/configs/j721e_evm_a72_defconfig

    index fa3d5bc439..a1d5040af8 100644

    --- a/configs/j721e_evm_a72_defconfig

    +++ b/configs/j721e_evm_a72_defconfig

    @@ -110,10 +110,10 @@ CONFIG_K3_SEC_PROXY=y

    CONFIG_MISC=y

    CONFIG_DM_MMC=y

    CONFIG_SUPPORT_EMMC_BOOT=y

    -CONFIG_MMC_IO_VOLTAGE=y

    -CONFIG_SPL_MMC_IO_VOLTAGE=y

    -CONFIG_MMC_UHS_SUPPORT=y

    -CONFIG_SPL_MMC_UHS_SUPPORT=y

    +#CONFIG_MMC_IO_VOLTAGE is not set

    +#CONFIG_SPL_MMC_IO_VOLTAGE is not set

    +#CONFIG_MMC_UHS_SUPPORT is not set

    +#CONFIG_SPL_MMC_UHS_SUPPORT is not set

    CONFIG_MMC_HS400_SUPPORT=y

    CONFIG_SPL_MMC_HS400_SUPPORT=y

    CONFIG_MMC_SDHCI=y

    第 2 步:在 u-boot 器件树中进行以下更改:


    diff --git a/arch/arm/dts/k3-j721e-common-proc-board.dts b/arch/arm/dts/k3-j721e-common-proc-board.dts

    index 15b33309a5..15594d728e 100644

    --- a/arch/arm/dts/k3-j721e-common-proc-board.dts

    +++ b/arch/arm/dts/k3-j721e-common-proc-board.dts

    @@ -162,8 +162,8 @@

            pinctrl-names = "default";

            pinctrl-0 = <&main_mmc1_pins_default>;

            ti,driver-strength-ohm = <50>;

    -       vmmc-supply = <&vdd_mmc1>;

    -       vqmmc-supply = <&vdd_sd_dv_alt>;

    +       no-1-8-v;

    +       sdhci-caps-mask = <0x8000000F 0x0>;

     };

    步骤 3:生成 u-boot

    步骤 4:将 tispl.bin u-boot.img 复制到 SD 卡的引导分区中。


    这应避免 UHS 功能挂起并使我们进入 u-boot 提示符。

    3.将控制台切换到不同的 UART。示例:如何将控制台从 MAIN_UART 切换到 MCU_UART

    根据引导流程,我们有 3 级。


    1. R5 SPL
    2. A72 SPL
    3. A72 u-boot。

    因此我们需要在所有级别进行更改。除此之外,ATF (Arm Trusted Firmware) 还需要根据需要更改控制台端口。


    以下是 J7200 上的 DTS 更改,对 J721e 进行类似的更改可以正常工作:

    diff --git a/arch/arm/dts/k3-j7200-common-proc-board-u-boot.dtsi b/arch/arm/dts/k3-j7200-common-proc-board-u-boot.dtsi

    index f55c71f0c4..5d641f3074 100644

    --- a/arch/arm/dts/k3-j7200-common-proc-board-u-boot.dtsi

    +++ b/arch/arm/dts/k3-j7200-common-proc-board-u-boot.dtsi

    @@ -5,7 +5,7 @@

    / {

    chosen {

    - stdout-path = "serial2:115200n8";

    + stdout-path = "serial1:115200n8";

    tick-timer = &timer1;

    };

    diff --git a/arch/arm/dts/k3-j7200-common-proc-board.dts b/arch/arm/dts/k3-j7200-common-proc-board.dts

    index 4a4600cd87..23fbfb95dc 100644

    --- a/arch/arm/dts/k3-j7200-common-proc-board.dts

    +++ b/arch/arm/dts/k3-j7200-common-proc-board.dts

    @@ -11,7 +11,7 @@

    / {

    chosen {

    '

    以上 dts 更改将处理 SPL/u-boot 侧。


    现在,我们还需要在 ATF (Arm Trusted Firmware) 进行更改。


    需要在 SDK 中的 ATF 目录之上应用附加的补丁: 


    From 54990cac252c3f2eadfd5027198501817f2e5af0 Mon Sep 17 00:00:00 2001

    发件人:Keerthy <j-keerthy@ti.com>

    日期:Tue, 23 Mar 2021 21:56:29 +0530

    主题:[PATCH] plat: ti: k3: include: platform_def.h: Change console UART

     from MAIN_UART0 to MCU_UART0

    Change console UART from MAIN_UART0 to MCU_UART0.

    Signed-off-by: Keerthy <j-keerthy@ti.com>

    ---

     plat/ti/k3/include/platform_def.h | 4 ++--

     1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/plat/ti/k3/include/platform_def.h b/plat/ti/k3/include/platform_def.h

    index 690c68e5c..db083ca2f 100644

    --- a/plat/ti/k3/include/platform_def.h

    +++ b/plat/ti/k3/include/platform_def.h

    @@ -91,14 +91,14 @@

     

     /* Platform default console definitions */

     #ifndef K3_USART_BASE

    执行以下指令进行应用和编译:


    cd $SDK_PATH/board-support/trusted-firmware-a-2.3


    git am 0001-plat-ti-k3-include-platform_def.h-Change-console-UAR.patch.txt


    make CROSS_COMPILE=aarch64-linux-gnu- ARCH=aarch64 PLAT=k3 TARGET_BOARD=generic SPD=opteed


    cp ./build/k3/generic/release/bl31.bin ../prebuilt-images/


    cd ../..


    make u-boot


    cp board-support/u-boot_build/A72/tispl.bin board-support/u-boot_build/A72/u-boot.img /media/$USER/BOOT

    如果您希望避免编译 ATF则仅解压缩并使用附加的二进制文件:


    6320.bl31.zip


    将其直接复制到 $SDK_PATH/prebuilt-images 中,


    然后执行“make u-boot”以生成 tispl.bin 的新 bl31.bin 部分。