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.

[参考译文] AM2632:RBL 次级引导位置0xF0000无效

Guru**** 2382480 points
Other Parts Discussed in Thread: AM2632, SYSCONFIG, UNIFLASH
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1475751/am2632-rbl-secondary-bootlocation-0xf0000-is-not-working

器件型号:AM2632
主题中讨论的其他器件: UNIFLASHSysConfig

工具与软件:

您好!

我们通过 QSPI 模式、在具有外部闪存的工程中使用 AM2632。

我已经根据 SDK 中的 SBL_QSPI-example 编写了我自己的 SBL。

从主引导操作(0x0 0000)引导我的 SBL 不会出现任何问题。

现在、我已经尝试了次级引导操作(0xF 0000)、该操作在 TI Resource Explorer 中进行了说明: https://dev.ti.com/tirex/explore/node?node=A__AVRt7VOfMlJSz4InbZKf4A__AM26X-ACADEMY__t0CaxbG__LATEST



在我的测试中、我将相同的 SBL 空运至0x 0000和0xF 0000。 复位后、RBL 会启动 SBL、而不会出现任何问题。
现在我已经从0x0 0000中删除了 SBL 并进行了复位。
RBL 现在未加载任何 SBL ...

我是否必须为我的 SBL 的次级引导使用另一个证书?

