TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049C: 程序在运行时,希望在片内flash指定的位置读写30byte左右的数据。

Part Number:TMS320F280049COther Parts Discussed in Thread:C2000WARE

不希望Green Deng回答!!!希望其他的工程师能回复一下。

有两个问题:1,调用FlashAPI 时,是否需要把整个程序搬移到RAM中运行?

2,这里读写操作和bootloader操作有什么区别吗?

3,不要再发链接,也不要说官方例程里有。

Susan Yang:

不知道我是否理解了您的意思。若是没有正确理解的话,请您指出。

您现在是想将数据放到flash的指定位置?

若是需要将某个变量存放到某个特定的位置,则利用#pragma DATA_SECTION指令。

因为利用CCS进行芯片编程时,如果不指定变量的存储位置,那么编译器会自动给变量分配存储位置。

在下面的文档中有详细描述

https://www.ti.com/lit/ug/spru514w/spru514w.pdf 

,

dengji liu:

感谢您的解惑,但我要的不是这个操作,我现在是想把can通信接受到的一些机器设定值存在flash中,掉电后仍然可以保存。这些设定值可以通过上位机用can随时来修改。您说的那种方式是不可以任意修改已经存好的数据。

,

Susan Yang:

dengji liu 说:1,调用FlashAPI 时,是否需要把整个程序搬移到RAM中运行?

使用flash api时 需要进行以下操作

1 Copy the Flash initialization code from Flash to RAM    即拷贝flash的初始化代码

2 Copy the Flash API from Flash to RAM 

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/951668/faq-faq-on-flash-api-usage-for-c2000-devices 

这些您可以参考例程内的拷贝方法

C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f28004x\examples\flash 

dengji liu 说:我现在是想把can通信接受到的一些机器设定值存在flash中,掉电后仍然可以保存。

flash的话,上电不擦除的话,掉电是可以保存的

您可以使用下面的方法来写flash

// In this example, 0xFF+1 bytes are programmed in Flash Bank0 Sector6 // along with auto-generated ECC.

//// Fill a buffer with data to program into the flash.//for(i=0; i <= WORDS_IN_FLASH_BUFFER; i++){Buffer[i] = i;}for(i=0, u32Index = Bzero_Sector6_start;(u32Index < (Bzero_Sector6_start + WORDS_IN_FLASH_BUFFER)) &&(oReturnCheck == Fapi_Status_Success); i+= 8, u32Index+= 8){oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index, Buffer+i, 8,0, 0, Fapi_AutoEccGeneration);// Wait until the Flash program operation is overwhile(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);if(oReturnCheck != Fapi_Status_Success){// Check Flash API documentation for possible errorsExample_Error(oReturnCheck);}// Read FMSTAT register contents to know the status of FSM after// program command to see if there are any program operation related errorsoFlashStatus = Fapi_getFsmStatus();if(oFlashStatus != 0){//Check FMSTAT and debug accordinglyFMSTAT_Fail();}// Verify the programmed values.Check for any ECC errors.// The program command itself does a verify as it goes.// Hence program verify by CPU reads (Fapi_doVerify()) is optional.oReturnCheck = Fapi_doVerify((uint32 *)u32Index,4, Buffer32+(i/2),&oFlashStatusWord);if(oReturnCheck != Fapi_Status_Success){// Check Flash API documentation for possible errorsExample_Error(oReturnCheck);}}

其中代码内的参数 Bzero_Sector6_start 即 Start address in Flash for the data and ECC to be programmed

您可以自己选择存放的地址。

dengji liu 说:这些设定值可以通过上位机用can随时来修改。

修改的话,也是可以通过上面的代码来擦除后重新写这段flash

若是这段地址内的数据需要一直不擦除(即使重新烧录程序),则可以使用下图内的选项来设置

,

dengji liu:

感谢你的回答,susan yang,我目前就是这么处理的,但是有个问题,调用Example_CallFlashAPI这个函数,是否每次写入前都要清除整个section?我目前发现第一次数据可以写进去8个数据。我第二次在前8个数据的基础上接着写数据时,发现整个section,都被清除了。请问flash写之前的擦除section的操作是不是必须要步骤。还有写入的数据必须是32位的吗?

,

Susan Yang:

dengji liu 说:调用Example_CallFlashAPI这个函数,是否每次写入前都要清除整个section?

是的,您的理解是正确的。

Note that a sector should be erased before it can be reprogrammed.

,

dengji liu:

好的,谢谢。

,

Susan Yang:

不客气,很高兴能帮到您

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049C: 程序在运行时,希望在片内flash指定的位置读写30byte左右的数据。
分享到: 更多 (0)

© 2025 TI中文支持网   网站地图 鲁ICP备2022002796号-1