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.

[参考译文] TMS320F28069F:从 SRAM 运行代码

Guru**** 2861870 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1608976/tms320f28069f-running-code-from-sram

器件型号: TMS320F28069F
主题: C2000WARE 中讨论的其他器件

您好:

我需要开发自己的工具来对 TMS320F 器件的闪存进行编程。

为此、我在 CCS Studio 中实现了一个简单的应用、该应用会使 LED 闪烁并将一些数据写入闪存。 应用从 SRAM 执行、Studio 生成的映射文件按预期显示 SRAM 地址。 该工程在 Studio 中使用“闪存工程“或“调试工程“来执行、一切正常工作。

现在、我从工程生成的十六进制或输出文件中提取数据、并使用 JTAG 接口将其从我的工具发送到器件。 执行以下步骤:

  1. 使用 SYS_ACC_W 指令将数据发送到 SRAM
  2. 将 entry_point 地址写入 CPU IC 寄存器
  3. 通过将 EXE_CONT 值写入 MF_REG_0 的 EXE_DIR 位来执行代码

问题在于未执行代码。 我的序列中缺少什么?

请提供帮助。

谢谢

 

 

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

    Edward

    乍一看、一些文档提到需要  在 IR 扫描之间执行运行测试空闲。  虽然每次 IR 扫描都不需要、但我们的经验是、只需在所有 IR 扫描之间插入此项即可、而不是跟踪。  如果您已经在执行此操作、请告诉我。

    此外、我想确保您拥有有关 C28x 仿真的所有配套资料。  您是否已经拥有“我的安全资源“文件夹的访问权限、如果有、您可以提供该软件包的名称?  根据您的上述评论、我认为您可以访问其中一些材料、但我只是想确保您拥有我在文档方面所做的一切。

    此致、

    Matthew

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

    您好 Matthew、

    1.运行测试空闲在 IR 扫描之间执行。

    2.我的实施是根据以下文件完成的:

          SPRUF82 - 2008 年 8 月

           SPRUHS1C - 2014 年 10 月 — 2019 年 11 月修订

          SPRU430F - 2001 年 8 月 — 2015 年 4 月修订

           SPRUH18I - 2011 年 1 月–2022 年 6 月修订

    我需要有关 CPU 寄存器以及 通过 JTAG 运行内核所需的确切序列的更多信息。

    在运行内核之前、应将哪些值写入 CPU 寄存器(例如 IC、SP)?

    谢谢、

    Edward

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

    Edward

    我将向您发送一个私人聊天、以便在论坛外分享一些文档。 我想您需要接受连接请求、以便我这样做。  如果您有任何问题或没有看到、请告诉我。

    此致、

    Matthew

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

    您好 Matthew、

    我看不到连接请求。

    谢谢、

    Edward

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

    Edward

    您能否在 E2E 标题中看到两个突出显示的链接中的任何一个中都有一个通知待处理?

    如果您仍然没有看到任何内容、我可以尝试直接向您发送电子邮件。

    此致、

    Matthew

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

    您好 Matthew、

    没有待处理的通知。

    请将其直接发送电子邮件至 edwards@softlog.com。

    谢谢

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

    发送的功率级别。

    此致、

    Matthew

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

    谢谢。

    我将在稍后进行检查和更新。

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

    您好 Matthew、

    获得与  “JTAG 扫描序列“一段中所述相同的 SSR 值是否重要?

    例如、我已实现文档中所述的连接序列、但 SSR 的所有位都与预期值相匹配。

    谢谢、

    Edward

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

    您好 Matthew、

    获得与  “JTAG 扫描序列“一段中所述相同的 SSR 值是否重要?

    例如、我已实现文档中所述的连接序列、但 SSR 的所有位都与预期值相匹配。

    谢谢、

    Edward

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

    Edward

    对不起这里的延迟,我需要循环其他人发表评论.  明天美国时间、我们会尽力为您提供帮助。

    此致、

    Matthew

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

    Edward

    更新、我正在努力获取内部 CCS 驱动程序的源代码、这应该能在您的网页上复制一些内容  希望第二天左右能有所帮助。

    此致、

    Matthew

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

    Edward

    电子邮件发送到刚刚与附件驱动程序,如我的最后一篇文章中提到.

    此致、

    Matthew

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

    您好 Matthew、

    这些驱动程序如何帮助我从 SRAM 执行应用程序?

    我现在可以正确读取闪存和其他寄存器、因此可以确定我的器件连接顺序没有问题。

    问题在于、从我的固件执行应用程序时、LED 不会闪烁、但使用执行应用程序时、LED 会闪烁 “闪存工程“ 工程。

    这可能是什么原因?

    也许我的 CCS 工程有问题?

    谢谢、

    Edward

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

    Edward

    多亏了细节,我认为我们陷入了一个更基本的扫描问题,我误解了。

    在代码/设置中、您需要写入 EMU_KEY 和 EMU_BOOT 寄存器、以便 Brom 知道引导至闪存、即使连接了仿真器也是如此。  连接仿真器时 (TRSTn = 1)、Brom 将查看以下内容以确定引导模式与引导引脚。  否则、如果以下内容与预期内容不匹配、器件将进入等待引导状态。

    此致、
    Matthew

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

    您好 Matthew、

    写入 EMU_KEY 和 EMU_BOOT 没有解决我的问题。

    下面的顺序由我完成:

    1.根据 CCS 环境生成的应用十六进制文件将数据加载到 SRAM 中

    2.将 _c_int00 值从映射文件写入 IC 寄存器 (0x140)

    将 0x55AA 写入 EMU_KEY 寄存器 (0x0D00)

    将 0x000B 写入 EMU_BMODE 寄存器 (0x0D01)

    5.通过将 0x87FF 写入 MF_REG_0 来运行内核

    请提供帮助。

    谢谢、

    Edward

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

    Edward

    我要更改步骤 2、而不是直接将 C_int00 加载到 IC 寄存器中、而是使用 JTAG 序列发出 CPU 复位。  这应会将 CPU PC 放置在 BROM 入口点指令中。  

    由于您在加载 RAM 映像(抱歉,我之前混淆过您要加载到闪存,而不是创建闪存加载程序)、因此您应该将第一条指令放置在地址 0x0000 (M0 RAM) 处。  您可以只使用 1 个 32 位字来保存对其余代码的分支指令、可能位于更大的存储器区域中。  或者、如果足够小、您可以将整个代码放在 M0 中。

    您需要将 EMU_BMODE 更改为“Ah"以“以进行 RAM 引导。

    Brom 将为您执行一些校准步骤、因此、一旦调用您的代码、器件将被正确配置(振荡器已校准等)。

    我不确定将 IC 加载到 CCT/PC 中的原因为何不起作用、因为这就是 CCS 对典型加载/运行所执行的操作。  但在这种情况下、CCS 将在 GEL 文件中调用一些指令、以确保未执行 Brom。  我想使用 Boot Method 避免所有这些问题。

    请告诉我这是否有效、我们可以从那里开始。

    此致、

    Matthew

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

    您好 Matthew、

    我现在的顺序是:

    1.根据 CCS 环境生成的应用十六进制文件将数据加载到 SRAM 中

    2.发出内核重置

    将 0x55AA 写入 EMU_KEY 寄存器 (0x0D00)

    将 0x000A 写入 EMU_BMODE 寄存器 (0x0D01)

    5.将 0x0040XXXX 写入地址 0 (0x0040 - LB 指令、0xXXXX — 我的代码地址)

    6.通过将 0x87FF 写入 MF_REG_0 来运行内核

    我尝试了一些 0xXXXX 值、但它不起作用。

    我可以 使用 ofd2000.exe 工具向您发送从我的工程的输出文件生成的 XML 文件吗?

    谢谢、

    Edward

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

    是的、如果您想向我发送.out、这会很有帮助。  请告诉我是否需要为此设置共享驱动器/云驱动器。\

    此致、
    Matthew

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

    您好 Matthew、

    请在链接 https://www.jumbomail.me/j/rJ7NEhUS4ku0-h7 中找到 OUT 文件

    谢谢、

    Edward

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

    Edward

    我们昨天因国庆节而离开办公室。  请再给我一天时间来下载并完成分析。

    此致、
    Matthew

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

    Edward

    TI Intranet 阻止我使用此链接...我可以私下下载它、然后推回我自己。  但我让链接过期。  您可以再上传一次吗?

    此致、

    Matthew

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

    您好 Matthew、

    https://www.jumbomail.me/j/pp3T1iArV0GudXR

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

    Edward

    我看到问题了。  由于我们将引导至 RAM、让 Brom 负责设置器件并分支到应用程序代码、因此我们需要在代码的 RAM 入口点(地址 0x0000)有一条分支指令。  您所附加的代码在地址 0x0000 处没有该指令、因此您看不到该指令正常运行。

    您可以在此处使用示例: C:\ti\c2000\C2000Ware_6_00_00\device_support\f2806x\examples\c286\ADC_SoC 来获取我要提到的文件:

    您将在 linker.cmd 文件 28069_RAM_lnk.cmd 中看到。  您可以直接将其用作链接器、但以下行是引导至 RAM 的重要内容:

    begin    :origin = 0x000000、length = 0x000002

    BOOT_RSVD  :origin = 0x000002、length = 0x00004E(这是一个禁止事项,因为 ROM 将使用此区域作为其堆栈等)

    所有其他 RAM 都是公平的游戏为您的.text/.ebss 等

    现在、您还需要确保在工程中包含 F2806x_CodeStartBranch.asm 文件。  这有 2 项规定:

    1) 将分支指令放置在 begin 中指定的地址(本例中为 0x0000)处的程序代码中

    2) 使用选项、您可以在设备上禁用/启用看门狗。  我建议将其禁用、因为我们不想中断闪存操作。

    仅出于上下文相关、当您直接使用 CCS 加载当前的.out 文件时、可以在“main"处“处为您启动代码。  虽然也可以使用 JTAG 扫描序列将 PC 设置为“main",“,但、但此流程没有发生什么、通常是在 GEL 文件的帮助下、为了支持不执行 cinit/Brom、CCS 会执行一些操作。  在您的情况下、这是不切实际的、因此引导至 RAM 会更安全、并且在更高版本中应该使此功能正常工作。

    此致、

    Matthew

    MEMORY
    {
    PAGE 0 :
       /* BEGIN is used for the "boot to SARAM" bootloader mode   */
    
       BEGIN       : origin = 0x000000, length = 0x000002
       RAMM0       : origin = 0x000050, length = 0x0003B0
       RAML0_L3    : origin = 0x008000, length = 0x002000	 /* RAML0-3 combined for size of .text */
       														 /* in Example_F2806xSWPrioritezedInterrupts */
       RESET       : origin = 0x3FFFC0, length = 0x000002
       FPUTABLES   : origin = 0x3FD590, length = 0x0006A0	 /* FPU Tables in Boot ROM */
       IQTABLES    : origin = 0x3FDF00, length = 0x000B50    /* IQ Math Tables in Boot ROM */
       IQTABLES2   : origin = 0x3FEA50, length = 0x00008C    /* IQ Math Tables in Boot ROM */
       IQTABLES3   : origin = 0x3FEADC, length = 0x0000AA	 /* IQ Math Tables in Boot ROM */
    
       BOOTROM    : origin = 0x3FF3B0, length = 0x000C10
    
    
    PAGE 1 :
    
       BOOT_RSVD   : origin = 0x000002, length = 0x00004E     /* Part of M0, BOOT rom will use this for stack */
       RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
       RAML4       : origin = 0x00A000, length = 0x002000     /* on-chip RAM block L4 */
       RAML5       : origin = 0x00C000, length = 0x002000     /* on-chip RAM block L5 */
       RAML6       : origin = 0x00E000, length = 0x002000     /* on-chip RAM block L6 */
       RAML7       : origin = 0x010000, length = 0x002000     /* on-chip RAM block L7 */
       RAML8       : origin = 0x012000, length = 0x002000     /* on-chip RAM block L8 */
       USB_RAM     : origin = 0x040000, length = 0x000800     /* USB RAM		  */
    }
    
    
    SECTIONS
    {
       /* Setup for "boot to SARAM" mode:
          The codestart section (found in DSP28_CodeStartBranch.asm)
          re-directs execution to the start of user code.  */
       codestart        : > BEGIN,      PAGE = 0
       ramfuncs         : > RAMM0,      PAGE = 0
       .text            : > RAML0_L3,   PAGE = 0	
       .cinit           : > RAMM0,      PAGE = 0
       .pinit           : > RAMM0,      PAGE = 0
       .switch          : > RAMM0,      PAGE = 0
       .reset           : > RESET,      PAGE = 0, TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1,      PAGE = 1
       .ebss            : > RAML4,      PAGE = 1
       .econst          : > RAML4,      PAGE = 1
       .esysmem         : > RAML4,      PAGE = 1
    
       IQmath           : > RAML0_L3,   PAGE = 0
       IQmathTables     : > IQTABLES,   PAGE = 0, TYPE = NOLOAD
       
       /* Allocate FPU math areas: */
       FPUmathTables    : > FPUTABLES,  PAGE = 0, TYPE = NOLOAD
       
       DMARAML5	        : > RAML5,      PAGE = 1
       DMARAML6	        : > RAML6,      PAGE = 1
       DMARAML7	        : > RAML7,      PAGE = 1
       DMARAML8	        : > RAML8,      PAGE = 1   
    
      /* Uncomment the section below if calling the IQNexp() or IQexp()
          functions from the IQMath.lib library in order to utilize the
          relevant IQ Math table in Boot ROM (This saves space and Boot ROM
          is 1 wait-state). If this section is not uncommented, IQmathTables2
          will be loaded into other memory (SARAM, Flash, etc.) and will take
          up space, but 0 wait-state is possible.
       */
       /*
       IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
       {
    
                  IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)
    
       }
       */
       /* Uncomment the section below if calling the IQNasin() or IQasin()
          functions from the IQMath.lib library in order to utilize the
          relevant IQ Math table in Boot ROM (This saves space and Boot ROM
          is 1 wait-state). If this section is not uncommented, IQmathTables2
          will be loaded into other memory (SARAM, Flash, etc.) and will take
          up space, but 0 wait-state is possible.
       */
       /*
       IQmathTables3    : > IQTABLES3, PAGE = 0, TYPE = NOLOAD
       {
    
                  IQmath.lib<IQNasinTable.obj> (IQmathTablesRam)
    
       }
       */
    
    }
    

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

    您好 Matthew、

    它无法解决我的问题。

    我现在的顺序是:

    1.根据 CCS 环境生成的应用十六进制文件将数据加载到 SRAM 中

    将 0x55AA 写入 EMU_KEY 寄存器 (0x0D00)

    将 0x000A 写入 EMU_BMODE 寄存器 (0x0D01)

    4.将 0x004091BE 写入地址 0(0x0040 - LB 指令、0x91BE -.cinit 的地址)  

    5.发出内核重置

    6.通过将 0x87FF 写入 MF_REG_0 来运行内核

    正确吗?

    我的工程包含三个 CMD 文件。 这些 CMD 文件和映射文件附加在以下链接中:

    https://www.jumbomail.me/j/mAM3IF82GUyqXC6

    请检查它们是否有任何问题。

    谢谢您、

    Edward

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

    Edward

    您可以续订下载/共享代码、它已过期。

    此致、

    Matthew

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

    您好、Matthew、

    请在下面查找链接:

    https://www.jumbomail.me/j/tdPnTTRLoU2gxkm

    谢谢、

    Edward

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

    Edward

    我已将修改后的 ZIP 文件发布回共享驱动器。  总结是在 Example_Flash 2806x_SW_API_RAM_BOOT.cmd 中  

    第 126 行应为

    codestart       :>开始      PAGE = 0

    是这样的

    codestart       :> PRAML0    PAGE = 0

    此外、您还需要 从编译中排除 Example_Flash 2806x_SW_API_RAM.cmd 文件(我认为在调试期间它会缓冲在那里)。

    我已验证此引导是否正确引导至 RAM、如果您看到它在您的端部有效、请告诉我

    此致、

    Matthew

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

    您好、Matthew、

    修改后的项目 未 解决我的问题。 我仍然无法从 SRAM 执行它。

    我的顺序是:

    1.根据 CCS 环境生成的应用十六进制文件将数据加载到 SRAM 中

    将 0x55AA 写入 EMU_KEY 寄存器 (0x0D00)

    将 0x000A 写入 EMU_BMODE 寄存器 (0x0D01)

    4.将 0x004091BE 写入地址 0(0x0040 - LB 指令、0x91BE -.cinit 的地址)  

    5.发出内核重置

    6.通过将 0x87FF 写入 MF_REG_0 来运行内核

    正确吗?

    谢谢、

    Edward

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

    Edward

    您是否可以尝试删除步骤 4 并查看它是否有效?  不需要执行该步骤、对于 EMUKEY/BMODE 写入、我们在步骤 2/3 中正在执行。

    此致、

    Matthew