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.

[参考译文] Linux/AM3358:U-boot 未检测到 NAND

Guru**** 2979400 points

Other Parts Discussed in Thread: AM3358

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/669925/linux-am3358-u-boot-not-detecting-nand

器件型号:AM3358

工具/软件:Linux

您好!

使用的 SDK 为4.02.00.09我们拥有基于 AM3358的定制板、其设计与 BeagleBone 有点相似。 该设计还包含 Micron NAND 闪存、器件树描述符包含引脚多路复用器定义和时序、以反映我们的设计。 当我们加载 Linux 时、NAND 被正确识别、并且可以安装和访问分区。 但是、当我们使用相同的器件树描述符与 U-boot 一起使用时、并且基于原始的 am335xevm_defconfig 配置、则无法识别 NAND。 芯片 ID 值似乎未被正确读取。 怀疑问题是在计时器配置中。 对于 U-boot、时钟配置与 EVM 上的时钟配置相同、24MHz 时钟为 timer2提供输入、该输入本应用于测量计时延迟、但计算出的时序似乎与器件树中定义的时序甚至不匹配。 PLL 分频器和其他设置似乎已在 BSP 源中硬编码。 为了使 U-boot 正确使用 NAND 的器件树配置、我们需要做什么?

谢谢、

罗马

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Roman、

    您是否在中添加了 NAND 器件节点描述符 /board-support/u-boot- /arch/arm/dts/am335x-boneblack.dts?
    您是否已在中对齐了 NAND 的引脚多路复用和配置参数 /board-support/u-boot- /board/ti/am335x/mux.c 和 /board-support/u-boot- /include/configs/am335x_evm.h? 检测问题可能是由这些文件上的参数引起的。

    此致、
    Kemal

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kemal、

    我创建了自己的 DTS 文件并在 u-boot 配置中指定这是列表中的唯一文件。 就我而言、它被收集和使用。 u-boot/board/ti/AM335x 目录中的 mux.c 文件甚至不会作为构建的一部分进行编译。 我认为这是因为在 u-boot 配置中指定了器件树描述符的使用、而不是使用硬编码的描述符。 使用 mux.c 文件执行任何操作都不会产生任何影响、因为它不是在中编译/链接的。

    谢谢、

    罗马

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    那么、如果将目标文件生成到不同于当前目录的另一个目录、就像在 U-Boot 中 SPL 所做的那样呢?

    /board-support/u-boot- /spl/board/ti/am335x/mux.o 是从生成的 /board-support/u-boot- /board/ti/am335x/mux.c 以及上的最新更改 /board-support/u-boot- 如果您不清理/board/ti/am335x/mux.c、则不会在增量编译上反映出来。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    未生成目标文件。 正如我之前所说的、该文件甚至没有编译。 我可以看到原因。 board/ti/AM335x 中的 makefile 声明:

    ifeq ($(CONFIG_SKIP_lowlevel_init)、)
    obj-y:= mux.o
    字节序

    obj-y+= board.o

    因此、mux.o 仅包含在 CONFIG_SKIP_LOW_INIT 中未定义。
    追溯到过去、我在第65-80行的 include/configs/ti_am335x_common.h 中找到:
    …
    /*
    *由于 SPL 为我们进行了 PLL 和 DDR 初始化、
    *我们不需要执行两次。
    *
    #if!defined (CONFIG_SPL_Build)&&!defined (CONFIG_NOR_BOOT)
    #define CONFIG_SKIP_lowlevel_init
    #endif

    /*
    *在构建 U-Boot 时、确保没有以前的加载程序
    *我们需要调用 board_earne_init_f 中对此进行了处理
    使用 SPL 时* s_init。
    *
    #if!defined (CONFIG_SKIP_LOW_INIT)&&!defined (CONFIG_SPL)
    #define CONFIG_Board_EARLY_INIT_F
    #endif
    …

    这显然意味着、如果要未定义 CONFIG_SKIP_LOW_INIT、则必须启用 SPL 构建或非引导。 在我们的项目中、这两种情况都不是。 由于我们有自己的第一级引导加载程序用于加载 u-boot、因此 SPL 完全禁用。 NOR 引导仅是可选的。

    但这一点还有待解决。 u-boot 应使用器件树说明中定义的引脚多路复用器。 不是硬编码的 mux.c 文件。

    谢谢、
    罗马
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Roman、
    SPL 执行引脚复用。 U-boot 不会。 如果您在 System.map 中查看、则不会找到引脚复用例程。

    Steve K.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Steve、

    我们根本不使用 SPL、但具有专有的第一级引导加载程序。 我将在这里添加多路复用并尝试它。

    会让您随时了解最新信息。

    谢谢、

    罗马

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Si 我在第一级引导加载程序中添加了引脚多路复用、该引导加载程序加载并启动 u-boot、如下所示:

    无符号整型 NANDPinMuxSetup (void)
    {
    /* GPMC_AD0 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (0))=
    (0 << CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_PUTYPESEL_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD0_CONF_GPMC_AD0_RXACTIVE_SHIFT);

    /* GPMC_AD1 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (1))=
    (0 << CONTRAL_CONF_GPMC_AD1_CONF_GPMC_AD1_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD1_CONF_GPMC_AD1_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_AD1_CONF_GPMC_AD1_PUTYPESEL_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD1_CONF_GPMC_AD1_RXACTIVE_SHIFT);
    /* GPMC_AD2 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (2))=
    (0 << CONTRAL_CONF_GPMC_AD2_CONF_GPMC_AD2_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD2_CONF_GPMC_AD2_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_AD2_CONF_GPMC_AD2_PUTYPESEL_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD2_CONF_GPMC_AD2_RXACTIVE_SHIFT);
    /* GPMC_AD3 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (3))=
    (0 << CONTRAL_CONF_GPMC_AD3_CONF_GPMC_AD3_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD3_CONF_GPMC_AD3_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_AD3_CONF_GPMC_AD3_PUTYPESEL_SHIFT)|
    (1 <<CONTRAL_CONF_GPMC_AD3_CONF_GPMC_AD3_RXACTIVE_SHIFT);
    /* GPMC_AD4 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (4))=
    (0 << CONTRAL_CONF_GPMC_AD4_CONF_GPMC_AD4_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD4_CONF_GPMC_AD4_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_AD4_CONF_GPMC_AD4_PUTYPESEL_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD4_CONF_GPMC_AD4_RXACTIVE_SHIFT);
    /* GPMC_AD5 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (5))=
    (0 << CONTRAL_CONF_GPMC_AD5_CONF_GPMC_AD5_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD5_CONF_GPMC_AD5_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_AD5_CONF_GPMC_AD5_PUTYPESEL_SHIFT)|
    (1 <<CONTRAL_CONF_GPMC_AD5_CONF_GPMC_AD5_RXACTIVE_SHIFT);
    /* GPMC_AD6 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (6))=
    (0 << CONTRAL_CONF_GPMC_AD6_CONF_GPMC_AD6_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD6_CONF_GPMC_AD6_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_AD6_CONF_GPMC_AD6_PUTYPESEL_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD6_CONF_GPMC_AD6_RXACTIVE_SHIFT);
    /* GPMC_AD7 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (7))=
    (0 << CONTRAL_CONF_GPMC_AD7_CONF_GPMC_AD7_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD7_CONF_GPMC_AD7_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_AD7_CONF_GPMC_AD7_PUTYPESEL_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_AD7_CONF_GPMC_AD7_RXACTIVE_SHIFT);/* GPMC_WAIT0 *

    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_WAIT0)=
    (0 << CONTRAL_CONF_GPMC_WAIT0_CONF_GPMC_WAIT0_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_WAIT0_CONF_GPMC_WAIT0_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_WAIT0_CONF_GPMC_WAIT0_PUTYPESEL_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_WAIT0_CONF_GPMC_WAIT0_RXACTIVE_SHIFT);

    /* GPMC_WPN */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_WPN)=
    (7 << CONTRAL_CONF_GPMC_WPN_CONF_GPMC_WPN_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_WPN_CONF_GPMC_WPN_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_WPN_CONF_GPMC_WPN_PUTYPESEL_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_WPN_CONF_GPMC_WPN_RXACTIVE_SHIFT);

    /* GPMC_CS0 */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_CSn (0))=
    (0 << CONTRAL_CONF_GPMC_CSN0_CONF_GPMC_CSN0_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_CSN0_CONF_GPMC_CSN0_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_CSN0_CONF_GPMC_CSN0_PUTYPESEL_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_CSN0_CONF_GPMC_CSN0_RXACTIVE_SHIFT);

    /* GPMC_ALE */
    HWREG (SOC_CONTINL_REGS + CONTINL_GPMC_ADVN_ALE)=
    (0 << CONTRAL_CONF_GPMC_ADVN_ALE_CONF_GPMC_ADVN_ALE_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_ADVN_ALE_CONF_GPMC_ADVN_ALE_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_ADVN_ALE_CONF_GPMC_ADVN_ALE_PUTYPESEL_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_ADVN_ALE_CONF_GPMC_ADVN_ALE_RXACTIVE_SHIFT);

    /* GPMC_BE0N_CLE */
    HWREG (SOC_CONTINL_REGS + CONTINL_GPMC_BE0N_CLE)=
    (0 << CONTRAL_CONF_GPMC_BE0N_CLE_CONF_GPMC_BE0N_CLE_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_BE0N_CLE_CONF_GPMC_BE0N_CLE_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_BE0N_CLE_CONF_GPMC_BE0N_CLE_PUTYPESEL_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_BE0N_CLE_CONF_GPMC_BE0N_CLE_RXACTIVE_SHIFT);

    /* GPMC_oen_REN */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_OE_REN)=
    (0 << CONTRAL_CONF_GPMC_oen_REN_CONF_GPMC_oen_REN_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_oen_REN_CONF_GPMC_oen_REN_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_oen_REN_CONF_GPMC_oen_REN_PUTYPESEL_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_oen_REN_CONF_GPMC_oen_REN_RXACTIVE_SHIFT);

    /* GPMC_WEN */
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_WEn)=
    (0 << CONTRAL_CONF_GPMC_Wen_CONF_GPMC_Wen_MMode_SHIFT)|
    (1 << CONTRAL_CONF_GPMC_Wen_CONF_GPMC_Wen_PUDEN_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_Wen_CONF_GPMC_Wen_PUTYPESEL_SHIFT)|
    (0 << CONTRAL_CONF_GPMC_Wen_CONF_GPMC_Wen_RXACTIVE_SHIFT);

    返回 true;
    }

    希望与在 Linux 下正常工作的器件树版本匹配:

    nandflash_pins_s0:nandflash_pins_s0{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x800、PIN_INPUT | MUX_MODE0)/* GPMC_ad0.GPMC_AD0 *
    AM33XX_IOPAD (0x804、PIN_INPUT | MUX_MODE0)/* GPMC_AD1.GPMC_AD1 *
    AM33XX_IOPAD (0x808、PIN_INPUT | MUX_MODE0)/* GPMC_AD2.GPMC_AD2 *
    AM33XX_IOPAD (0x80c、PIN_INPUT | MUX_MODE0)/* GPMC_AD3.GPMC_AD3 *
    AM33XX_IOPAD (0x810、PIN_INPUT | MUX_MODE0)/* GPMC_AD4.GPMC_AD4 *
    AM33XX_IOPAD (0x814、PIN_INPUT | MUX_MODE0)/* GPMC_AD5.GPMC_AD5 *
    AM33XX_IOPAD (0x818、PIN_INPUT | MUX_MODE0)/* GPMC_AD6.GPMC_AD6 *
    AM33XX_IOPAD (0x81c、PIN_INPUT | MUX_MODE0)/* GPMC_AD7.GPMC_AD7 *

    AM33XX_IOPAD (0x870、PIN_INPUT | MUX_MODE0)/* GPMC_wait0.GPMC_wait0 *

    AM33XX_IOPAD (0x874、PIN_INPUT | MUX_MODE7)/* GPMC_WPN.GPIO0_30 *
    AM33XX_IOPAD (0x87c、PIN_OUTPUT | MUX_MODE0)/* GPMC_csn0.GPMC_csn0 *
    AM33XX_IOPAD (0x890、PIN_OUTPUT | MUX_MODE0)/* GPMC_advn_ALe.GPMC_advn_ALE *
    AM33XX_IOPAD (0x894、PIN_OUTPUT | MUX_MODE0)/* GPMC_oen_ren。GPMC_oen_ren *
    AM33XX_IOPAD (0x898、PIN_OUTPUT | MUX_MODE0)/* GPMC_WN.GPMC_Wen *
    AM33XX_IOPAD (0x89c、PIN_OUTPUT | MUX_MODE0)/* GPMC_be0n_cle。GPMC_be0n_cle *
    >;
    };

    但是、即使设置了引脚复用、在首次访问读取 ID 时尝试复位 NAND 时、u-boot 仍会停止。 以下是 u-boot 日志:

    initcall:8080eaeb (迁移到 bff52aeb)
    initcall:8080eaeb (迁移到 bff52aeb)
    initcall:8080eaeb (迁移到 bff52aeb)
    initcall:8080eeb1 (重定位到 bff52eb1)
    initcall:8080eaeb (迁移到 bff52aeb)
    initcall:8080ef5d (重定位到 bff52f5d)
    NAND:uclass_find_device_By_Seq:0 -1
    uclass_find_device_By_Seq:0 0
    GPMC@50000000 --1 - 1
    -未找到
    器件 GPMC@50000000 **的翻译
    共:OCP 上的总线默认值(na=1、ns=1)
    共:翻译地址:00000050
    共:父总线默认为(na=1、ns=1)开
    共:无范围、1:1转换
    共:父级转换:00000000
    共模:具有偏移:1342177280
    共:一级翻译:00000050
    共:到达的根节点
    fdtd_dec_get_int:GPMC、num-cs:0x7 (7)
    fdtdec get_int:reg:0x0 (0)
    fdtd_dec_get_int:NAND-bus-width:0x8 (8)
    fdtd_dec_lookup_phandle:TI、elm-id
    NAND:选择 OMAP-ECC_BCH8_CODE_HW
    rr elm_init
    rr elm_init 完成
    RR OMAP-ECC_BCH8_CODE_HW 完成
    uclass_find_device_By_Seq:0 -1
    uclass_find_device_By_Seq:0 0
    定时器@48040000 --1 -1
    计时器@48042000 --1 - 1
    计时器@48044000 --1 - 1
    计时器@48046000 --1 - 1
    计时器@48048000 --1 - 1
    计时器@4804a000 --1 - 1
    -未找到
    fdtdec get_int:时钟频率:0x2dc6c0 (3000000)
    器件定时器@48040000的翻译**
    共:OCP 上的总线默认值(na=1、ns=1)
    共:转换地址:00000448
    共:父总线默认为(na=1、ns=1)开
    共:无范围、1:1转换
    共:父级转换:00000000
    共模:具有偏移:1208221696
    共:一级翻译:00000448
    共:到达的根节点

    根据 drivers/MTD/nand/nand_base.c 中的代码、上述输出结束时 timer2被初始化并用作 NAND 访问延迟的计时器:

    案例 NAND_CMD_RESET:
    IF (芯片->DEV_READY)
    中断;
    udelay (chip->chip_delay);
    chip->cmd_ctrl (MTD、NAND_CMD_STATUS、 NAND_CTRL_CLE | NAND_CTRL_CHANGE);
    chip->cmd_ctrl (MTD、NAND_CMD_NONE、NAND_NCE | NAND_CTRL_change);
    //根据 ONFI v4.0,eZ-NAND 可能需要250ms 的时间*/
    NAND_WAIT_STATUS_READY (MTD、250);
    返回;

    400s 后访问超时(如果未被看门狗复位中断)。 因此、这里显然存在几个问题、即使是在 FSB/SPL 中设置的引脚多路复用也是如此。 尽管配置与 AM335x EVM 板相同、但芯片访问失败、时序似乎设置不正确。 为实现混响、这里是 u-boot 和 Linux 中使用的整个器件树。 我要再次强调的是、它在 Linux 中运行得非常好、我们可以读取/写入和访问 Nand 分区。


    /*
    *基本 OBC DTS
    *

    /DTS-v1/;

    #include "am33xx.dtsi"
    #include
    /*#include "am335x-bone-common.dtsi"*

    /{
    型号="TI AM335x CSYS";
    兼容="ti、am335x-opbC"、"ti、am33xx";

    内存@80000000{
    DEVICE_TYPE ="存储器";
    REG =<0x8000000000 0x40000000>;/* 256 MB */
    };

    选择{
    stdout-path = uart0;
    };

    };

    RTC{(&R)
    STATUS ="禁用";
    ti、hwmods ="禁用";
    };

    am33xx_pinmux{(am33xx_pinmux)}
    pinctrl-names ="default";
    pinctrl-0 =<&clkout2_pin>;

    i2c0_pins:pinmux_i2c0_pins{
    pinctrl-single、pins =<
    0x188 (PIN_INPUT_PULLUP | MUX_MODE0)/* i2c0_sda.i2c0_sda *
    0x18c (PIN_INPUT_PULLUP | MUX_MODE0)/* i2c0_SCL.i2c0_SCL *
    >;
    };

    i2c1_pins:pinmux_i2c1_pins{
    pinctrl-single、pins =<
    0x158 (PIN_INPUT_PULLUP | MUX_MODE2)/* spi0_D1.i2c1_sda *
    0x15c (PIN_INPUT_PULLUP | MUX_MODE2)/* spi0_cs0.i2c1_SCL *
    >;
    };

    uart0_pins:pinmux_uart0_pins{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x970、PIN_INPUT_PULLUP | MUX_MODE0)/* uart0_Rxd.uart0_RXD *
    AM33XX_IOPAD (0x974、PIN_OUTPUT 下拉| MUX_MODE0)/* uart0_TXD.uart0_TXD *
    >;
    };

    uart1_pins:pinmux_uart1_pins{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x978、PIN_INPUT | MUX_MODE0)/* uart1_CTSN.uart1_CTSN *
    AM33XX_IOPAD (0x97C、PIN_OUTPUT 下拉| MUX_MODE0)/* uart1_rtsn.uart1_rtsn *
    AM33XX_IOPAD (0x980、PIN_INPUT_PULLUP | MUX_MODE0)/* uart1_Rxd.uart1_RxD *
    AM33XX_IOPAD (0x984、PIN_OUTPUT 下拉| MUX_MODE0)/* uart1_TXD.uart1_TXD *
    >;
    };

    clkout2_pin:pinmux_clkout2_pin{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x9b4、PIN_OUTPUT 下拉| MUX_MODE3)/* xdma_event_intr1.clkout2 *
    >;
    };

    nandflash_pins_s0:nandflash_pins_s0{
    pinctrl-single、pins =<
    AM33XX_IOPAD (0x800、PIN_INPUT | MUX_MODE0)/* GPMC_ad0.GPMC_AD0 *
    AM33XX_IOPAD (0x804、PIN_INPUT | MUX_MODE0)/* GPMC_AD1.GPMC_AD1 *
    AM33XX_IOPAD (0x808、PIN_INPUT | MUX_MODE0)/* GPMC_AD2.GPMC_AD2 *
    AM33XX_IOPAD (0x80c、PIN_INPUT | MUX_MODE0)/* GPMC_AD3.GPMC_AD3 *
    AM33XX_IOPAD (0x810、PIN_INPUT | MUX_MODE0)/* GPMC_AD4.GPMC_AD4 *
    AM33XX_IOPAD (0x814、PIN_INPUT | MUX_MODE0)/* GPMC_AD5.GPMC_AD5 *
    AM33XX_IOPAD (0x818、PIN_INPUT | MUX_MODE0)/* GPMC_AD6.GPMC_AD6 *
    AM33XX_IOPAD (0x81c、PIN_INPUT | MUX_MODE0)/* GPMC_AD7.GPMC_AD7 *

    AM33XX_IOPAD (0x870、PIN_INPUT | MUX_MODE0)/* GPMC_wait0.GPMC_wait0 *

    AM33XX_IOPAD (0x874、PIN_INPUT | MUX_MODE7)/* GPMC_WPN.GPIO0_30 *
    AM33XX_IOPAD (0x87c、PIN_OUTPUT | MUX_MODE0)/* GPMC_csn0.GPMC_csn0 *
    AM33XX_IOPAD (0x890、PIN_OUTPUT | MUX_MODE0)/* GPMC_advn_ALe.GPMC_advn_ALE *
    AM33XX_IOPAD (0x894、PIN_OUTPUT | MUX_MODE0)/* GPMC_oen_ren。GPMC_oen_ren *
    AM33XX_IOPAD (0x898、PIN_OUTPUT | MUX_MODE0)/* GPMC_WN.GPMC_Wen *
    AM33XX_IOPAD (0x89c、PIN_OUTPUT | MUX_MODE0)/* GPMC_be0n_cle。GPMC_be0n_cle *
    >;
    };

    };

    uart0{(&U)
    pinctrl-names ="default";
    pinctrl-0 =<&uart0_PINs>;

    状态="正常";
    };

    uart1{(&U)
    pinctrl-names ="default";
    pinctrl-0 =<uart1_PINs>;

    状态="正常";
    };

    i2c0{(&I)
    pinctrl-names ="default";
    pinctrl-0 =<&i2c0_PINs>;

    状态="正常";
    时钟频率=<100000 >;
    };

    i2c1{(&I)
    pinctrl-names ="default";
    pinctrl-0 =<&i2c1_PINs>;

    状态="正常";
    时钟频率=<100000 >;

    };


    等距{(&E)
    状态="正常";
    };


    GPMC{
    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =</nandflash_pins_s0>;
    范围=<0 0x10000000 0x10000000>;// CS0:16MB 用于 NAND *
    NAND@0、0{
    兼容="ti、OMAP2-nand";
    reg =0 0x1000000>;/* CS0、偏移量0、大小16MB 或 OMAP-GPMC.c 中的 TI 代码将螺钉安装! *
    TI、nand-ecc-opt ="bch8";
    TI、elm-id =<和 elm>;
    NAND-BUS 宽度=<8>;
    GPMC、时间参数粒度=<1>;
    GPMC、器件宽度=<1>;
    GPMC、突发宽度=<0>;
    GPMC、burse-wrap =<0>;
    GPMC、SYNC-clk-ps =<40000>;//转换为 ps *
    GPMC、cs-on-ns =<0>;
    GPMC、cs-rd-off-ns =<300>;//值高出10倍(从处于节拍状态的独立位置)*/
    GPMC、cs-wr-off-ns =<100>;//因为它们稍后使用时钟速率公式*/进行分频
    GPMC、Adv-on-ns =<0>;
    GPMC、Ad-rd -关闭-ns =<100>;
    GPMC、Adv-wr-off-ns =<100>;
    GPMC、WE-ON-ns =<0>;
    GPMC、WE-OFF-ns =<50>;
    GPMC、OE-ON-ns =<0>;
    GPMC、OE-OFF-ns =<100>;
    GPMC、ACCESS ns =<110>;
    GPMC、第周期-ns =<300>;
    GPMC、功率周期-ns =<100>;
    GPMC、总线翻转-ns =<0>;
    GPMC、cycle2cycle-delay-ns =<0>;
    GPMC、clk-activation-ns =<0>;
    GPMC、wr 访问-ns =<0>;
    GPMC、wr-data-mux-bus-ns =<0>;
    /* MTD 分区表*/
    #address-cells =<1>;
    大小单元格=<1>;
    分区@0{
    标签="引导";
    reg =<0x00000000 0x08000000>;
    };
    分区@1{
    标签="根";
    reg =<0x08000000 0x78000000>;
    };
    };
    };


    USB{(&D)
    状态="正常";
    };

    &USB_CTRL_mod{
    状态="正常";
    };

    usb0_phy{/usb0_phy}
    状态="正常";
    };

    USB1_phy{
    状态="正常";
    };

    usb0{(&U)
    状态="正常";
    };

    usb0{(&U)
    状态="正常";
    DR_MODE ="主机";
    };

    USB1{(&S)
    状态="正常";
    DR_MODE ="主机";
    };

    cppi41dma{.cppi41dma}
    状态="正常";
    };

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否仍有问题?

    Steve K.