此致
JO

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

    尊敬的 Jo:

    您设置的引导模式是什么? 这也是 HSSE (安全性启用) AM263x 器件吗? 即您是否已经刻录了您的密钥?

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

    您好 Nilabh:

    对不起,我迟到了,但我不是在办公室的最后几个星期。

    由于有 FS 标识字符串(在 UART 引导模式下在 UART 上接收到)、我想我们有一个 HS-UART 器件

    我们在此客户电路板上使用 QSPI (4S)引导模式。

    我们尚未刻录系统的密钥。

    此致、
    JO

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

    您使用的是哪个闪存器件?

    它是否支持部分擦除?

    您能否确认擦除第一个映像后第二个 SBL 映像仍然完好无损?

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

    我们在客户电路板中使用 S25FL128SAGNFI01
    TI 评估板使用  S25FL128SAGNFI00。

    这里是同一系列闪存器件的数据表的链接...  

    www.infineon.com/.../Infineon-S25FL128SS25FL256S_128_Mb_(16_MB)256_Mb_(32_MB)_3.0V_SPI_Flash_Memory-DataSheet-v20_00-EN.pdf

    我们将 SysConfig 中的擦除闪存块大小从64kb 调整为256kb、用于通过 uniflash-script 进行刷写、

    我做了一些进一步的测试、并且我已经认识到、我只能将我的引导加载程序写入客户电路板中 的0x4_0000多个地址(例如0x0_0000、0x4_0000、0x8_0000、0xC_0000、0x10_0000)

    到0xF_0000 、我无法在客户电路板中写入、我收到 uniflash-script 中的错误消息... 我认为引导加载程序并不是真正写入到替代引导位置... 0xF_0000

    使用评估板、我可以写入所有地址、这些地址是0x1_000 --> 0xF_0000匹配项的倍数...


    我不是闪存器件的例外情况...我是否必须选择擦除块大小为64kb 的闪存器件来解决问题?


    此致

    JO

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

    尊敬的 Jo:

    这是因为 Unilfash 工具使用的闪存写入器适用于具有闪存器件  S25FL128SAGNFI00的 TI 电路板

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

    您需要使用正确的闪存属性修改闪存写入器映像的 syscgf、重新编译应用程序、然后在 Uniflash 中使用自定义闪存写入器、

    请按照以下主题了解步骤: e2e.ti.com/.../lp-am263p-how-to-load-an-image-to-flash-from-uniflash

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

    我已经完成了这项操作、并且 uniflash 原则上适用于我的客户板...但仅适用于0x4_0000...而这与0xF_0000...在我的客户板上、无法将引导加载程序写入闪存偏移0xF_0000

    使用评估板和擦除块大小(如果是64kb -->将 bootlaoder 函数正确写入所有地址、即0x1_0000 --> 0xF_0000的多个匹配项)

    我可以在硬件中更改闪存设备吗?

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

    该问题似乎特定于闪存、您能否尝试运行 OSPI 闪存 IO 并看看是否能够对偏移量进行读取和写入而不会出现任何问题?

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

    该示例: https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/EXAMPLES_DRIVERS_QSPI_FLASH_DIAG.html

    和  

    software-dl.ti.com/.../EXAMPLES_DRIVERS_QSPI_FLASH_TRANSFER.html

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

    您好 Nilabh:

    现在、我已在客户电路板上尝试过两个示例。
    对于第二个示例(闪存传输)、我们必须将 SysConfig 配置中的擦除块大小从64KB 更改为256KB。

    我可以在两个示例中写入0xF0000。。


    通过 python-script 刷写我自己的 SBL 与 uniflash/uart 时、仍然存在问题:闪存 scipt 显示一条错误消息...我们无法存储到地址0xF0000

    我对该 项目进行了调试

     https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/EXAMPLES_DRIVERS_SBL_UART_UNIFLASH.html

    用于 uart_uniflash。 因此、我已经使用 SysConfig 设置为我们的闪存器件重新编译了项目(擦除块大小为256KB、而评估板的擦除块大小为64KB。

    我找到了闪烁错误的原因。 在文件 bootloader_uniflash_common.c 中、检查闪存偏移地址、使其为 eraseBlockSize...line58ff 的倍数

    我已注释掉了这个检查(并重新编译了库)、但如果我的编程文件大于64KB、我会收到一个验证错误。 其原因是、只有当前块在闪存过程中被擦除、后面的块不会...如果我选择0xF0000作为偏移量、那么只有64KB 可用...下一个块不被擦除、然后验证崩溃...地址高于0x10_0000 (当文件大于64KB 时)


    我认为、只对闪存偏移量进行检查是擦除块大小的倍数、可能有原因、我无法概述...
    但在这一限制下、不可能将块大小不是64KB 的闪存器件与备用 SBL 地址或固件起始地址(不是0x4_0000的倍数)结合使用。

    现在我的问题:
    我现在可以做什么?  我们是否应该改用块大小为64KB 的闪存器件?
    出现代码行(限制为 eraseBlockSize 的倍数)的原因是什么

    将来会解决这个问题吗?


    此致
    JO

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为、只对偏移量执行闪存检查、是擦除块大小的倍数、可能有原因、我无法概括...
    但在这一限制下、无法将块大小不是64KB 的闪存器件与不是0x4_0000的倍数的备用 SBL 地址或固件起始地址结合使用[/QUOT]

    尊敬的 Jo:

    我不能正确理解这一点、NOR 闪存的属性是、写入仅在块级别受支持、只要输入正确的块大小、THR 闪存写入就能正常工作。

    代码行的原因是什么(限制为 eraseBlockSize 的倍数)

    当涉及到 NOR 写入时、您 始终 必须在写入之前擦除整个块。  

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为、只对偏移量执行闪存检查、是擦除块大小的倍数、可能有原因、我无法概括...
    但在这一限制下、无法将块大小不是64KB 的闪存器件与不是0x4_0000的倍数的备用 SBL 地址或固件起始地址结合使用[/QUOT]

    尊敬的 Jo:

    我不能正确理解这一点、NOR 闪存的属性是、写入仅在块级别受支持、只要输入正确的块大小、THR 闪存写入就能正常工作。

    代码行的原因是什么(限制为 eraseBlockSize 的倍数)

    当涉及到 NOR 写入时、您 始终 必须在写入之前擦除整个块。  

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

    可以更改 SBL UART uniflash 项目 syscfg 闪存参数中的块大小、

    您已经这么做了吗?