您好!
我正在尝试将一些用户生成的设置保存到信息闪存中(该段从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。 几年前、非常相似的代码能够按预期运行。
我应该错过什么? 请提供建议、谢谢。