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:CLA RAM 的 C2Prog 扇区违反

Guru**** 2553260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1034724/tms320f28069f-c2prog-sector-violation-for-cla-ram

器件型号:TMS320F28069F

你好

我能够使用 CCS 在我的器件上刷写启用 CLA 的代码。 但是、当我尝试使用 C2Prog 进行闪存时、我会得到此错误:

阅读 SPRS698I 文档、我知道 CLA 程序需要驻留在0x9000 (区域 L3)中。 我还支持将代码保存到闪存中、因此我使链接器文件将 CLA 代码保存到闪存中、然后在启动时加载到 RAM 中。

存储器

第0页:

   BEGINRAM:    origin=0x0、length=0x2

   PRAM:      origin=0xC000、length=0x2000 //L5

   CLA_PROG_RAM:origin = 0x9000、length = 0x1000 // L3

   OTP:       origin=0x3d7800、length=0x3fa

   BEGINFLASH:  origin=0x3D8000、length=0x2

   APPHDR:     origin=0x3D8002、length=0xC    

   闪存:     origin=0x3d800e、length=0x1Bff2

  …μ A

第1页:

   RAMM0M1:     origin=0x2、length=0x7fe

   CLA1_MSGRAMLOW: origin = 0x1480、length = 0x000080

   CLA1_MSGRAMHIGH:origin = 0x1500、length = 0x000080

   CLA_DATA_RAM:   origin = 0x8000、length = 0x001000 //L0、L1、L2

   DRAM:  origin=0xe000、length=0x6000

 

部分

  Cla1Prog       :load = flash,

                    运行= CLA_PROG_RAM

                    load_start (_Cla1funcsLoadStart)、

                    load_end (_Cla1funcsLoadEnd)、

                    load_size (_Cla1funcsLoadSize)、

                    run_start (_Cla1funcsRunStart)、

                    PAGE = 0

 

  CLAscratch      :

                     {*。obj (CLAscratch)

                    。 += CLA_ScratchPad_size;

                    *。obj (CLAscratch_end)}> CLA_DATA_RAM、

                             PAGE = 1.

                             

   CLA1mathTables:  load = flash

                    运行= CLA_DATA_RAM

                     Load_start (_Cla1mathTablesLoadStart)、

                     Load_End (_Cla1mathTablesLoadEnd)、

                      load_size (_Cla1mathTablesLoadSize)、

                     run_start (_Cla1mathTablesRunStart)、

                     PAGE = 1.

然后在启动时 、我将 Cla1Prog 和 CLA1mathTables 分别复制到程序 RAM 和数据 RAM 中。

 

void c2000_flash_init (void)

 #if MW_RUNTIME_FLAHLOAD

 //将 InitFlash 函数代码和闪存设置代码复制到 RAM

 memcpy (& RamfuncsRunStart、&RamfuncsLoadStart、(uint32)(&RamfuncsLoadEnd-&RamfuncsLoadStart));

 包含#ifdef CLA_block_included

   memcpy (&Cla1funcsRunStart、&Cla1funcsLoadStart、(uint32)&Cla1funcsLoadSize);

   memcpy (&Cla1mathTablesRunStart、&Cla1mathTablesLoadStart、(UINT32)&Cla1mathTablesLoadSize);

 #endif

 //调用闪存初始化以设置闪存等待状态

 //此函数必须驻留在 RAM 中

 InitFlash()

 #endif

什么可能导致 C2Prog 错误?


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

    马什鲁尔

    由于您没有共享整个链接器 cmd 文件、因此不确定是否在0x9000映射了任何其他内容。  您能否检查  链接器 cmd 文件中是否有任何其他(除了 Cla1Prog)被映射到 CLA_PROG_RAM?  请检查您的映射文件以了解在0x9000处映射的确切内容。

    您在编译时是否收到任何警告?  警告、如"创建不带段规范的输出段"或其他任何内容?   

    谢谢、此致、

    Vamsi

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

    我通过将 CLA1_MSGRAMLOW、CLA1_MSGRAMHIGH、CLA_DATA_RAM 移动到第0页来解决该问题。

    我现在能够通过 CAN 进行刷写。

    存储器

    PRAM:origin=0xC000、length=0x2000 //L5
    CLA_PROG_RAM:origin = 0x9000、length = 0x1000 // L3
    (笑声)
    CLA1_MSGRAMLOW:origin = 0x1480、length = 0x000080
    CLA1_MSGRAMHIGH:origin = 0x1500、length = 0x000080
    CLA_DATA_RAM:origin = 0x8000、length = 0x001000 //L0、L1、L2
    DRAM:origin=0xe000、length=0x6000

    部分

    Cla1Prog:load = flash,
    运行= CLA_PROG_RAM、
    load_start (_Cla1funcsLoadStart)、
    load_end (_Cla1funcsLoadEnd)、
    load_size (_Cla1funcsLoadSize)、
    run_start (_Cla1funcsRunStart)、
    PAGE = 0

    CLAscratch:
    {*。obj (CLAscratch)
    。 += CLA_ScratchPad_size;
    *。obj (CLAscratch_end)}> CLA_DATA_RAM、
    PAGE = 0

    CLA1mathTables:load = flash,
    运行= CLA_DATA_RAM、
    Load_start (_Cla1mathTablesLoadStart)、
    Load_End (_Cla1mathTablesLoadEnd)、
    load_size (_Cla1mathTablesLoadSize)、
    run_start (_Cla1mathTablesRunStart)、
    PAGE = 0