您好!
我正在尝试将一些用户生成的设置保存到信息闪存中(该段从0x1000开始)、因为某些特定于器件的 TLV 数据也存在于该段的末尾(从0x13C0开始)、我们需要先读取该部分数据、然后将其保存回。
以下是我的代码:
uint8_t tlv[64];
uint8_t *Flash_ptr;
// Read TLV calibration data before erasing information memory
memcpy((void *)&tlv[0], (void*)TLV_START, sizeof(tlv));
// Save settings struct into flash or other persistent medium
Flash_ptr = (uint8_t *)SETTINGS_ADDR;
// Erase information memory
WDTCTL = WDTPW | WDTHOLD;
FCTL2 = FWKEY | FSSEL_1 | FN1 | FN3 | FN5; // MCLK/42 for Flash Timing Generator
while (FCTL3 & BUSY); // Make sure flash controller is not busy
FCTL3 = FWKEY; // Clear Lock bit
if(FCTL3 & LOCKSEG) { // If Info Seg is still locked
FCTL3 = FWKEY | LOCKSEG; // Clear LOCKSEG bit
}
FCTL1 = FWKEY | ERASE; // Set Erase bit
*Flash_ptr = 0; // Dummy write to erase info segment
while (FCTL3 & BUSY); // Make sure flash controller is not busy
FCTL3 = FWKEY;
if(FCTL3 & LOCKSEG) { // If Info Seg is still locked
FCTL3 = FWKEY | LOCKSEG; // Clear LOCKSEG bit
}
FCTL1 = FWKEY | WRT;
memcpy((void *)SETTINGS_ADDR, &settings, sizeof(Settings));
// Save TLV calibration data back into flash
memcpy((void *)TLV_START, &tlv[0], sizeof(tlv));
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY | LOCKSEG; // Set LOCK bit
使用此代码、一旦运行此块代码、TLV 数据将始终被擦除、同时成功保存设置。 但是、如果我注释掉该行以保存设置、则可以成功保存回 TLV 数据。
我的编译器版本为:TI v20.2.7 LTS。 几年前、非常相似的代码能够按预期运行。
我应该错过什么? 请提供建议、谢谢。