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.
您好!
我在 TMS320F28379D 上使用 CPU1和 CPU2
在我的软件中、我 想使用 SD 卡上的十六进制文件(使用 SPI-A)对 CPU1和 CPU2的闪存进行重新编程。
如需相关信息、在之前的程序中、我仅使用 CPU1、此函数(使用 SD 卡对闪存重新编程)工作正常。
重新编程过程如下:
下面是我要继续的方式:
我可以正确重新编程 CPU1闪存,但我对 CPU2重新编程有一些疑问:
此致、
您好、Vamsi、
此处是正则值;
我找到问题的原因,因为我需要写入28个字节,所以我遇到了对齐问题:
因此,我将程序修改为使用"Fapi_DataOnly"指令,并且我也禁用了 ECC:
EALLOW; Flash0EccRegs.ECC_ENABLE.bit.ENABLE = 0x0; EDIS;
在使用 "Fapi_DataOnly"指令重新编程之前:
重新编程后:
我仍然有问题。 您知道原因吗?
我是否需要在 CPU1和 CPU2上使用此指令? 如果是,何时?
CpuSysRegs.RESC.bit.WDRSn = 1;
感谢 Vamsi 的支持
此致
您好!
寄存器显示您收到 ECC 错误(因此也是 NMI)。
闪存 ECC 校验在加电时被启用。 因此、如果您不对 ECC 进行编程、ECC 错误将在应用程序在运行时禁用它之前发生。
我建议您对 ECC 进行编程。 如果您对此有任何疑问、请告诉我。
闪存常见问题解答、可帮助:
1.有关 C2000器件闪存 API 用法的[常见问题解答]常见问题解答:
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/951668
2.针对 C2000器件中闪存 ECC 用法的[常见问题解答]常见问题解答-包括 ECC 测试模式、链接器 ECC 选项:
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/951658
关于设置 RESC 的 WDRSn 位的问题: 这有助于清除该位。 您需要修复根本原因(ECC)。
谢谢、此致、
Vamsi
您好、Vamsi、
如前所述,我无法使用 ECC 进行编程;由于.hex 文件的架构,有时我必须对1个字、2个字、3个字或4个字进行编程。
因此与64位对齐不兼容。
如果我不对 ECC 进行编程,在上电时确认此错误的步骤是什么?
此致、
您好!
好的-不确定为什么不能将所有的64位或128位流式传输到 RAM 缓冲区、然后立即进行编程。
也许您可以在末尾对 ECC 进行编程->在没有 ECC 的情况下对整个闪存映像进行编程后、从主闪存阵列中读取每个128位、并使用相同的数据调用程序函数、但使用 Fapi_AutoEccGeneration。 但是、对于给定的128位(两次擦除之间)、不应提供超过4个程序命令。
谢谢、此致、
Vamsi
您好、Vamsi、
正如您说过的、我立即使用缓冲器进行编程。 我可以使用 Fapi_AutoEccGeneration 对我的所有闪存进行编程。
我在擦除之前和重新编程之后已经检查过、闪存的编程很好。
但是、在闪存重新编程之后、在看门狗复位之前或之后、我有一个非法的 ISR。
是因为我只编写并运行 CPU1吗?
由于我只使用 CPU1进行测试,这行是否会成为问题?
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
我如何知道问题的来源?
感谢 Vamsi 的支持。
此致、
您好!
我可以在下周周二(2月1日)回顾并返回给您
谢谢、此致、
Vamsi
您好!
是的、我建议将 CPU2保持在等待引导状态、因为您的应用程序未使用它。 如果 CPU1应用程序指示 CPU2从闪存引导、并且 CPU2中没有有效代码、则会导致 CPU2上的 ITRAP ->这将重置 CPU2并导致 CPU1上的 NMI。
如果您还有其他与引导或重置相关的问题、我建议您打开一个新帖子-我们会将其分配给我们的系统控制/引导专家以帮助您。
谢谢、此致、
Vamsi
您好、Vamsi、
即使我使用两个 CPU、在 CPU1看门狗复位后、CPU2上也会有一个 NMI。 为什么?
在 CPU1上使用此行时出现问题:
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
如何找到导致 NMI 的原因并解决它?
奇怪的是、这个问题只在看门狗复位引起的重新启动后发生。 电源重新启动后、两个 CPU 均正常运行。
此致
您好!
我会将此帖子分配给我们的系统控制专家、以帮助您解决您的最新问题。
谢谢、此致、
Vamsi
您好!
[引用 userid="315989" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1055149/tms320f28379d-reprogramming-flash-for-cpu1-and-cpu2/3978576 #3978576">即使我同时使用两个 CPU、在 CPU1看门狗复位后、我在 CPU2上也具有 NMI。 为什么?我不认为 CPU2上的 NMI。 您是否在从 CPU1调用引导命令之前在 CPU2上加载代码? 此外、当您连接到 CCS 时、两个内核均会根据仿真引导而不是正常引导进行引导。 请在器件 TRM 中查找仿真启动并进行适当设置、看看这是否有用。
此致、
Vivek Singh
您好、Vivek、
我继续如下所述:
是这样吗?
此致、
您好!
仿真启动适用于 CPU1和 CPU2。 如果您要将两个 CPU 连接到 CCS、则需要为这两个 CPU 设置仿真启动。 您可以为 CPU2 (FF5A)设置"Emulate Standalone boot"、以便其像正常引导过程一样引导。 您还需要运行 CPU1 ist、然后运行 CPU2。
此致、
Vivek Singh
Vivek、如果我像您说的那样继续:
我的程序无法运行。
如果我按如下方式继续,程序将运行; 您知道原因吗?
但在 CPU1看门狗复位后、CPU2停止或不重新启动、但我不知道在哪里。 如何知道我在哪里?
通常情况下,使用此行时,CPU2必须在复位后在闪存上重新启动?
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
RESC 寄存器= 0xC0000000、因此我不再具有 NMI。
此致、
您好、Vivek、
是否有更新?
此致、
我提到的步骤仅在 CPU1和 CPU2之间没有任何握手(如等待 IPC 标志)时才有效。 如果您具有该值、则不应在运行 CPU1后重置 CPU2。 这一切都取决于您的代码流程。 设置双核工程的正确方法是在 CPU1设置所有 GPIO 和其他系统配置(如时钟/存储器等)后、从 CPU1向 CPU2发出引导命令 然后、CPU1应等待 CPU2的引导状态(CPU2代码应将引导状态发送到 CPU1)、然后两者 都可以开始运行各自的任务。 只要 CPU2在 CPU1设置之前未使用任何系统配置(例如、默认情况下仅可从 CPU1访问全局共享 RAM)、您正在使用的步骤就可以。 CPU1代码启用对 CPU1的访问后、CPU2只能执行或写入 CPU2)。
希望这一点很清楚。
此致、
Vivek Singh
您好、Vivek、
有两点:
-在仿真模式下启动程序时,会出现一个问题
另一个问题是 CPU1看门狗复位后的重启问题。
如果我们只关注第二个问题,那么它是否低于采取行动的好方法?
在 CPU1侧:
- IPCBootCPU2 (C1C2_Brom_BOOTMODE_BOOT_FROM _FLASH);
-等待 CPU2引导状态(使用 IpcRegs.IPCBOOTSTS 寄存器)?
在 CPU2侧:
-是否将引导状态发送到 CPU1 (使用 IpcRegs.IPCBOOTSTS 寄存器)?
对吗?
如果我总结:
-电源关闭后,程序将正确重新启动。
- CPU1看门狗复位后、它不会。
这两种情况之间的区别是什么?! 我只想了解关闭重启和 CPU2侧 CPU1看门狗复位之间的变化。
很抱歉、我不清楚。
此致、
您好!
这很奇怪。 上电和 CPU1看门狗复位之间对于器件引导没有太大差异。 我希望您不是通过某些外部驱动器来驱动引导模式引脚、这些驱动器在 CPU1看门狗复位发生时保持驱动、而是在电路板上电后停止驱动。
您是否可以提供此问题的示例测试代码并将其发送给我,我可以在这里的设置中运行该代码? 此外,您是否有任何 FAE 与您一起处理此问题?
此致、
Vivek Singh
您好、Vivek、
是的、它看起来很奇怪。
在我的硬件上,引导模式引脚永久连接到 Vcc 以使用闪存模式:
我进行了测试;如果我删除了所有 IPC 功能,请按照下面的行操作,如果我只加载 CPU1程序,则 CPU1程序将在看门狗复位后重新启动。 看起来它与 CPU2链接、您是否同意? 但我不明白为什么在上电后一切正常、但在看门狗复位后一切正常。
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
如果我们没有发现上述信息有问题、我可以向您发送示例测试代码、但修改源代码需要时间。
此致、
我假设在下电上电后、您不连接 CCS、但它是独立工作的。 正确?
如果是 WD 复位,是否已连接到 CCS? 或者、这也是独立模式、通过某些 GPIO 切换、您知道 WD 已发出复位。
是的、看起来 CPU1/CPU2存在一些同步问题。
您看了我创建示例项目的请求、我可以在这里的设置中运行该项目了。
此致、
Vivek Singh
您好、Vivek、
[引用 userid="19481" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1055149/tms320f28379d-reprogramming-flash-for-cpu1-and-cpu2/3989368 #3989368)]如果 WD 复位,是否已连接到 CCS? 或者、这也是独立模式、通过某些 GPIO 切换、您知道 WD 已发出复位。 [/报价]我已经尝试了这两种情况。 在独立模式下、我知道看门狗有复位问题、因为我使用 LED。 (在我的程序执行期间、LED 被切换、如果复位被执行、LED 被关闭、然后打开)。
我会将项目发送给您。
此致、
好的、谢谢。 将尝试该项目、并告知您是否能够复制该项目。
此致、
Vivek Singh
Vivek、
总结一下,因为我觉得有误解,我会先解释一下我的女仆测试,然后问问题:
2个测试(独立模式)和2个不同的结果:
第1次测试:
第二次测试:
1 μ s) Code Composer 复位(°->复位-> CPU 复位)和开关打开/关闭复位之间有何区别?
2 μ s) CPU1上的看门狗°后,是否等待 CPU2引导模式? 等待? 闪存?
感谢您的支持。
此致
您好!
此详细信息非常有用。
[引用 userid="315989" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1055149/tms320f28379d-reprogramming-flash-for-cpu1-and-cpu2/3998599 #3998599]1°) Code Composer 重置(运行-->重置--> CPU 重置)与打开/关闭重置之间的区别是什么?CCS 复位和上电复位(打开/关闭)之间存在很大差异。 CCS 复位仅复位 CPU 子系统、它不会通过 XRSn 或上电复位来复位逻辑复位。 上电复位还会复位 JTAG 锁定并终止 CCS 连接、这在 CCS 复位或 XRSn 时不会发生。
如何断开 CCS 的连接? 您只是单击断开连接还是终止整个调试会话? 如果只单击 DISCONNECT、则尝试终止完整的调试会话、并查看这是否有用。
此致、
Vivek Singh
您好、Vivek、
我断开 CCS 连接(Run -> Disconnected)、然后单击 Terminate Session (红色方框)。
我将不再使用 CCS 复位、而只使用上电复位。
我进行了另一项测试 (我只使用 CPU1并对其进行编程,我擦除 CPU2闪存);CPU1在闪存重写 +看门狗复位后不会重新启动,但:
如果我在初始化函数中注释以下行、CPU1将在闪存写入+看门狗复位后重新启动。
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
我需要使用这一行、因为我将在最终程序中使用两个 CPU。
1 μ s) 这行°会影响 CPU1程序、即使 CPU2未编程也是如此?
2 μ s)为什么 在上电°后该行不会影响 CPU1程序、而是在闪存写入+看门狗复位后影响我的程序?
2°μ s)我将此函数放在 CPU1初始化的末尾,以避免 CPU1和 CPU2之间的重新来源冲突; 这是否是继续操作的好方法?
3 μ s)°在看门狗复位后执行上电复位、CPU1也不会重新启动。 为什么?
感谢您的支持。
此致、
我已向您发送了一份个人答复。