新唐MCU技术
直播中

哈哈哈

11年用户 917经验值
擅长:可编程逻辑
私信 关注
[问答]

FAQ_MA35_Family_Linux 如何从没有 NAND 的 SPI-NAND 启动?

FAQ_MA35_Family_Linux 从没有 NAND 的 SPI-NAND 启动

回帖(1)

李霞

2025-9-8 17:48:11

针对您查询的 MA35D 系列 Linux 系统从 SPI-NAND (没有内部硬件 EDC 的 SPI NAND) 启动的问题,官方常见问答库提供了解决方案。这通常涉及特殊编译的 Uboot 和对硬件引脚配置的调整。


以下是主要步骤和核心信息(请务必以 新唐官方最新文档 为准):




? 核心原因


MA35D1/D0 芯片的 BootROM 在启动时:



  1. 从选定的启动设备加载 UBoot (nand_uboot)

  2. 然后由 UBoot 负责加载操作系统


SPI-NAND 本身没有内部硬件 EDC (错误检测与校正),而 BootROM 在初始启动阶段仅支持带有内部硬件 EDC 的设备(如 SPI-NOR 或 eMMC)。因此直接让 BootROM 从 “纯” SPI-NAND 启动是不可行的




✅ 解决方案:两阶段启动 (使用 Uboot 作为中介)


新唐提供的解决思路是:利用 SPI-NOR 或 eMMC 存储 UBoot,再由 UBoot 去加载位于 SPI-NAND 上的内核和系统


? 方法一:从 SPI-NOR 启动 Uboot,再从 SPI-NAND 加载系统 (推荐)




  1. 硬件准备:



    • 将您的 SPI-NAND 芯片连接到正确的 SPI 接口 (通常主 SPI: SPI0, 片选为 CS0)。

    • MA35D1 的启动模式引脚 (BSEL[2:0]) 需要配置为 001 (SPI0 NOR FLASH)




  2. 软件准备:



    • 编译 UBoot: 使用 make ma35d1_defconfig。生成默认配置文件。

    • 修改配置 (关键): 编辑生成的 .config 文件:
      # ? 打开配置文件
      vim .config
      # ? 修改配置
      CONFIG_MTD_RAW_NAND_VERIFY_WRITE=y
      CONFIG_SPI_NAND_MICRON=y        # 如果使用 Micron SPI-NAND 需启用此选项

    • 重新编译 Uboot:make clean && make




  3. 烧录:



    • 使用 NuWriterNuTool-LinkServer 等工具,将编译好的 Uboot (u-boot.bin) 烧录到 SPI-NOR 存储的开头位置(通常地址 0x0000)。




  4. 放置系统文件到 SPI-NAND:



    • 同样使用 NuWriter 或系统工具,将 Linux kernelroot filesystem (Yocto/Buildroot 生成的镜像) 烧录到 SPI-NAND 的指定区域。

    • 确保 Uboot 环境变量已配置好 SPI-NAND 的相关参数(加载地址、分区信息等)。




?️ 方法二:从 eMMC 启动 Uboot,再从 SPI-NAND 加载系统


操作流程与方法一类似:



  1. BSEL[2:0] 设置为 010 (eMMC 启动)

  2. 将编译好的 UBoot (u-boot.bin) 烧录到 eMMCBoot Partition #1

  3. 将系统镜像(kernel+rootfs)烧录到 SPI-NAND

  4. Uboot 启动后会自动识别 SPI-NAND 并加载系统。




⚠️ 重要注意事项



  1. 启动模式引脚 (BSEL[2:0]): 必须严格按照目标启动设备设置。不正确的设置会导致启动失败。

  2. Uboot 配置: CONFIG_SPI_NAND_MICRON=y 仅适用于 Micron 品牌的 SPI-NAND。其他品牌的 SPI-NAND 可能需要额外配置驱动。

  3. 工具链: 请使用新唐官方推荐的交叉编译工具链 (例如 arm-none-gnueabihf-)。

  4. 新唐官方文档: 务必参考《MA35D0/D1 TRM》、《MA35D0/D1 Linux BSP User Manual》及最新发布在官网的 "Application Notes" 或 FAQ 页面,因为步骤和配置可能因 BSP 版本更新而变化。

  5. 备份:

    • SPI-NAND 通常有擦除寿命限制。

    • 在烧录前,确保您有 SPI-NOR / eMMC 中的原始映像备份

    • 操作错误可能导致设备无法启动。





? 总结步骤



  1. 物理配置: 设置 BSEL[2:0] 指向 Uboot 所在的存储 (NOR 或 eMMC)。

  2. 编译 Uboot: 配置 CONFIG_SPI_NAND_MICRON=y 及相关 NAND 选项。

  3. 烧录 Uboot: 写入 SPI-NOR / eMMC 指定位置。

  4. 烧录系统镜像: 将 kernel/rootfs 写入 SPI-NAND。

  5. 启动测试: 复位目标板,通过串口观察 Uboot 日志,看是否能正确加载系统。



遇到困难时建议检查: Uboot 版本、驱动适配情况、NAND 物理地址、启动开关设置,并参考新唐官网提供的 SDK 和文档。遇到问题可优先排查这些关键点。



通过这种方法,您可以在 MA35D1/D0 上成功实现「通过 SPI-NOR / eMMC 引导的 Uboot」加载「位于 SPI-NAND 上的系统」。如果需要进一步操作细节,建议查阅新唐官网提供的《MA35D Linux BSP移植指南》或联系其技术支持团队获取支持。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分