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/PROCESSOR-SDK-AM335X:在定制板上未检测到 NAND

Guru**** 2535750 points
Other Parts Discussed in Thread: AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/571584/linux-processor-sdk-am335x-nand-not-detected-on-custom-board

器件型号:PROCESSOR-SDK-AM335X
主题中讨论的其他器件:AM3352

工具/软件:Linux

您好!

我的定制板带有 am3352主芯片、nand 闪存为"micron mt29f1g08abaeawp"

我按照 u-boot 中的文档步骤启用 nand 闪存、但在 uboot 中仍然无法检测到它

这意味着命令"nand info"和"nand device"没有任何内容...

我在定制电路板 原理图上发现了一些奇怪的现象、NAND 闪存 SMI_WP 引脚连接到 GPMC_CLK、

是这样吗?

 下面是原理图的一部分:

 

和 NAND 闪存 原理图:

 

通过 TRM、GPMC_WP 引脚连接到 NAND 闪存 WP 引脚、但我们连接到 RMII phy、是否会导致电路板无法检测到 nand 闪存?

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

    此连接肯定不正确。 但是、您可以通过移除跳线暂时将其消除。 我不认为这就是 NAND 不起作用的原因。 您使用的是哪种 Linux 版本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复、
    现在、我刚刚生活在 u-boot 中、尝试通过 SD 卡引导并将 MLO 写入 nand、因此我需要 DO_nAND_INIT Fine、
    那么、如果我断开 SMI_WP 引脚、是否应该检测到 nand "B劳 德"?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    U-boot 版本是什么? 您从哪里获取它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    SDK 由 TI 网站版本2.00和 u-boot-2015.07.xxxxx 组成

    在我的跟踪路径中、入口是 drivers/MTD/nand/nand.c

    静态 void nand_init_chip (int i)
    {
    struct mtd_info * mtd =&nand_info[i];
    struct nand_chip *nand =&nand_chip[i];
    ulong base_addr = base_address[i];
    int maxchips = CONFIG_SYS_NAND_MAX_CHIPS;
    
    如果(maxchips<1)
    maxchips = 1;
    
    mtd->priv=nand;
    NAN->IO_ADDR_R = nand->IO_ADDR_W =(void __iomem *) base_addr;
    
    if (board_nand_init (nand)){
    printf ("board_nand_init 失败! 返回...");
    返回;
    }
    
    if (nand_scan (MTD、maxchips)){//此处失败
    printf ("nand_scan 失败! 返回...");
    返回;
    }
    
    printf ("goto nand_register.\n");
    NAND_REGISTER (I);
    }
    

    nand_scan 失败。 因此不能转至 nand_register

    这是我的引脚多路复用器:

    ti/am335x/mux.c

    #ifdef CONFIG_NAND
    静态结构 MODULE_PIN_mux nand_PIN_mux[]={
    {offset (GPMC_ad0)、(mode (0)| PULLUDDIS | RXACTIVE)}、/* AD0 */
    {offset (GPMC_ad1)、(mode (0)| PULLUDDIS | RXACTIVE)}、/* AD1 */
    {offset (GPMC_ad2)、(mode (0)| PULLUDDIS | RXACTIVE)}、/* AD2 */
    {offset (GPMC_ad3)、(mode (0)| PULLUDDIS | RXACTIVE)}、//
    {offset (GPMC_AD4)、(MODE (0)| PULLUDDIS | RXACTIVE)}、//
    {offset (GPMC_ad5)、(MODE (0)| PULLUDDIS | RXACTIVE)}、//
    {offset (GPMC_ad6)、(mode (0)| PULLUDDIS | RXACTIVE)}、//
    {offset (GPMC_AD7)、(MODE (0)| PULLUDDIS | RXACTIVE)}、// AD7 *
    /#ifdef CONFIG_SYS_NAND_BUSWIDTH_16BIT
    {offset (GPMC_ad8)、(mode (0)| PULLUDDIS | RXACTIVE)}、// AD8 *
    {offset (GPMC_ad9)、(mode (0)| PULLUDDIS | RXACTIVE)}、// AD9 *
    {offset (GPMC_ad10)、(MODE (0)| PULLUDDIS | RXACTIVE)}、//
    {offset (GPMC_ad11)、(mode (0)| PULLUDDIS | RXACTIVE)}、//
    {offset (GPMC_ad12)、(mode (0)| PULLUDDIS | RXACTIVE)}、//
    {offset (GPMC_ad13)、(mode (0)| PULLUDDIS | RXACTIVE)}、// AD13 *
    {offset (GPMC_ad14)、(mode (0)| PULLUDDIS | RXACTIVE)}、// AD14 *
    {offset (GPMC_ad15)、(mode (0)| PULLUDDIS | RXACTIVE)}、// AD15 */
    #endif
    {offset (GPMC_wait0)、(mode (0)| PULLUP_EN | RXACTIVE)}、/* nWait */
    //{offset (GPMC_WPN)、(mode (7)| PULLUP_EN)}、 /* NWP */
    {offset (GPMC_clk)、(MODE (7)| PULLUP_EN)}、//有线引脚
    {offset (GPMC_csn0)、(MODE (0)| PULLUP_EN)}、 /* nCS */
    {offset (GPMC_Wen)、(MODE (0)| PULLUG_EN)}、 /* Wen */
    {offset (GPMC_oen_ren)、(mode (0)| PULLUG_EN)}、 /* OE */
    {offset (GPMC_advn_ale)、(MODE (0)| PULLUG_EN)}、 /* ADV_ALE */
    {offset (GPMC_BE0n_cle)、(MODE (0)| PULLUG_EN)}、 /* BE_CLE */
    {-1}、
    };
    

    
    

    有线引脚是 WP、根据我 的原理图、我应该选择 GPMC_clk、对吧?

    BTW 我的 NAND 闪存为 mt29f1g08abaeawp (SLC),x8宽度

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将其转发给软件团队。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Phil、

    1.如果按照 Biser 的建议移除了跳线、您应该已经禁用了 nand 芯片的写保护、并且应该能够检测 nand 闪存。 但是、在这种情况下、您需要验证 GPMC 是否配置为在异步模式下工作。 您应该验证这一点
    GPMC_CONFIG1_x[27]WRITETYPE = 0h =>写入异步
    GPMC_CONFIG1_x[29]READTYPE = 0h =>读取异步
    X = 0..6、具体取决于您使用的 CS。
    如果情况并非如此、请尝试将上述位字段设置为0x0。

    2.如果您没有移除跳线,请执行以下操作:
    {offset (GPMC_clk)、(MODE (7)| PULLUP_EN)}、//有线引脚=>将引脚设置为 GPIO 并将其电平配置为0x1 (上拉)。
    将启用写保护、您将锁定 nand。 因此、您应该尝试在 GPIO 上输出0x0。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢 Yordan & Biser
    检查后、请执行以下操作:
    GPMC_CONFIG1_x[27]WRITETYPE = 0h =>写入异步
    GPMC_CONFIG1_x[29]READTYPE = 0h =>读取异步
    还不错,再次感谢!