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.

[参考译文] TMS320F28075:测试 F2807x_sci_flash_kernels.c

Guru**** 2595805 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/669695/tms320f28075-testing-out-f2807x_sci_flash_kernels-c

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

从 C2000ware 获取此示例项目时遇到问题。 以下是我已执行的步骤:

1) 1)使用 CCS7编译了程序。 我已使用 LED 作为工作程序的指示器。

1) 1)将 controlCARD 上的 SW1开关配置为 SCI 引导模式(GPIO72"0";GPIO84"1")。

2)将串行电缆连接到 GPIO28和 GPIO29 (因为我使用这2个引脚进行 UART 通信、如参数"SCI_BOOT_ALTERRAPON"的示例程序所示)

3) 3)使用 hex2000.exe 转换了 program.out 文件。  我使用的命令是"hex2000 -boot -sci8 -a program.out"、它创建了一个通过 Realterm 转储的"program.A00"文件。

4) 4)使用波特率为9600的 Realterm 连接并发送了一个"A"、正确接收了回波。

5) 5)已发送文件。 注意到 LED 未按程序设计的那样工作。

在尝试此示例代码时、我是否忽略了任何可能的步骤? 或者、我是否在上述步骤之一中犯了一些错误? 我们非常感谢您的任何反馈或建议。

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

    尊敬的 Stephen:

    我将对其进行研究。

    您说

    [引用用户="Stephen Yeo"]

    1) 1)使用 CCS7编译了程序。 我已使用 LED 作为工作程序的指示器。

    [/报价]

    您是说自己插入一些代码吗? 您能把它们放在这里。

    您也可以将 program.out 文件放置在她的文件中、我可以对其进行测试以找出问题。

    此致

    Emma

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

    1) 1)使用 CCS7编译了程序。 我已使用 LED 作为工作程序的指示器。

    也许我应该澄清这种模糊的描述。 基本上、对于 sci_flash_kernels 示例代码、我从 C2000Ware 中编译了确切的演示项目。 根据我的理解、我假设它能够加载在 sci_flash_kernel 运行时通过 SCI (可能类似于 blinky)发送的应用程序(program.out)。

    此外、为了添加到我的步骤4和5、我之前做了一些额外的测试、下面是它的屏幕截图:

    如您所见、自动波特率检测的"A"被正确回显。 但我不确定转储文件是否应该如此。 使用 hex2000应该采用哪种输出格式?

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

    尊敬的 Stephen:

    您可以通读本文档:

    领域术语不支持 C2000所需的正确格式。

    您可以按照文档描述的说明进行操作。

    Emma

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

    尊敬的 Emma:

    感谢您的建议。 我已经尝试过文档中列出的步骤、但文件似乎未正确下载到 RAM 中。 这是一个屏幕截图,它似乎没有超越“下载......” "

    如需更多信息、我目前正在使用 F2807x controlCARD、其中 SW1配置为"从 SCI"模式引导、A:SW1配置为使用引脚76从集线站进行 UART 通信。

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

    除了我之前的屏幕截图外、我还重试了具有"-v"/详细输出的串行闪存编程器、以便进一步调试、似乎该过程卡在尝试自动波特率锁定上。 我还进行了一些其他的故障排除、例如、 使用 C2Prog 来刷写内核(因为在社区中通常建议将其作为替代)和 Realterm/Hypertermins 来触发单个字符"A"自动波特回波。 然而,所有这些审判似乎都表明,自动加条并不成功。

    根据原理图(TMDSCNCD2807、C2000Ware 材料的~\boards\controlCARDS\文件夹中提供的原理图)在 controlCARD 上进行了一些测试、并且开关根据预期的逻辑正常运行(因此 A:SW1对应的电阻 R8;SW1对应的 R15和 R16)。

    另一个引起关注的问题是[http://www.ti.com/lit/er/sprz423f/sprz423f.pdf]的 pg26中报告的问题。 我使用的 F28075芯片组是芯片版本 B (TMX32028075PTPT YFB-58AXYQW)。 该报告列出了引导 ROM 可能挂起的情况、并提到了 e INTOSC 作为主时钟源。 此方案是否与我面临的问题相关、如果是、是否有其他有关解决问题的文档或指南?

    最后、是否有其他成功的替代方案或方法可用于通过 SCI 执行引导加载操作? 感谢您在调试此问题方面的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 user="Stephen Yeo"]除了我之前的屏幕截图外,我还重试了具有"-v"/verbose 输出的串行闪存编程器,以便进一步调试,似乎该过程一直在尝试自动波特率锁定。

    加载内核时、程序是否卡在尝试执行自动波特率、或者内核是否已加载且应用程序卡在加载应用程序之前尝试执行自动波特率?

    谢谢、

    Emma

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

    [引用用户="Emma Wang "]

    加载内核时、程序是否卡在尝试执行自动波特率、或者内核是否已加载且应用程序卡在加载应用程序之前尝试执行自动波特率?

    [/报价]

    尊敬的 Emma:

    程序在加载闪存内核(不是最终的应用程序加载)时尝试执行自动波特时卡住、如3月10日我的屏幕截图所示。

    根据之前的所有测试、我目前怀疑 SCI 引导 ROM 首先无法正常运行。 在尝试执行引导加载之前、是否有任何测试来验证器件是否正确处于 SCI 引导模式?

    谢谢。

    斯蒂芬

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

    斯蒂芬

    当我在地址0xD00写入015A 时、我将遇到同样的情况。

    但是、当我在地址0xD00写入815A 时、我会成功。

    我认为应该使用 SCIboot1、因为我们使用备用 I/O

    希望它能在您的笔记本电脑上工作。

    此致

    Emma

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

    尊敬的 Emma:

    [引用用户="Emma Wang "]

    当我在地址0xD00写入015A 时、我将遇到同样的情况。

    但是、当我在地址0xD00写入815A 时、我会成功。

    [/报价]

    我是否可以问我如何实现这一点? 我是 CCS 和 C2000 MCU 的初级用户、因此非常感谢您提供有关如何配置 CCS 和 C2000 MCU 的一些简单说明/参考。

    我假设您仍在使用提供的串行闪存编程器实用程序和 sci_flash_kernel 应用程序、而无需对它们进行任何编辑?

    谢谢你。

    此致、

    斯蒂芬

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

    您好!

    我尝试通过编辑 GEL 文件来插入 SCI 引导选项、如下所示:

    热菜单 EMU_BOOT_SCI ()

    *0xD00 = 0x815A;

    我还将 F2807x_sci_flash_kernel.c 中的定义编辑为以下内容:

    #define C1C2_Brom_BOOTMODE_BOOT_FROM _SCI 0x00000081

    当处于调试模式时、我已经使用"EMU 引导模式选择"工具进入"EMU_BOOT_SCI"并从调试器菜单中复位 CPU。 与串行闪存编程器一起,我成功地传递了初始的 autobaudLock()并将 SCI_FLASH_kernel 下载到 MCU 中。

    但是,在完成内核加载后到达 autobaudLock()时,程序再次挂起,如下图所示:

    进一步调试串行闪存编程器的源代码显示程序被捕获在自动 obaudLock()的这个循环内:

    while (dwRead = 0){
          ReadFile (file、&rcvData、1、&dwRead、NULL);    //program 不会在"ReadFile()"之外执行

    这似乎意味着程序无法读取 MCU/内核的任何输出、这使人怀疑内核在执行自动 obaudLock 之前是否已正确引导。 我还尝试在内核加载后注 autobaudLock()函数,但程序也会在其他函数的 ReadFile()处挂起(例如在 loadProgram()期间;)。

    如果您能够解释您在 sci_flash_kernel 或串行闪存编程器中对源文件所做的更改、以及 您所执行的任何未在 sprabv4b.pdf 中记录的额外过程、这将非常有帮助

    感谢您在解决我的问题时表现出耐心并提供持续指导。

    此致、

    斯蒂芬

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

    斯蒂芬

    我遇到过这种情况。

    我没有更改:

    [引用用户="Stephen Yeo"]

    我还将 F2807x_sci_flash_kernel.c 中的定义编辑为以下内容:

    #define C1C2_Brom_BOOTMODE_BOOT_FROM _SCI 0x00000081

    [/报价]

    我刚刚更改了这个部分

    //

    // GPIO84、85的 SCI_BOOT 参数;SCI_BOOT_ALTERATE 参数

    //对于 GPIO28、29

    //

    EntryAddr = SCI_GetFunction (SCI_BOOT);

    return (EntryAddr);

    在 F2837xD_sci_flash_kernel_cpu01.c 中

    EntryAddr = SCI_GetFunction (SCI_BOOT_ALTERNATE);

    因为仿真模式是通过 GPIO28、29连接的。

    您还应该将0x815A 写入地址0xD00。

    希望对您有所帮助。

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

    尊敬的 Emma:

    [引用用户="Emma Wang "]

    EntryAddr = SCI_GetFunction (SCI_BOOT_ALTERNATE);

    [/报价]

    我已确保此器件正确、并且"SCI_BOOT_ALTERRy"也是 C2000Ware 示例文件中的默认设置。

    [引用用户="Emma Wang "]

    您还应该将0x815A 写入地址0xD00。

    [/报价]

    对于该部分、我只想验证这是如何完成的。 是否按照我之前的帖子中的建议编辑 GEL 文件、或者是否有任何我需要专门为其编写和刷写到 MCU 的代码? (很抱歉、问这个问题、我不熟悉 CCS 的使用。)

    [引用用户="Emma Wang "]

    我遇到过这种情况。

    [/报价]

    到目前为止、我已经按照 sprabv4b.pdf 中的确切说明以及其中所述的所需 hex2000转换进行了操作。 但是,串行闪存编程器无法执行 autobaudLock(),而不能执行其中的 ReadFile()函数。

    下面是我采取的步骤:

    1) 1)使用命令行"hex2000.exe -boot -a -sci8将 sci_flash_kernel 和程序输出文件转换为 txt .out -o "

    2) 2)使用 CCS 进入调试模式(当前在闪烁程序上运行)

    3) 3)在调试模式下、使用 GEL 文件启用 EMU_BOOT_SCI 选项  

    热菜单 EMU_BOOT_SCI ()

    *0xD00 = 0x815A;

    4) 4)通过调试器工具复位 CPU 并运行调试会话

    5) 5)使用参数"-d f2807x–k 执行的串行闪存编程器 .txt–A .txt–p COM3–b 9600 -v"

    6) 6)串行闪存编程器执行并通过第1次自动 obaudLock 检查(我无法在3月10日的帖子中通过该检查、目前认为已解决)

    7) 7) flash_kernel.txt 正在加载到 MCU 中、echoback 确认数据位正确。

    8)(这是我的最后一个屏幕截图所示的地方) flash_kernel.txt 已完成加载。 在打印(并等待)用于内核操作(DFU、擦除等)的用户命令输入之前,应启动内核并执行 autobaudLock()。

    第8步是当前无法完成自动审计锁定的位置、因此串行闪存编程器挂起。 如果我上面列出的每个步骤都是正确的,那么我怀疑闪存内核在初始引导加载完成后没有正确引导,因此无法执行后续的 autobaudLock()。 但到目前为止,这个问题仍未得到解决,我希望能得到一些进一步的见解。

    感谢你的帮助。

    此致、

    斯蒂芬

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

    斯蒂芬

    很抱歉、我没有意识到您不熟悉 CCS。

    当您首次连接设备时、请勿单击"调试"、而是:

    单击"View"->"Target Configuration"

    2.打开 projects->examples->targetconfigs,您将看到.ccxml 文件,

    右键单击它、然后单击 Launch Selected configuration (启动所选配置)。 然后右键单击 C28xx_CPU1并在调试窗口中选择连接目标

    就像这样:

    3.打开“视图”->“内存浏览器”,输入0xD00,然后将值更改为0x815A,正如我在前面的答复中所说的那样。

    希望您能尽快解决您的问题。

    此致、

    Emma

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

    感谢您的指导、我现在已经加载了 FLASH_kernel。

    此致、
    斯蒂芬