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.

[参考译文] RM48L952:Hercules 电路板 Rm48L952 - HalCoGen 4.7.00将驱动程序从4.3.00升级(不同设置)

Guru**** 2482105 points
Other Parts Discussed in Thread: RM48L952, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/709360/rm48l952-hercules-board-rm48l952---halcogen-4-7-00-upgraded-drivers-from-4-3-00-different-settings

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

您好!

我们使用的是 Hercules 电路板 Rm48L952。 我们现在从 HalCoGen 4.3.00升级到4.7.00 (TI 最新发布的在线版本)。 我们有几个问题:

在 PINMUX 菜单的特殊多路复用器下。 第一个复选框的名称不同。 4.3.00它是 GateOff...、 在4.7.00中它是启用 EMIF。 它是否仍然是一样的? 我还记得之前的一个未决问题、在4.3.00中、它产生的结果与预期的情况相反、是否是重命名的原因、如果我们将其保留为"确定"?

2.在 EMIF (EMIF SDRAM 菜单)下、4.7.00中 有一个 SDRAM 初始化时间字段、4.3.00中不存在该字段。 应如何设置? 默认值为200 μ C

3.我们升级到4.7.00,因为我们被告知新的 EMIF 驱动程序现在将支持片上和板载 SDRAM 可以通过 API 作为连续存储器空间进行访问,以便进行编码。 这是否仍然正确、或者我们是否需要下载附加软件包?  

 谢谢、

