请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430I2020 您好,
我犯了闪存写入错误,然后MCU无法重置。
我可能会擦除一些重要值,因此无法重置MCU。
我可以通过CCS将新程序加载到MCU。
但它无法再工作了。
如果我通过CCS运行debug,它将无法运行和暂停。
您能否帮助挽救此MCU?
#define FLASH_INFO_START 0x1060
#define MAX_FLASH_INFO 928
#define FLASH_INFO_SIZE sizeof(Flash_I)
#define SIZE_OF_TYPE_NOT_LARGE(type,size) extern char _VerifySize##type[1/(size>sizeof(type))]
#define SIZE_OF_TYPE_IS_MULT_OF(type,size) extern char _VerifySize##type[1/((sizeof(type)%size)==0)]
/* check if struct <= MAX_FLASH_INFO*/
SIZE_OF_TYPE_NOT_LARGE(Flash_I,MAX_FLASH_INFO);
SIZE_OF_TYPE_IS_MULT_OF(Flash_I,2);
#define CheckSegLock() (FCTL3 & LOCKSEG)
#define ChangeSegLock() FCTL3 = FWKEY | LOCKSEG
#define EnWriteFlash() FCTL1 = FWKEY | SEGWRT
#define EnSegEraseFlash() FCTL1 = FWKEY | ERASE
#define EraseSegFlash() FlashP[0]=0
#define DisWriteFlash() FCTL1 = FWKEY
//#define InitFram() FramDisWPROT()
__always_inline static void InitFlash()
{
FCTL2 = FWKEY | FSSEL_1 | FN1 | FN3 | FN5;
}
__always_inline static void ClrSegLock()
{
if (CheckSegLock())
ChangeSegLock();
}
void FlashWriteAll (void)
{
uint16_t i;
uint8_t *FlashP;
FlashP = (uint8_t *)(&Flash_IP);
ClrSegLock();
// EnSegEraseFlash();
//EraseSegFlash();
//FlashReadAll();
EnWriteFlash();
for(i=0;i<FLASH_INFO_SIZE;i++)
FlashP[i]=FlashBuf[i];
DisWriteFlash();
ChangeSegLock();
}