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.

[参考译文] CCS/LAUNCHXL-F28069M:闪存 API、未编程、f28069_CAN_FLASH_kernel 示例、

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/954654/ccs-launchxl-f28069m-flash-api-not-programming-f28069_can_flash_kernel-example

器件型号:LAUNCHXL-F28069M

工具/软件:Code Composer Studio

您好、我对以下导入代码有问题。

C:\ti\c2000Ware_3_03_00_00\device_support\f2806x\examples\c28\f28069_CAN_flash_kernel 

我正在使用  

Code Composer Studio

版本:8.2.0.00007

用于闪存的闪存 API 函数为我提供状态代码12

shared_boot.c 行:208

状态= Flash_Program (((UINT16 *) BlockHeader.DestAddr、
(uint16 *) progBuf、BlockHeader.blocksize、&FlashStatus); 

我要做的是运行调试器、然后发送流。 我可以看到等待字节到达 CAN 的代码、然后我在其中一个状态值上触发了断点。  


我已在文档中跟踪状态代码的含义。 此处:

文件://C:/ti/c2000/C2000Ware_3_03_00_00/libraries/flash_api/f2806x/docs/Flash2806x_API_Quickstart.pdf 

这可能意味着示例代码存在内存分配问题。 我可能错了、这可能是一个红色的鲱鱼。

我之前对示例代码有一些问题

HTT ps://e2e.ti.com/support/tools/ccs/f/81/p/953837/3525807#3525807


其中导入工程时出现错误、我还发布了一些段警告。 这可能是一种红色的鲱鱼。

而闪存功能在调试器中或通过 CAN 流不起作用。

我能够通过注释掉闪存程序块部分、使擦除功能在调试器中或通过 CAN 流工作。 我还修改了函数的参数以进行其他扇区擦除。

状态= Flash_Erase (((sectora | sectorb | SECTORC | SECORD|SECTORE|SECTORF|SECTORH)、
FlashStatus (FlashStatus); 

我已通过内存浏览器0x3D8000确认擦除。  

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

    Jakub、

    您能否检查映射文件中是否有任何段映射到 ROM 或 OTP 或超出有效存储器范围?

    谢谢、此致、

    Vamsi

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

    您好、感谢您的回复

    从中删除  

    我可以看到 SPRS698H


    和  

    我的映射文件在这里

    e2e.ti.com/.../link.zip

    也许是这样吗? 如果可以、请仔细检查。

    RAMM0从0x50开始、而不是0x40。

    RAMM0 00000050 000003b0 000000ee 000002c2 RWIX 

    复位 0 003fffc0 00000002 DSECT
    003fffc0 00000002 rts2800_fpu32.lib:boot28.obj (.reset) 

    可能是那些(长射)?:

    这些内容是否已更新? 版本错误? 这个问题是否与这些问题有关?

    ABS 003ffebb _Flash2806x_Program
    abs 003ffebd _Flash2806x_Erase 

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

    您好、Jakub、

    您收到的状态代码12为"Status_FAIL_ADDR_INVAL"。 这应该意味着传递给下面函数的 FlashAddr 参数不正确、或者长度超出了闪存/ OTP。

    外部 UINT16 Flash_Program (UINT16 * FlashAddr、UINT16 * BufAddr、UINT32长度、
    Flash_ST * FProgStatus); 

    BlockHeader.DestAddr闪存中的位置是否始终是一个位置? 它似乎在示例代码中递增。 还应检查传递给函数的长度、以确保其保持在闪存中

    最棒的

    Kevin

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

    感谢 Kevin
    也许我之前告诉过的信息是一个错误。

    我卡住了。 我无法再复制代码12。 甚至尝试复制我的步骤并再次导入项目。

    我还注意到、除非我按下 PAUSE、否则去抖器不会指向 CAN while 循环、以获取流。 我认为我以前不必这么做。 一个示例。

     

    调试时 、程序会进入调试存储器之外。 我明白了。

    调试和步进以及查看反汇编时的示例。 程序似乎完全无法到达闪存函数、并被卡在某个位置

    因此、在该代码中、程序会擦除闪存、然后尝试获取第一个块的字大小。 由于 BlockHeader.blocksize 为0、看起来是错误的。

    而 Look 不会作为结果执行。

    然后、它尝试将入口地址加载到闪存中。 这意味着、如果成功或者没有从新的或者旧的闪存中运行? 它通过一些推送弹出堆栈来配置寄存器以实现正确操作。 一些 Itrap 寄存器仍然不知道这意味着什么。 然后卡在这里的环路中。


    这是一个示例代码、我不应该对此有任何问题。

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

    这是我在 CAN 上发送的内容。 我有一个辅助 CAN 器件进行监听。 这是 CAN 总线上发生的情况。 我正在尝试在调试时发送该消息。

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

    到某一时刻、所有的都可以读取存储器中的存储值。 例如、最终地址获得存储在中的值

      

    还不错


    // //获取第一个块的大小(以字为单位) // BlockHeader.blocksize =(*GetWordData)();

    (我可以看到的)调用此函数时、它不会跳转到函数。 如果调试器作为函数的指针写入、是否能够跟上? 在这里、很显然、需要从2个字节的 CAN 获取返回值、但它会卡住。 如果不暂停调试器、我就无法再执行其他操作。 如果我暂停、我会收到存储器之外的消息。

    有问题吗?
    声明语法错误吗?
    指针地址是否以某种方式损坏?
    是否有其他方法可以调用可能起作用的函数?
    这是可调试的问题、还是无法使用调试器进行调试?

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

    另一个问题。 IM 使用了微处理器的-M 变体、它有一些细微的不同。 这是罪魁祸首吗?

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

    看起来问题是我在程序执行擦除函数时进行流处理。
    我在那里看不到任何中断或 FIFO。 我对软件功能的假设是错误的。

    单步执行对我们帮助很大。

    在我的示例中、程序缓冲器存储器位于0xa040。

    返回的状态为0。 终于来了!!

    我检查了闪存、它在这里。

    我需要进行一些更改以适应我的应用。  

    在我将其标记为已解决之前、我将对其进行更多测试。

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

    您好、Jakub、

    很高兴听到您的意见。 我认为根据您发现的内容可能会有错误。

    我认为应该对 CAN_Boot.c 文件进行以下更改,以便(* GetWordData)();行正常工作。

    //
    //将 GetWordData 分配给//
    函数的 CAN-A 版本。 GetWordData 是函数的指针。
    //
    GetWordData =&CAN_GetWordData; 

    我将记下这一点、以便进一步了解。

    最棒的

    Kevin

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

    感谢 Kevin、

    很抱歉让您感到困惑、但我的代码也不会更改。

    我删除了您所提到的部件、以避免让其他人感到困惑。

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

    您好、Jakub、

    好的、没问题。 更深入地研究它、似乎两种方法都可以在 C 语言中使用。

    最棒的

    Kevin