请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F5259 主题中讨论的其他器件: MSP-FET
您好!
在 msp430F5259芯片组项目板上载代码时出现错误。
错误为("MSP430)
我从事闪存读/写操作,而我在 BSL 3上写入数据,并打开和关闭我的项目板和 MSP-FET 闪存仿真工具,这种错误是连续发生的。
在这里、我提供了我在芯片组中转储的代码、之后我得到了这个错误、我无法再次访问我的器件。
#include <msp430.h> #define Segment 1 char FW_ver = 2; char fw; char data[] = {0x07,0x01,0x00,0x02,0x74,0x00,0x42,0x43}; char value = 'B'; char pre_value; _Bool FW_update_flag = 0; void main(void) { WDTCTL = WDTPW+WDTHOLD; // write_seg1(data); read_segment(); write_Seg2(value, fw, FW_ver); if(FW_update_flag == 1){ update_fw(data); } __no_operation(); // Loop forever, SET BREAKPOINT HERE } void read_segment() { char *Flash_ptr1; // Flash pointer Flash_ptr1 = (char *)0x1801; // Initialize flash pointer pre_value = *Flash_ptr1; fw = pre_value; __no_operation(); } void write_seg1(char data[]) { unsigned int i; char * Flash_ptr2; // Initialize Flash pointer Flash_ptr2 = (char *) 0x1800; FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY+ERASE; // Set Erase bit *Flash_ptr2 = 0; // Dummy write to erase Flash seg FCTL1 = FWKEY+WRT; // Set WRT bit for write operation for (i = 0; i < 8; i++) { char pkt = data[i] ; *Flash_ptr2++ = pkt; // Write value to flash __no_operation(); } FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY+LOCK; // Set LOCK bit __no_operation(); } void write_Seg2(char value, char fw, char FW_ver) { if(fw != FW_ver) { __no_operation(); unsigned int i; char * Flash_ptr3; // Initialize Flash pointer Flash_ptr3 = (char *) 0x1600; SYSBSLC = FWKEY+SYSBSLPE; FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY+ERASE; // Set Erase bit *Flash_ptr3 = 0; // Dummy write to erase Flash seg FCTL1 = FWKEY+WRT; // Set WRT bit for write operation for(i = 0; i < (Segment*512); i++) { *Flash_ptr3++ = value; // Write value to flash __no_operation(); } FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY+LOCK; // Set LOCK bit __no_operation(); data[1] = FW_ver; FW_update_flag = 1; } } void update_fw(char data[]) { unsigned int i; char * Flash_ptr4; // Initialize Flash pointer Flash_ptr4 = (char *) 0x1800; FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY+ERASE; // Set Erase bit *Flash_ptr4 = 0; // Dummy write to erase Flash seg FCTL1 = FWKEY+WRT; // Set WRT bit for write operation for (i = 0; i < 8; i++) { char pkt = data[i] ; *Flash_ptr4++ = pkt; // Write value to flash } FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY+LOCK; // Set LOCK bit FW_update_flag = 0; }
任何人可以帮助我解决我的问题吗?
他会感激我的。