Part Number:MSP430I2031
在做MSP430I2x系列程序flash数据存储时,写入数据和读出数据不一致。新的单片机写入一次后,读出来的数据是正确的,再次写入新的数据后,读出来就不正确了!
Susan Yang:
zhaoxiang wang 说:写入数据和读出数据不一致
能否详细说明一下或者给出相关截图?
另外建议试一下TI例程: https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_MSP430_node
,
zhaoxiang wang:
void write_flash(void) { unsigned char *Flash_ptr; // Flash pointer unsigned char i;
Flash_ptr = (unsigned char *)0x1080; // Initialize Flash pointer _DINT(); WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer FCTL2 = FWKEY | FSSEL_1 | FN1 | FN3 | FN5; // MCLK/42 for Flash Timing Generator
if(FCTL3 & LOCKSEG) // Test LOCKSEG { FCTL3 = FWKEY | LOCKSEG; // No, unlock Info Segment,Clear LOCKSEG bit //if(FCTL3 & LOCKSEG) // Test LOCKSEG //{FCTL3 = FWKEY | LOCKSEG;} } FCTL1 = FWKEY | WRT; // Set WRT bit for write operation
for (i = 0; i < 17; i++) // Write value to flash { //if(FCTL3 & LOCKSEG) // Test LOCKSEG //{FCTL3 = FWKEY | LOCKSEG;} *Flash_ptr++ =flash_data[i]; }
FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY | LOCKSEG; // Set LOCKSEG bit _EINT(); }
//————
void read_flash(void){ uchar i; unsigned char *Flash_ptr; // Flash pointer Flash_ptr = (unsigned char *) 0x1080; // Initialize Flash pointer SegA for(i=0;i<17;i++) { flash_data[i]=*Flash_ptr++ ; // Read value from flash }}
flash_data[0]第一次写0x17;读出来没有问题,再把flash_data[0]=0x49写入,读出来是0x07
,
Susan Yang:
谢谢您的反馈。
您的程序和我之前给出的链接内的例程基本是相同的功能。建议您将
_DINT();WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerFCTL2 = FWKEY | FSSEL_1 | FN1 | FN3 | FN5; // MCLK/42 for Flash Timing Generator
之类的代码放到main函数内
zhaoxiang wang 说:flash_data[0]第一次写0x17;读出来没有问题,再把flash_data[0]=0x49写入
您写入后直接使用CCS的View–>Memory Browser 来看一下是否成功写入
另外如数据表和用户指南中所述,当擦除INFO段时,TLV值将被擦除。
一般不建议将应用程序数据存储在INFO段中。建议将其存储在MAIN内存段中。
如果必须使用INFO,请将读出TLV值并将其存储在RAM中,然后将其与应用程序数据一起重新写回。
,
zhaoxiang wang:
您好,根据您说的方法,将WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerFCTL2 = FWKEY | FSSEL_1 | FN1 | FN3 | FN5; // MCLK/42 for Flash Timing Generator调整到main函数内了,写入后查看INFO Memory,与预定的写入值完全不一致,程序中并没有设定擦除程序,查看INFO,TLV值没有问题。按照数据表和用户指南,INFO不需要擦除可直接读写的,问题还是存在。以前用了很多MSP430F系列的都没有出现过这个问题。
,
Susan Yang:
请您看一下下面链接的讨论
https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/930766/ccs-msp430i2041-msp430-i2041-cannot-write-to-flash
我手边没有这个板子,所以不太方便为您测试。
,
zhaoxiang wang:
Susan Yang:多谢你的帮助,我看了你转发的链接,结合我测试的结果,这块MCU flash读写这块的确不好用,写flash不能写1,只能把1变成0。一旦一个flash字节全部为0,它就会一直保持这种状态,整体改写需要擦除。这和F系列MCU的相差太大,不能直接当EEPROM使用的。根据链接说的原理,我再修正软件测试一下看。
,
Susan Yang:
好的,期待您的反馈。
,
zhaoxiang wang:
问题已解决,这款mcu的flash操作比较麻烦,产品线不太好。
,
Susan Yang:
谢谢反馈。I系列是会和其他系列有一些区别