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.

[参考译文] TMS320F28020:像 EEPROM 一样将应用数据写入闪存

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1128245/tms320f28020-writing-app-data-to-flash-like-an-eeprom

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

大家好、

我想使用板载闪存来存储一些应用变量、以便在下电上电后恢复这些变量。

此项目的 alpha 代码已交付给客户端进行评估、但在测试版发布之前将需要此内存存储功能。

我已经在 F28069和 F28379上完成了此操作、但我找不到 F2802x 系列的任何文档或示例代码。  SPRAB69明显不引用 F2802x。  我可以假设使用相同的 API 吗?

如果相同的 F28xxx 代码能够正常工作、我将跟进有关最低要求的问题、以便将此功能添加到我最完整的项目中。  为此保留了一个闪存扇区、但 RAM 有限。

谢谢、
Robin

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

    Robin、

    从闪存技术来看、F28020器件与 F28069相同、因此我看不到这在该器件上不起作用的技术原因。  让我们看看运行情况、但我怀疑少量 RAM 可能是该应用手册中未列出该器件的原因。  我可能需要做更多的研究、以了解我们可能需要做什么记忆切换。

    请告诉我您在尝试在您的器件中添加/安装此器件时看到的内容。

    最棒的

    Matthew

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

    您好、Matthew、

    我按照"Flash2802x_API_Quickstart.pdf"指南进行操作、我在这里找到:C:\ti\C2000Ware_4_01_00_00\libraries\flash_api\f2802x\docs。

    我在 main()空闲循环中调用 Flash_Program(),如下所示:

            case SOS:   //h Easter egg, not documented, SOS blink on LED
            {
                Uint16  Status;
                Uint32 Length = 4;
                FLASH_ST ProgStatus;
    
                GPIO_toggle(myGpio, RED_LED);///
                Write_Buffer_calVals[0] = 0xdead;
                Write_Buffer_calVals[1] = 0xbeef;
    
                EALLOW;
                Flash_CPUScaleFactor = SCALE_FACTOR;
                Flash_CallbackPtr = NULL;
                EDIS;
    
                calVals_Pointer = (Uint32 *)0x3F6000;   // Sector C
    
                EALLOW;
                DINT;
                EDIS;
    
                Status = Flash_Program((Uint16 *)calVals_Pointer,(Uint16 *)Write_Buffer_calVals,Length,&ProgStatus);
    
                EALLOW;
                EINT;
                EDIS;
    
                calVals_Pointer = (Uint32 *)0x3F6000;   // Sector C
                Read_Buffer_calVals[0] = *(calVals_Pointer++);
                Read_Buffer_calVals[1] = *(calVals_Pointer);
    
                out[0]  = (unsigned int)Read_Buffer_calVals[0] >> 0;
                out[1]  = (unsigned int)Read_Buffer_calVals[1] >> 0;
                out[2]  = (unsigned int)Read_Buffer_calVals[0] >> 0;
                out[3]  = (unsigned int)Read_Buffer_calVals[1];
                out[4]  = 0x0a;        // Line feed
                out[5]  = 0x0d;        // Carriage return
                out[6]  = 0x00;        // Null
    
                sciMasterTransmit((const char *)out);
            }
            break;
    

    在单步执行代码时观察反汇编窗口、 如此处所示、它看起来是从闪存运行、而不是从 RAM 运行:

    问题1:

    由于此函数(或宏)是闪存 API 库的一部分,如何将 memcpy()函数传递到 RAM?

    当我让代码运行时、它会产生以下源文件错误:

    我无法找到文件"Flash28_Prog.c"。

    问题2:

    在哪里可以找到此文件?

    谢谢、
    Robin

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

    新信息:

    我在项目中添加了"2802x_FlashAPI_BootROMSymbols_v2.01.lib"、现在闪存 API 函 数从 ROM 运行。

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

    Robin、

    这将是我的建议、因为这可以使用基于 ROM 的 API 节省大量 RAM。  此时是否仍有待处理的问题?

    最棒的

    Matthew

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

    感谢 Matthew 的帮助。

    因此、如果有人再次提出要求、您可以使用 TMS320F2820的板载闪存对应用变量进行非易失性存储。

    再次感谢!

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

    更正:有问题的器件为 :TMS320F28020

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

    感谢 Robin 的跟进、很高兴这能够满足您的应用需求。

    最棒的

    Matthew