请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: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(); }