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.

[参考译文] PROCESSOR-SDK-AM335X:SPI NOR 闪存引导

Guru**** 2589300 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/638453/processor-sdk-am335x-spi-nor-flash-boot

器件型号:PROCESSOR-SDK-AM335X

您好!

我将 AM335x 处理器用于我的项目。 当前我正在从 Micro SD 卡引导。

我想从 SPI-NOR 闪存引导。 我的器件是 M25P16-VMC6TP

我无法从 uBoot 探测我的器件。

U-BOOT-FMS#SF 探头0 0 0   
SF:无法识别的 JEDEC ID 字节:20、20、15
无法在0:0初始化 SPI 闪存

我尝试使用以下链接初始化 SPI:

我找不到执行以下操作的确切位置:

{
.id = 0x8014,
.pages_per_sector = 256,
.nr_sectors = 16,
.name = "M25PE80",
},
是否有人可以帮助我解决此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您提到的 wiki 已过时。 请参阅 processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Biser、

    感谢您的回复。
    我的 M25P16 SPI-NOR 未@μ V uboot 电平。

    如上所述

    4.查看驱动程序是否支持您使用的芯片,对于 ME ST M25PE80支持不可用,因此我必须   在   驱动程序中进行以下更改。
      我在"stmicro_SPI_FLASH_table[]"的 drivers/MTD/SPI/st_micro.c 中添加了以下条目、现在   使用 SF 命令进行探测/读取/写入操作即可正常。

    1
    2.
    3.
    4.
    5.
    6.
    {
    .id = 0x8014,
    .pages_per_sector = 256,
    .nr_sectors = 16,
    .name = "M25PE80",
    },

    我无法在 Uboot 源代码中找到设备名称的提及位置。

    可以帮助我解决这个问题 吗?

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

    您好、Karthitheyan、

    AM335x TI EVM 的 SPI 闪存(64Mbit Winbond W25Q64)位于子板上、连接到 McSPI0模块。

    您需要检查 SPI 闪存是否也连接到 McSPI0和相同的引脚。 有关 u-boot 中的 AM335x 引脚多路复用器、请参阅以下文件:

    u-boot-2017.01/board/ti/AM335x/mux.c
    u-boot-2017.01/arch/arm/dts/AM335x-evm.c

    关于 u-boot 中的 M25P16移植、您应该浏览以下文件:

    U-boot-2017.01/drivers/MTD/SPI/SPI_FLASH_IDS.c
    u-boot-2017.01/drivers/MTD/st_SMI.c

    您应在以下文件中从 Winbond 更改为 STMICRO:
    U-boot-2017.01/configs/AM335x_evm_spiboot_defconfig


    stmicro_SPI_FLASH_table[]对于 u-boot-2017.01无效。

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

    您好、Pavel、

    它真的很有帮助。

    我已经配置了您提到的内容。 即使未找到器件也是如此

    AM335x-EVM.dts 文件中的引脚配置如下所述。

           volume_keys_s0:volume_keys_s0{
                   pinctrl-single、pins =<
                           0x150 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_SCLK/GPIO0_2 *
                           0x154 (PIN_INPUT_PULLUX | MUX_MODE7) /* spi0_d0.GPIO0_3 *
                   >;
           };

    0x150代表什么?

           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 *
                   >;
           };

           mmc1_pins:pinmux_mmc1_pins{
                   pinctrl-single、pins =<
                           0x160 (PIN_INPUT | MUX_MODE7)/* spi0_CS1.GPIO0_6 */
                   >;
           };

    AM335x 和 SPI-NOR 之间没有多路复用器。

    有什么需要更改的 M25P16?

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

    [引用用户="Karthitheyan R"]

    AM335x-EVM.dts 文件中的引脚配置如下所述。

           volume_keys_s0:volume_keys_s0{
                   pinctrl-single、pins =<
                           0x150 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_SCLK/GPIO0_2 *
                           0x154 (PIN_INPUT_PULLUX | MUX_MODE7) /* spi0_d0.GPIO0_3 *
                   >;
           };

    0x150代表什么?

    [/报价]

    0x150是 pinctrl-single 的偏移量、0x44E10000 + 0x800 + 0x150、完整地址为0x44E10950、这是 conf_spi0_SCLK 寄存器、AM335x TRM 中介绍了该寄存器。 应将其设置为多路复用模式0 (spi0_SCLK)、而不是多路复用模式7 (GPIO0_2)。

    L4_wkup (0x44c00000)+ SCM (0x210000)+ am33xx_pinmux (0x800)+ spi0_SCLK (0x150)

    这对 McSPI0引脚多路复用寄存器的其余部分也有效。

    此致、
    帕维尔

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

    感谢您的回复。 我认为它正在取得进展

    我根据您的指令更改了模式。 我将 MLO 和 U-boot 保留在 SD 卡中。

    秘书长的报告
    U-Boot SPL 2017.01-g9fd60700db (2017年11月17日- 11:35:12)
    尝试从 MMC1引导[但我的当前设备是 MMC 0–SD 卡]
    正在读取 uboot.env

    **无法从 mmc0:1读取"uboot.env"**
    使用默认环境

    正在读取 u-boot.img
    正在读取 u-boot.img
    (小部分

    它的结构。

    我没有收到 u-boot 提示符。 我认为我需要将 uboot 和 MLO 刷写到 SPI-NOR 中
    如何闪烁? 从我需要执行操作的位置开始。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Karthitheyan、

    在 u-boot 源代码中移植 SPI 或闪存(我们已经讨论过如何操作)后、您应该使用 AM335x_EVM_spiboot_defconfig 文件构建新的 MLO/SPL 和 u-boot 文件。 不要忘记在此文件中从 Winbond 更改为 STMICRO。

    然后、您应该将这些新的 MLO/SPL 和 u-boot 文件放入 SD 卡中、从该 SD 卡引导、并将 MLO/SPL 和 u-boot 文件闪存至 SPI 闪存中。 然后关闭电路板电源、将 sysboot 引脚从 SD 引导更改为 SPI 引导、然后加电。

    有关如何为 SPI 引导构建 u-boot 源代码以及如何在 SPI 中闪存的更多详细信息、请参阅 u-boot 用户指南:

    processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide

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

    您好、Pavel、

    感谢您的回复。
    我现在可以探测我的器件。

    按任意键停止自动引导:0
    => SF 探头0
    SF:检测到 m25p16、页面大小为256字节、擦除大小为64 KiB、总共2个 MIB

    我将按照以下步骤进行刷写。

    => SF 擦除0 +80000
    SF:524288个字节@ 0x0被擦除:确定
    => Fatload MMC 0 ${loadaddr}MLO
    读取 MLO
    在10ms (6 MIB/s)内读取62404字节

    => setenv 文件大小0xf3c4
    => SF 写入${loadaddr}0 ${filesize}
    器件0偏移量0x0、大小0xf3c4
    SF:62404字节@ 0x0写入:确定
    => fatload MMC 0 ${loadaddr}u-boot.img
    正在读取 u-boot.img
    在38ms (9 MiB/s)内读取359104字节

    => setenv 文件大小0x57ac0
    => SF 写入${loadaddr}0x20000 ${filesize}
    器件0偏移量0x20000、大小0x57ac0
    SF:359104字节@ 0x20000写入:确定

    但是、一旦我移除 SD 卡、我的电路板就不会启动。
    我找不到问题,我做了什么错了吗?
    帮助我解决此问题。

    我已经尝试使用工作窗口 MLO aslo。

    也无法引导。 我的闪存命令是否正确?

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

    [引用 user="Karthithkeyan R">Fatload MMC 0 ${loadaddr}MLO
    读取 MLO
    在10ms (6 MIB/s)内读取62404字节[/引用]

    在闪存 SPI 时、请使用 mLo.byteswap 文件而不是 mLO。 mLo.byteswap 用于 SPI 引导、mLO 用于 SD 卡引导。

    此致、
    帕维尔

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

    您好、Paval、

    感谢您的回复。 我刚刚将 MLO 文件更改为 mLo.byteswap。
    它从 SPI-NOR 引导。

    (一
    U-Boot SPL 2017.01-g9fd60700db (2017年11月21日- 20:19:45)
    SPL:不支持的引导设备!
    SPL:无法从所有引导设备引导
    ###错误###请重置电路板###
    (二

    我将持续收到此提示。

    用于刷写的命令:


    U-BOOT-FMS#SF ERASE 0+80000
    SF:524288个字节@ 0x0被擦除:确定

    U-boot-FMS#fatload MMC 0 ${loadaddr}SPI/MLO.pyteswap (SPI 是我的文件夹名称)
    读取 SPI/MLO.byteswap
    在14ms (4.9 MIB/s)内读取71364字节
    U-boot-FMS#SF 写入${loadaddr}0 0x116c4
    器件0偏移量0x0、大小0x116c4
    SF:71364字节@ 0x0写入:确定

    U-boot-FMS#fatload MMC 0 ${loadaddr}spi/u-boot.img
    正在读取 SPI/u-boot.img
    445096字节在50ms 内读取(8.5 MIB/s)

    U-BOOT-FMS#SF 写入${loadaddr}0x20000 0x6caa8
    器件0偏移量0x20000、大小0x6caa8
    SF:445096字节@ 0x20000写入:正常
    U-BOOT-FMS#RESET

    plz 帮助我继续

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

    感谢您的支持。
    它工作正常。 在您的支持下从 SPI-NOR 成功引导。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Karthitheyan、

    我很高兴看到您解决了这个问题。 您能否分享您上次应用的修复程序? 您是否还可以关闭/验证/解决此主题?

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

    我正在使用我的自定义 defconfig 文件。 它没有启用某些标志。
    我修改了有关 SPI-defconfig 的内容。 它的工作原理。
    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供信息。

    您是否还可以关闭/验证/解决此主题?

    此致、
    帕维尔