打算在28377D上 用flash api向flash中写入数据,擦除flash不成功。程序下载到flash中,FLASH api库复制到RAM中运行。仿真时能正常擦除和写入,断开仿真单独上电时擦除失败。
cmd文件中flash api对应部分:
Flash28_API: {
-lF021_API_F2837xD_FPU32.lib(.text)
-lF021_API_F2837xD_FPU32.lib(.ebss)
} LOAD = FLASHA,
RUN = RAMGS14,
LOAD_START(_Flash28_API_LoadStart),
LOAD_END(_Flash28_API_LoadEnd),
RUN_START(_Flash28_API_RunStart),
LOAD_SIZE(_Flash28_API_LoadSize),
PAGE = 0
程序开始时把flash api 库复制到RAMGS14中:
memcpy(&Flash28_API_RunStart, &Flash28_API_LoadStart,(uint32_t)&Flash28_API_LoadSize);
flash api初始化的相关代码:
EALLOW;
FlashPumpSemaphoreRegs.PUMPREQUEST.all=0x5a5a0002;
Flash0EccRegs.ECC_ENABLE.bit.ENABLE = 0x0;
oReturnCheck=Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS,200);
EDIS;
用Fapi_issueAsyncCommandWithAddress函数擦除一个sector,然后用Fapi_doBlankCheck检查是不是已经擦除
在连接仿真器调试的时候,能够擦除成功。但是断开仿真器,重新上电后,擦除失败。
Eric Ma:
先检查一下断开仿真器的时候,芯片有没有跑到main.
仿真和脱机在软件上并没有太多差别。
ERIC
打算在28377D上 用flash api向flash中写入数据,擦除flash不成功。程序下载到flash中,FLASH api库复制到RAM中运行。仿真时能正常擦除和写入,断开仿真单独上电时擦除失败。
cmd文件中flash api对应部分:
Flash28_API: {
-lF021_API_F2837xD_FPU32.lib(.text)
-lF021_API_F2837xD_FPU32.lib(.ebss)
} LOAD = FLASHA,
RUN = RAMGS14,
LOAD_START(_Flash28_API_LoadStart),
LOAD_END(_Flash28_API_LoadEnd),
RUN_START(_Flash28_API_RunStart),
LOAD_SIZE(_Flash28_API_LoadSize),
PAGE = 0
程序开始时把flash api 库复制到RAMGS14中:
memcpy(&Flash28_API_RunStart, &Flash28_API_LoadStart,(uint32_t)&Flash28_API_LoadSize);
flash api初始化的相关代码:
EALLOW;
FlashPumpSemaphoreRegs.PUMPREQUEST.all=0x5a5a0002;
Flash0EccRegs.ECC_ENABLE.bit.ENABLE = 0x0;
oReturnCheck=Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS,200);
EDIS;
用Fapi_issueAsyncCommandWithAddress函数擦除一个sector,然后用Fapi_doBlankCheck检查是不是已经擦除
在连接仿真器调试的时候,能够擦除成功。但是断开仿真器,重新上电后,擦除失败。
Chunlin Song:
回复 Eric Ma:
能跑到main,程序正常运行。调试的时候擦除正常,看不出来问题。我就用串口把结果发出来了,串口数据收发都正常。
芯片肯定是跑程序了。就是擦除FLASH不成功。
另外 TI有没有28377D的flash api例子啊,我再ControlSuite里找不到
打算在28377D上 用flash api向flash中写入数据,擦除flash不成功。程序下载到flash中,FLASH api库复制到RAM中运行。仿真时能正常擦除和写入,断开仿真单独上电时擦除失败。
cmd文件中flash api对应部分:
Flash28_API: {
-lF021_API_F2837xD_FPU32.lib(.text)
-lF021_API_F2837xD_FPU32.lib(.ebss)
} LOAD = FLASHA,
RUN = RAMGS14,
LOAD_START(_Flash28_API_LoadStart),
LOAD_END(_Flash28_API_LoadEnd),
RUN_START(_Flash28_API_RunStart),
LOAD_SIZE(_Flash28_API_LoadSize),
PAGE = 0
程序开始时把flash api 库复制到RAMGS14中:
memcpy(&Flash28_API_RunStart, &Flash28_API_LoadStart,(uint32_t)&Flash28_API_LoadSize);
flash api初始化的相关代码:
EALLOW;
FlashPumpSemaphoreRegs.PUMPREQUEST.all=0x5a5a0002;
Flash0EccRegs.ECC_ENABLE.bit.ENABLE = 0x0;
oReturnCheck=Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS,200);
EDIS;
用Fapi_issueAsyncCommandWithAddress函数擦除一个sector,然后用Fapi_doBlankCheck检查是不是已经擦除
在连接仿真器调试的时候,能够擦除成功。但是断开仿真器,重新上电后,擦除失败。
Seven Han:
回复 Chunlin Song:
例程在C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_examples_Dual\flash_programming
打算在28377D上 用flash api向flash中写入数据,擦除flash不成功。程序下载到flash中,FLASH api库复制到RAM中运行。仿真时能正常擦除和写入,断开仿真单独上电时擦除失败。
cmd文件中flash api对应部分:
Flash28_API: {
-lF021_API_F2837xD_FPU32.lib(.text)
-lF021_API_F2837xD_FPU32.lib(.ebss)
} LOAD = FLASHA,
RUN = RAMGS14,
LOAD_START(_Flash28_API_LoadStart),
LOAD_END(_Flash28_API_LoadEnd),
RUN_START(_Flash28_API_RunStart),
LOAD_SIZE(_Flash28_API_LoadSize),
PAGE = 0
程序开始时把flash api 库复制到RAMGS14中:
memcpy(&Flash28_API_RunStart, &Flash28_API_LoadStart,(uint32_t)&Flash28_API_LoadSize);
flash api初始化的相关代码:
EALLOW;
FlashPumpSemaphoreRegs.PUMPREQUEST.all=0x5a5a0002;
Flash0EccRegs.ECC_ENABLE.bit.ENABLE = 0x0;
oReturnCheck=Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS,200);
EDIS;
用Fapi_issueAsyncCommandWithAddress函数擦除一个sector,然后用Fapi_doBlankCheck检查是不是已经擦除
在连接仿真器调试的时候,能够擦除成功。但是断开仿真器,重新上电后,擦除失败。
mangui zhang:
回复 Chunlin Song:
是不是时间差异的问题 按理说仿真应该是在RAM中跑 更快
flash执行效率更低一些