TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430I2031: flash写读数据不一致

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系列是会和其他系列有一些区别

赞(0)
未经允许不得转载:TI中文支持网 » MSP430I2031: flash写读数据不一致
分享到: 更多 (0)