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.

[参考译文] TMS570LC4357:使用 POM 模块将参数从闪存转移到 RAM 时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1401383/tms570lc4357-issue-with-parameter-transfer-from-flash-to-ram-using-pom-module

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

工具与软件:

您好!

我们能够成功地将数据从 RAM 中的指定地址写入闪存区域。 但是、我们在尝试将数据从闪存传输到 RAM 时遇到问题。

我想询问一下这个传输过程中涉及的存储单元。 问题是否与代码中所用地址的位置有关?

以下是我们当前使用的地址:

#define OVERLAY_BASE_ADDRESS    0x08003000U  

#define FLASH_BASE_ADDRESS        0x00200000U

非常感谢您对此事的帮助和见解。

此致、

Emrullah

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

    您好!

    我们有关此主题的专家今天不在办公室,请期待下周早些时候的答复,谢谢。

    此致、

    Ralph Jacobi

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

    尊敬的 Emrullah:

    [报价 userid="614222" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1401383/tms570lc4357-issue-with-parameter-transfer-from-flash-to-ram-using-pom-module "]

    以下是我们当前使用的地址:

    #define OVERLAY_BASE_ADDRESS    0x08003000U  

    #define FLASH_BASE_ADDRESS        0x00200000U

    [报价]

    我看不出这些地址有任何问题。

    请发送一个示例代码在我结束时进行验证和调试吗?

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:
    感谢您的答复。 我使用了 Halcogen 库。

    #include "HL_POM.h"

    //#pragma LOCATION (TEST_ARR、0x00220000)
    //const uint8_t test_arr[64U]={0U};

    /**@fn void POM_POM(region_config_t Region_Config * Reg_Config_Ptr、region_t Region_Num)
    *@在相应寄存器中为指定存储区编号设置程序起始地址、覆盖地址和大小。
    *@param[in] Reg_Config_Ptr -这将具有 prog 起始地址以及覆盖地址和大小、这些地址和大小必须在寄存器中设置
    *@param[in] Region_Num -区编号用于访问寄存器(针对指定的区编号)
    *
    */
    /* sourceId:POM_sourceId_001 */
    /* DesignId:POM_DesignId_001 */
    /*要求:HL_CONNQ_POM_SR3 */
    void POM_REGION_CONFIG_t Region_Config * Reg_Config_Ptr、REGION_t Region_Num)

    /*用户代码 begin (2)*/
    // uint8_t get_val = test_arr[0U];
    /*用户代码结束*/
    pomREG->POMRGNCONF_ST[POMRGNCONF] Region_Num。 POMPROGSTART = 0x00220000U;
    pomREG->POMRGNCONF_ST[POMRGNCONF] Region_Num。 POMOVLSTART = 0x08003000U;
    pomREG->POMRGNCONF_ST[POMRGNCONF] Region_Num。 POMREGSIZE =(UINT32) SIZE_64BYTES;
    /*用户代码 begin (3)*/
    /*用户代码结束*/
    }


    /**@fn void POM_Reset (void)
    *@简单重置 POM 模块。
    */
    /* sourceId:POM_sourceId_002 */
    /* DesignId:POM_DesignId_002 */
    /*要求:HL_CONNQ_POM_SR4 */
    空 POM_Reset (void)

    /*用户代码 begin (4)*/
    /*用户代码结束*/
    pomREG->POMGLBCTRL = 0x5U;
    /*用户代码 begin (5)*/
    /*用户代码结束*/
    }


    /**@fn void POM_Init (void)
    *@简短初始化 POM 驱动程序
    *
    *此函数初始化 POM 驱动器单函数处理所有区域,也处理超时。
    * POM_Enable ()函数必须在 POM_Init ()函数之后调用。
    */
    /* sourceId:POM_sourceId_003 */
    /* DesignId:POM_DesignId_003 */
    /*要求:HL_CONNQ_POM_SR2 */
    空 POM_Init (void)

    /*用户代码 begin (6)*/
    /*用户代码结束*/
    pomREG->POMGLBCTRL = INTERNAL_RAM | 0x00000005U;

    /*配置区域1 */
    pomREG->POMRGNCONF_ST[1U].POMPROGSTART = 0x08003000U;
    pomREG->POMRGNCONF_ST[1U].POMOVLSTART = 0x00220000U;
    pomREG->POMRGNCONF_ST[1U].POMREGSIZE =(UINT32) SIZE_64BYTES;
    /*配置区域2 */

    /*用户代码 begin (7)*/
    /*用户代码结束*/
    }


    /**@fn void POM_Enable (void)
    *@简介启用 POM 模块。
    */
    /* sourceId:POM_sourceId_004 */
    /* DesignId:POM_DesignId_004 */
    /*要求:HL_CONNQ_POM_SR5 */
    空 POM_Enable (void)

    /*用户代码 begin (8)*/
    /*用户代码结束*/
    pomREG->POMGLBCTRL =((pomREG->POMGLBCTRL & 0xFFFFFFF0U)|(UINT32) 0x0000000AU);
    /*用户代码 begin (9)*/
    /*用户代码结束*/
    }

    /*用户代码 begin (10)*/
    /*用户代码结束*/

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

    在参考手册的示例中、我们在哪一行显示 RAM 中的地址?

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

    尊敬的 Emrullah:

    我对迟交答复的拖延深表歉意。  

    我上周在度假几天、随后是一个周末、因此没有机会处理此问题。

    关于您的问题、我了解 POM 为什么无法将数据从闪存移动到 RAM。 这是因为、

    实际上、POM 的主要用途是为了改变程序存储器(闪存)的参数。 请再次参考以下突出显示的定义。

    此外、您还可以验证 POM 区域起始地址寄存器、22之后的高位是保留的。 这意味着我们只能将地址向上移动到22位。

    如果您验证 RAM 的地址位也高达第27位、但闪存地址最多只有21位。

    因此、不能使用  POM 区域起始地址寄存器中的 RAM 存储器。

    我还要说明一点、我们不需要任何 POM 来将闪存内容移动到 RAM。 我们可以轻松地遍历指针。 因为与写入闪存相比、写入 RAM 并不困难。

    例如、只需验证下面的代码、我在这里使用 for loop 并使用两个指向 RAM 和闪存的指针、我只需将闪存的内容复制到 RAM。

    因此、结论是 POM 主要用于更改程序存储器(闪存)的参数。 要更改 RAM 的参数、我们只需使用指针。

    ——
    谢谢、此致、
    Jagadish。