塔米

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

    "启用 EMIF_CLK 输出"复选框影响 PINMMR29寄存器。 它启用或阻止 EMIF_CLK 输出。
    当"使能 EMIF_CLK 输出"被选中时、HalCoGen 清零 PINMMR29[8]位并且以此方式使能 EMIF_CLK。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您回答 Q1、是的、它具有与4.3.00复选框相同的功能、但在4.7.00中正确命名/描述。

    是否有人回答了第2季度或第3季度:

    2.在 EMIF (EMIF SDRAM 菜单)下、4.7.00中 有一个 SDRAM 初始化时间字段、4.3.00中不存在该字段。 应如何设置? 默认值为200 μ C

    3.我们升级到4.7.00,因为我们被告知新的 EMIF 驱动程序现在将支持片上和板载 SDRAM 可以通过 API 作为连续存储器空间进行访问,以便进行编码。 这是否仍然正确、或者我们是否需要下载附加软件包? 再次感谢你。

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

    2、SDRAM 初始化时间不在通过 HALCoGen 生成的 EMIF 驱动程序中使用。
    3.我们建议使用最新版本。 内部 SRAM 从0x0800_0000开始、但外部 SDRAM 从0x8000_0000开始。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ 您好、谢谢。 使用 HalCoGen 4.3.00版生成的驱动程序、当我们内存不足时、操作系统和代码无法访问片外 SDRAM、就像我们可以使用片上 SDRAM 来增加堆栈空间、增加变量等 我们被告知、EMIF 驱动程序尚未完成以支持此功能、要在板载 SDRAM 上加载任何内容、我们必须执行 #pragma DATA_SECTION (..) 对于每个变量、当我们从 onchip ram 中运行时、会在 halcogen sys_link.cmd 文件中通过变量将其映射。 我们被告知 HalCoGen 将随更新的 EMIF 和内存驱动程序一起发布,当我们在片上 RAM 用完时,我们不必手动执行此操作。 HalCoGen 4.7.00版本带有这个更新的内存和 EMIF 驱动程序,因此我们不再需要手动操作(无需 #pragma……) 对于板载 SDRAM 以及片上和板载 SDRAM 访问、是否与软件相邻? 再次感谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tammy、

    EMIF 驱动程序将无法执行此类任务。 我们可以将变量映射到 cmd 文件中的 SDRAM (0x8000000)、并将"code_section"中的函数复制到 SDRAM 中、然后从 SDRAM 执行代码。 我们也可以使用 SDRAM 进行堆栈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、QJ、好的、几年前、另一位 TI 员工在认为将会升级新的 HalCoGen 中的 EMIF 驱动程序时、误解了我们的问题。 您能否给出一个实用的代码示例、说明如何更改 cmd 文件、以便能够将堆栈 和/或函数放置在 Hercules 板上的片外(板载) SDRAM 中的该部分? 它与在引导加载程序中如何完成类似吗?

    我们将从4.3.00升级到新的 halcogen 的唯一原因是、我们认为我们将获得驱动程序、从而可以使用 onchp SDRAM 等板载 SDRAM、而无需在软件中进行任何手动映射。 由于您写的内容是不可能的(我们将始终执行某种类型的映射)如果4.3.00生成的驱动程序是稳定的、那么为什么升级到4.7.00 halcogen 生成的驱动程序的风险是值得的?  是否有任何其他功能或错误修复可使其比我们的4.3.00 Halcogen 驱动程序更稳定? 再次感谢你。

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

    1.将段从闪存复制到 SDRAM
    在*。c 文件中:
    #pragma CODE_SECTION (flash2sdram、".flash2SDRAM")
    void flash2sdram (..) {
    ………….

    在命令文件中的 SECTIONS{..}中:
    flash2SDRAM:run = SDRAM,load = FLASH0,load_start (ulLoadStart),load_end (ulLoadEnd),
    load_size (ulSize)、 run_start( ulStartAddr )、run_end( ulEndAddr )

    在*。c 文件中、例如 main.c、将.flash2SDRAM 段复制到 SDRAM
    for (i=0;<ulSize;i++))

    ((char *)&ulStartAddr)[i]=((char *)&ulLoadStart)[i];
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    2.将变量和栈映射到 cmd 文件中的 SDRAM

    存储器


    堆栈(RW) :origin=0x8000000 length=0x00002000
    SDRAM (RW) :origin=0x80002000 length=0x000xxxxx


    部分


    stack_data_svc:{. += 1024;}>堆栈、RUN_START (StackModeSVC)
    .stack_data_fiq :{. += 1024;}>堆栈、run_start (StackModeFIQ)
    .stack_data_IRQ :{. += 1024;}>堆栈、run_start (StackModeIRQ)
    stack_data_abt:{。 += 1024;}>堆栈、run_start (StackModeABT)
    stack_data_und:{. += 1024;}>堆栈、run_start (StackModeUND)
    .stack_data_sys :{. += 1024;}>堆栈、run_start (StackModeSYS)
    .bss :{}>SDRAM
    .data :{}>SDRAM
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ、您好、感谢您提供的实用示例。 我们将对此进行测试并告知您。 您在撰写本文后是否看到了最后一个问题、我们应该从4.3.00升级到4.7.00? 我们将从4.3.00升级到新的 halcogen 的唯一原因是、我们认为我们将获得驱动程序、从而可以使用 onchp SDRAM 等板载 SDRAM、而无需在软件中进行任何手动映射。 由于您写的内容是不可能的(我们将始终执行某种类型的映射)如果4.3.00生成的驱动程序是稳定的、那么为什么升级到4.7.00 halcogen 生成的驱动程序的风险是值得的? 是否有任何其他功能或错误修复可使4.7.00的使用比4.3.00 Halcogen 驱动程序更好/更稳定? 再次感谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tammy、

    您当然可以将外部存储器用作内部存储器的扩展(仅限未初始化的段,如 SRAM 内容:整个堆栈、.bss ...)。 地址不连续、但可以让链接器管理分配。

    有关 TI 代码生成工具、请参阅链接器用户指南:  

    请参阅名为"在非连续存储器范围之间自动拆分输出段"的部分。 这是 spnu118u 中的第8.5.5.7节。

    希望这对您有所帮助。

    此致、Sunil

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

    您好、Sunil、

     感谢您的回复。 我们被告知必须升级到一个新的 halcogen、并升级驱动程序、否则可能会对几年前我们的问题有误解。  是的、我现在已经下载并阅读了 spn118u 指南中的第8.5.5.7节。

    因此、例如、下面的部分映射文件显示了我们在板载 SDRAM (SDRAM_CAL)中手动分配了某些变量、您可以看到板载 RAM、我们没有太多的剩余内存。 看起来是.bss 段在非连续存储器范围之间自动拆分输出段、而不是在 cmd 文件中手动分配和执行 pragma 语句。 那么、当 RAM 被使用时、链接器将自动开始从 SDRAM_CAL 中分配?

    存储器配置

            名称               来源               使用的未        使用  属性   填充的长度
    ------------    ----            ------        ----        ----       --------  
     向量              00020000  00000020 00000020 00000000    X
     FLASH0                  00020020  0015ffe0   00095c55 000ca38b R X
     FLASH1                  00180000  00180000 00000000 00180000 R X
     堆栈                  08000000  00000900 00000000 00000900 RW  
     RAM                         08000900  0003f700  0003e49d  00001263  RW  
     SDRAM_CAL         8000000000  00200000 00001798  001fe868 RW  


    段分配映射

    运行 origin   load origin  length      init length     atts members
    ------         ------         ------    ------       ----     ----
    00020000   00020000   00095c78  00095c78   r-x
     00020000   00020000   00000020  00000020   r-x .intvecs
     00020020   00020020   00094156  00094156   r-x .text
     000b4178   000b4178   00001837  00001837   r-.const
     000b59b0   000b59b0   000002c8  000002c8   r-.cinit
    08000900   08000900   0003e49e  00000000   Rw-
     08000900   08000900    0003e087   00000000    rw-.bss
     080983e0803e988      00000416  00000000   rw-.data
    80000000   80000000   00001798  00000000   Rw-
     80000000   80000000   00001798  00000000   rw-.SDRAM_cal

    首先、我要删除片外 SDRAM RAM 上代码中变量的#pragma 分配、并从现在的外观中更改 cmd 文件:

    存储器

       引导程序(X) :origin=0x00000000 length=0x00000020
       FLASH0 (RX):origin=0x00000020 length=0x0017FFE0
       FLASH1 (RX):origin=0x00180000 length=0x00180000
       堆栈 (RW):origin=0x08000000 length=0x00000900
       RAM    (RW):origin=0x08000900 length=0x0003f700

    /*用户代码开始(2)*/
       SDRAM_CAL (RW):origin=0x8000000 length=0x00200000
    /*用户代码结束*/

    部分

       .intvecs:{}>向量
       .text   :{}> FLASH0| FLASH1
       .const  :{}> FLASH0| FLASH1
       .cinit  :{}> FLASH0| FLASH1
       .pinit  :{}> FLASH0| FLASH1
       .bss    :{}> RAM
       .data   :{}> RAM
       .sysmem :{}>RAM
       
       FEE _文本_部分:{}> FLASH0 | FLASH1
       FEE _ CONST_SECTION:{}> FLASH0 | FLASH1
       fee_data_section:{}> RAM

    /*用户代码开始(3)*/
      .SDRAM_cal:{}> SDRAM_CAL
    /*用户代码结束*/

    我会将其更改为拆分.bss 段(请参阅上面的映射文件部分)、以便链接器在从 RM48上的 RAM 运行时自动使用电路板上的 SDRAM、方法是使用手册中所示的>>功能

    部分

       .intvecs:{}>向量
       .text   :{}> FLASH0| FLASH1
       .const  :{}> FLASH0| FLASH1
       .cinit  :{}> FLASH0| FLASH1
       .pinit  :{}> FLASH0| FLASH1
       .bss    :{}>> RAM | SDRAM_CAL
       .data   :{}> RAM
       .sysmem :{}>RAM
       
       FEE _文本_部分:{}> FLASH0 | FLASH1
       FEE _ CONST_SECTION:{}> FLASH0 | FLASH1
       fee_data_section:{}> RAM

    /*用户代码开始(3)*/
      .SDRAM_cal:{}> SDRAM_CAL
    /*用户代码结束*/

    那么、这就是.cmd 文件中的内容、这就是在片上 RAM 变满时允许我们的代码自动从板载 SDRAM 中分配所需的全部内容。 我可以删除所有#pragma、并且不需要在 .cmd 文件中手动分配 SDRAM 中的函数? 我们是否需要升级编译器或我们正在使用的驱动程序版本(我们使用的是 HalCoGen 4.3.0、编译器/链接器版本为 5.1.6? 再次感谢你。