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.

[参考译文] RM46L852:以太网引导加载程序的闪存问题

Guru**** 2391415 points
Other Parts Discussed in Thread: UNIFLASH, HALCOGEN, TMS570LS1114

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1120264/rm46l852-flash-issue-with-ethernet-bootloader

器件型号:RM46L852
主题中讨论的其他器件:UNIFLASHHALCOGENTMS570LS1114

你(们)好。

我正在努力使以太网引导加载程序适应我的板。 引导加载程序似乎正常、因为它说"应用程序加载成功!" 数据传输完成后。
但我检查了应用闪存区域、它具有"fffffff..." ?? 以防万一、我在没有 JTAG 调试器的情况下运行以太网引导加载程序。 传输数据后,我使用 uniflash 检查应用程序内存区域。 我还看到"fffffffffff..... "。
但接近 APP_STATUS_ADDRESS 的数据从"FFF..."更新为"5A5A5A 00020000 000360E0 20002021"。

我应该如何将应用程序映像写入闪存?

我感谢您的任何建议。

谢谢。

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

    您好!

    我刚刚修改了 BL_FLASH_c 中的以下句子、然后更新了闪存存储器。

    //此处的组未使用。 我们根据闪存-启动- addr 计算函数中的组
    uint32_t Fapi_BlockProgram (uint32_t Flash_Address、uint32_t Data_Address、uint32_t SizeInBytes)

    寄存器 uint32_t src =数据地址;
    寄存器 uint32_t dst = Flash_Address;
    uint32_t 字节;

    如果(SizeInBytes <32)--- >16.
    字节= SizeInBytes;
    其他
    字节= 32;--------------- >16.

    下一个问题是我的应用程序似乎出现故障。 我想确认我的流程是否正确。

    1)我的应用程序与 RTOS 配合使用(由 HALCoGen 生成)、用于创建应用程序的链接命令(引导加载程序写入映像)

    我将闪存地址、VETORS (X)原点从0x00000000更改为0x00020020、以此类推。

    存储器

    引导程序(X):origin=0x00020020 length=0x00000020 vfill = 0xffffffff
    内核(RX):origin=0x00020040 length=0x00008000 vfill = 0xffffffff
    FLASH0 (RX):origin=0x00028040 length=0x00117FC0 vfill = 0xffffffff
    堆栈(RW):origin=0x08000000 length=0x00000800
    Kram (RW):origin=0x08000800 length=0x00000800
    RAM (RW):origine=(0x08000800+0x00000800) length=(0x0002F800 - 0x00000800)

    /*用户代码开始(2)*/
    /*用户代码结束*/

    /*用户代码开始(3)*/
    /*用户代码结束*/

    /*------------------ *
    /*段配置*/

    部分

    .intvecs:{}>向量
    闪存受保护区域中的/* FreeRTOS 内核*/
    .kernelTEXT:{}>内核
    .cinit:{}>内核
    .pinit:{}>内核
    /*将其余代码转换为用户模式闪存区域*/
    .text:{}> FLASH0
    .const:{}>FLASH0
    /* RAM 受保护区域中的 FreeRTOS 内核数据*/
    .kernelbss:{}>Kram
    .kernelHEAP:{}> RAM
    .bss:{}> RAM
    .data :{}> RAM
    .sysmem:{}>RAM
    fee_text_section:{}> FLASH0
    fee_const_section:{}> FLASH0
    fee_data_section:{}> RAM

    2) 2)我关闭了闪存 ECC、因为调试器似乎出现故障:当引导加载程序写入映像时、重新启动调试器、然后 PC 跳转到应用程序。 之后调试器工作不好。

    我认为这是由我的设置错误引起的。 我们可以使用闪存 ECC、甚至可以使用从引导加载程序到应用程序的过程、对吧?

    如果是,链接命令应该与什么类似?


    谢谢。

    Yamai

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

    您好!

    我不断尝试修复我的引导加载程序闪存问题。

    出于某种原因、RTOS 使用 svcEntry (vPortSWI 例程)。 这是我的应用程序(基于 RTOS)损坏的根本原因。

    我参考了 SPNA236和"TMS570LS1114:引导加载程序和应用程序之间的 SPNA236异常处理"。

    在本例中、我认为、只需在中断矢量处将目标地址从 svcEntry 更改为 APP_STATUS_ADDRESS + 0x8即可。

    目前、我的 APP_STATUS_ADDRESS 为0x0020020、因此我按如下方式进行了更改、

    svcEntry
    b svcEntry

        |

    ;svcEntry
    b #0x0020028

    编译代码后、我需要根据   以下编译结果将代码从 b #0x0020028更改为 b #0x0020018。

    (为什么? 我不熟悉 ARM 汇编器。)

    使用引导加载程序更新映像后的应用程序工作正常。 我的其余闪存问题主要是打开闪存 ECC。

    我感谢您的任何建议。

    谢谢。

    Yamai

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

    你好,Yamai,

     在尝试 RTOS 项目映像之前、您是否尝试过任何小应用映像、如 LED 闪烁或 UART 项目?  
    如果该项目工作正常、我们可以专注于 RTOS 项目。  

    --

    谢谢、

    Jagadish。

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

    Jagadish 您好、

    提前感谢。

    不、我没有尝试"LED 闪烁"。


    我的应用程序(使用 RTOS)在引导加载程序中断矢量发生更改后似乎运行良好、我在之前的答复中对此进行了介绍。

    我将详细了解一下。 当我发现任何故障时、我将尝试小型应用。

    我有一个关于闪存 ECC 的问题。

    我不确定如何生成应用程序映像、它将由引导加载程序更新。

    应用程序独立项目 link.cmd 具有:

    ECC{
    algoR4F021:address_mask = 0x003ff8 //地址位21:3 */
    汉明_mask = R4 /*在掩码中使用 R4构建*/
    奇偶校验掩码= 0x0c //设置哪些 ECC 位是偶校验和奇校验*/
    镜像= F021 /* RM4x 和 TMS570LSx 构建于 F021 */中

    ECC_FLA0 (R):origine=(0xf0400000 +(开始(FLASH0)>> 3))
    length=(size (FLASH0)>> 3)
    ecc={algoR4F021、INPUT_RANGE=FLASH0}

    但是,一些命令会进入 POST 进程以创建 bin 文件,从而在使用上述 link.cmd 时生成大容量映像(* GB)。

    应用没有 ECC 工作人员的链接命令是否足够,甚至闪存 ECC 也是有效的?

    谢谢。

    Yamai

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

    您好 Jagadish、

    我在这个论坛中提到了一些主题、(谢谢) 我能够"启用 TI 提供的以太网引导加载程序的闪存 ECC"。

    我在 Flash_Erase_Check ()中添加了闪存 ECC 禁用、然后检查存储器、完成后重新启用。

    链接 cmd  不需要使用 ECC 命令来生成应用程序二进制文件。 我的应用适用于闪存 ECC。

    我想结束这个话题。

    谢谢。

    Yamai