你(们)好。
我尝试使用 F021 API 擦除闪存、但在擦除检查期间失败了。 (已用:Fapi_issueAsyncCommandWithAddress (Fapi_EraseSector,(uint32_t *) u32EraseStart)
通过使用存储器浏览器检查擦除扇区的结果、位翻转被确认。 (0xFFFFFFFD、0xFFFFFFBF 等)
RM44和 RM46没有问题。
我在论坛上提到了一个类似案例的解决方案、但却发生了不启动等副作用。
如何解决此问题?
我的 link.cmd 文件是:
/*--------------------------------------------------------------------------------------------------------------------------------------- */
/*内存映射*/
#define Vector_START_ADDR 0x00000000
#define FLASH_MAX_SIZE 0x00400000
#define Vector_SIZE 0x00000020
#define FLASH_API_SIZE 0x0000FFE0 /**/
#define FALSH_API_START_ADDR Vector_START_ADDR + Vector_SIZE
#define FLASH0_START_ADDR Vector_size + FLASH_API_SIZE
#define FLASH1_START_ADDR 0x00200000
#define FLASH0_SIZE FLASH1_START_ADDR -(vector_size + FLASH_API_SIZE)
#define FLASH1_SIZE FLASH_MAX_SIZE - FLASH1_START_ADDR
#define STACK_START_ADDR 0x08000000 /**/
#define STACK_SIZE 0x00006000 /* 4KB x 6 (SVC、IRQ、FIQ、SYS、ABT、 UNDEF、用户)*/
#define RAM_START_ADDR STACK_START_ADDR + STACK_SIZE /*/
#define RAM_SIZE (0x00080000 - STACK_SIZE)/* 512KB - STACK_SIZE */
#define EEPROM_START_ADDR 0xF0200000
#define EEPROM_SIZE 0x20000
内存
{
/*用户代码开始(2)*/
/*用户代码结束*/
向量(X):origin=vector_start_adDR length=vector_size
FLASH_API (RX):origin=FALSH_API_START_ADDR length=FLASH_API_SIZE
FLASH0 (RX):origin=FLASH0_start_adDR length=FLASH0_size vfill=0xFFFFFFFF
FLASH1 (RX):origin=FLASH1_START_ADDR length=FLASH1_SIZE
stacks (RW):origin=stack_start_adDR length=stack_size
RAM (RW):origin=RAM_START_ADDR length=RAM_SIZE
EEPROM (RW):origin=eeprom_start_adDR length=eeprom_size
/*编译错误
ecc_vectors : origin=0xF0400000 length=0x000004 ecc={algoR5F021、input_range=vectors}
ECC_FLASH_API : origin=0xF0400004 length=0x001FFC ECC={ algoR5F021, input_range=flash_api }
ECC_FLASH0 : origin=0xF0402000 length=0x03e000 ECC={algoR5F021、input_range=FLASH0}
ECC_FLASH1 : origin=0xF0440000 length=0x040000 ECC={algoR5F021、input_range=FLASH1}
*/
/*用户代码开始(3)*/
/*用户代码结束*/
}
/*编译错误
ECC
{
algoR5F021:address_mask = 0x003FFFF8
汉明_MASK = R4
奇偶校验_MASK = 0x0c
镜像= F021
}
*/
/*
VECTORS (X):origin=0x00000000 length=0x00000020
FLASH0 (RX):origin=0x00000020 length=0x001FFFE0
FLASH1 (RX):origin=0x00200000 length=0x00200000
堆栈(RW):origin=0x08000000 length=0x00006000
RAM (RW):origin=0x08006000 length=0x0007a000
*/
/*用户代码开始(4)*/
/*用户代码结束*/
/*------------------ */
/*段配置*/
部分
{
excpt_vecs:start (ulFlashStartAddr){}palign=8 >向量
.intvecs :{}> vectors /* Vector table section */
.text:{}palign =8 > FLASH0 | FLASH1 /*程序代码*/
.const:{}palign =8 > FLASH0 | FLASH1 /*已初始化的常量对象(字符串常量、声明为常量的变量)*/
.cinit:{}palign =8 > FLASH0 | FLASH1 /*在启动时初始化 C 全局变量*/
.pinit :{} palign=8 > FLASH0 | FLASH1
.bss :{}> RAM /*未初始化的对象(全局变量)*/
.data :{}> RAM /*初始化的非常量对象(全局变量)*/
.sysmem:{}> RAM /*动态内存分配池*/
闪存 API:
{
..\Debug\package\hc\source\f021Control.obj (.text)
..\Debug\package\hc\source\sciControl.obj (.text)
..\Debug\package\hm\source\consoleManager.obj (.text)
--library =..\package\F021_LIB\F021_API_CortexR4_LE_L2FMC_V3D16.lib < FlashStateMachine.IssueFsmCommand.obj
FlashStateMachine.SetActiveBank.obj
FlashStateMachine.InitializeFlashBanks.obj
FlashStateMachine.EnableMainSectors.obj
FlashStateMachine.IssueFsmCommand.obj
FlashStateMachine.ScaleFclk.obj
FlashStateMachine.EnableEepromSectors.obj
init.obj
utilities.CalculateEcc.obj
utilities.WaitDelay.obj
utilities.CalculateFletcher.obj
Read.MarginByByByByByByBybe.obj
Read.Common.obj
Read.FlushPipele.obj
Read.WdService.obj
ASYNC.WithAddress.obj
program.obj >(.text)
}palign=8、load = flash_api、run = 0x8070000、load_start (API_load)、run_start (API_run)、 大小(API_SIZE)
/*用户代码开始(5)*/
/*用户代码结束*/
/*用户代码开始(6)*/
/*用户代码结束*/
}
/*--------------------------------------------------------------------------------------------------------------------------------------- */
祝你一切顺利。
基因。

