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.
您好!
我正在尝试执行自定义的 CAN 引导。 它基于 Hercules、可下载 R48处理器的示例源。 我正在使用已关闭优化的 CCSv6。
我使 CAN 工作(在注释掉闪存擦除/写入)。
现在、我尝试实际闪存、这是引导加载程序存在的原因。
问题是当我运行 Hercules 程序时、它挂起、而当我暂停时、PC 位于 ASM 矢量表中。 FAULT 指令地址为0x10、因此没有帮助引脚指示故障。 在向量上放置断点并不能更好地指示故障。
奇怪的是、如果我执行系统复位并单步进入 f021库、则不会发生陷阱、并且闪存会被擦除并稍后写入。 是的、我单步进入我的案例中的 RAM 代码、地址为0x0800_a588... 步进需要很长的时间和很多周期、但是我有单步执行、将3个16字节的块写入0x20000 +的闪存。 在此过程中的任何时候、如果我将 ccsv6设置为"Go"、则处理器最终会在向量中挂起。 因此、JTAG 上的 ccsv6会改变足够的处理器状态以"修复"中止问题、或者 R46配置中存在速度问题。
有什么想法吗?
是否可以获取库的源代码、以便我可以尝试输入一些测试延迟等?
谢谢、Steve
好主意。 我将尝试构建一个更易于调试的简单测试项目。
此致、Steve
您好 Steve、
我将您的代码复制到了我的项目中、它可以对闪存进行擦除和编程、而不会出现任何问题。
闪存操作代码应放置并在 SRAM 中执行、而不是在闪存中执行。 sys_startup.c 中的_copyAPI 2RAM_()用于将这些代码复制到 SRAM 中。
此致、
问
您好 QJ、
谢谢、我希望它能正常工作。
正如我说过的、如果我只是单步执行代码、它将对我有效。 是的、ccsv6将单步进入 RAM、在此库可进行反汇编。 那么、在某种速度设置中可能会出现问题?
您是否在 rm46x 处理器上进行了测试? 我的晶体为16MHz、因此我假设库根据需要设置其他时钟(我认为它是160MHz)。 此外、我假设库处理闪存等待状态设置。
您是否从 spna183.zip 中的代码开始?
我不确定我在哪里得到 f021_API、我认为它是在某些怪兽 halcogen zip 文件中预构建的。
Steve。
您好 QJ、
我对 库的可见部分和 RM46x 16 32位 TRM spnu514b.pdf 感到困惑-
您的库使用:
C:\users\scalfee\scalfee_1\scalfee_1\Triton\main\CTL\SafetyMCU_Bootloader\inc\F021_API_Constants.h:
49 #define F021_FLASHECC_MAP_END 0xF04FFFFFU
50
51:#define F021_CPU0_REGISTER_ADDRESS 0xFFF87000U
52.
53 /*特定 TI OTP 偏移*
C:\users\scalfee\scalfee_1\scalfee_1\Triton\main\CTL\SafetyMCU_Bootloader\inc\F021_API_Registers.h:
74 #define FWP_WRITE_OFFSET 0x120U
75 //创建指向 FWPWRITEx 寄存器的字节访问器指针的宏
76:#define FWPWRITE_BYTE_ACCESTER_ADDRESS ((FwpWriteByteAccessorType*)(F021_CPU0_REGISTER_ADDRESS + 0x120U)
77 //创建指向 FWPWRITE_ECC 寄存器的字节访问器指针的宏
78:#define FWPWRITE_ECC_BYTE_accor_address ((FwpWriteByteAccessorType*)(F021_CPU0_register_address + 0x140U))
79 /*创建指向 FWPWRITEx 寄存器的 DWORD 访问器指针的宏*/
80:#define FWPWRITE_DWORD_ACCEMOR_ADDRESS ((FwpWriteDWordAccessorType*)(F021_CPU0_REGISTER_ADDRESS + 0x120U))
但 TRM 不会讨论偏移量为0x120的闪存基址 A fff8_7000的寄存器
实际上、它完全跳过它们。 第279页
FFF8 706Ch FDIAGCTRL 诊断控制寄存器第5.8.26节
FFF8 7070h FRAW_DATAH 未更正原始数据高电平寄存器部分5.8.27
FFF8 7074h FRAW_DATAL 未更正原始数据低寄存器部分5.8.28
FFF8 7078h FRAW_ECC 未校正原始 ECC 寄存器第5.8.29节
FFF8 707Ch FPAR_OVR 奇偶校验覆盖寄存器第5.8.30节
FFF8 70C0h FEDACSDIS2闪存错误检测和校正扇区禁用寄存器2第5.8.31节
FFF8 7288h FSM_WR_ENA FSM 寄存器写入使能部分5.8.32
FFF8 72A4h FSM_Sector FSM 扇区寄存器第5.8.33节
也许您可以对 SOC 上的实际情况有所了解?
谢谢、Steve
您好!
我刚才确认我使用的是最新的 f021 API v02.01.01
Steve
您好 Steve,
附件是我用于在 RM46x Launchpad 上进行测试的项目。 我也使用了 f021 API v02.01.01。 闪存 API 位于 C:\ti\hercules\F021闪存 API\02.01.01
此致、
问
您好 QJ
我仍在尝试构建此功能。 最后、我想知道如何加载项目所需的确切编译器版本。
现在、我找不到您的项目"rtsv7R4_A_le_eabi.lib"中所需的 RTS 库。 这存在于较旧的编译器中、但不存在于16.6中? 因此链接失败。
我正在使用 CCS 版本:6.2.0.00050
此致、Steve
您好、Steve、
请在 while (1)循环中找到包含您的代码的 CAN 引导加载程序。 它适用于单步执行和一次性执行。 引导加载程序使用闪存 API 修订版2.01.01、该库位于 C:\ti\Hercules \F021闪存 API\02.01.01中
此致、
问
您好 QJ、
此 zip 与您先前发送的 zip 是否不同? 我还能够使测试代码运行。
谢谢、Steve
您好、Steve、
唯一的区别是、新的 zip 项目在安装文件夹(c:\ti\hercules\...)中使用头文件和闪存 API。 而不是引导加载程序文件夹中的文件和库。 新的 zip 文件不包含其他引导加载程序(SPI、UART 等)。
此致、
问
您好 QJ、
我现在的工作状态相当好。
我确实注意到 rm46上有错误的指令陷阱。
如果我调用 fapi_BlockErase (0、pagealignedaddr、1)、我会得到一个错误的 instp 陷阱。
如果我使用 Fapi_BlockErase (0、pagealignedaddr、0x400)调用它、它将起作用。
1或0x400都不是页面大小、因此有点奇怪。 但是、我给出了权变措施。 请考虑这是一个错误报告。
此致、Steve