EmbeddedRelated.com
Forums
Memfault Beyond the Launch

Flash overwrite , no serial communication

Started by duemchen April 5, 2009
ez430-rf
I have overwrite my Flash (I think start from 0x10FF...)
Now the serial communication of my program do not run.
How can I reset to the original ?

Beginning Microcontrollers with the MSP430

You should have both the source code and the compiled code. They should be included in the CD of that eZ kit. TI website should have them too. Thus the Main-Flash can easily be re-stored.

But the Info-Flash contains calibration constants. Every chip is different!!! If erased, you have to do the calibration yourself.

Mine looks like this (just for reference, do not copy it):

@1000
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
78 56 34 12 00 5c 53 be 5d e7 6f 00 ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
c9 e1 e6 e8 f9 ff ff ff dd 8e 70 8e 64 8d 9c 86
q

--- In m..., "duemchen" wrote:
>
> ez430-rf
> I have overwrite my Flash (I think start from 0x10FF...)
> Now the serial communication of my program do not run.
> How can I reset to the original ?
>

Thanks for your answer (on sunday!)

On the cd is the wireless example with source and out.
address 0x8000...
But not the special info flash 0x1000... 0x10ff

Now I have "killed" the second flash by writeing 0x1000..0x10f0 becuase in this segment, you must erase the complete range 0x1000...0x10f0, if you will store new data.

I know then values. But i think, my write programm has a problem.
flashIst = 0x10F0; (in the lnk_msp.cmd)

extern char flashIst[15]; //0x10F0...0x10FF

char flashConst[] ={
139,
68,
172,
76,
225,
255,
255,
255,
221,
142,
111,
142,
96,
141,
167
};

void bahnToFlash(){
int i;
char *Flash_ptrA;
//char flashOrg[sizeof(flashIst)]; // merker f die alten werte
// sichern
for ( i= 0; i < sizeof(flashIst); i++) {
//flashOrg[i]= flashIst[i];
}
// ganzes segment lchen
Flash_ptrA = (char *)0x10C0;
FCTL3 = FWKEY + LOCKA; // Clear LOCK & LOCKA bits
FCTL1 = FWKEY + ERASE; // Set Erase bit, allow interrupts eei
*Flash_ptrA = 0; // Dummy write to erase Flash seg A
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
for ( i= 0; i < sizeof(flashIst); i++) {
*Flash_ptrA++ = flashConst[i];
}
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY + LOCKA + LOCK; // Set LOCK & LOCKA bit

}
Thank you
Wolfgang

--- In m..., "old_cow_yellow" wrote:
>
> You should have both the source code and the compiled code. They should be included in the CD of that eZ kit. TI website should have them too. Thus the Main-Flash can easily be re-stored.

As far as I know, there are 4 separate segments of Info-Flash in F2274. (D) 0x1000-0x103F, (C) 0x1040-0x107F, (B) 0x1080-0x10BF, and (A) 0x10C0-0x10FF. These segments can be individually erased without altering other segments.

TI cannot make the DCO, ADC, etc. to have identical characteristics from chip to chip. Thus they painstakingly calibrated every chip they produce one by one and store the calibration constants in Info-Flash-Segment-A (0x10C0-0x10FF). Some programs do not care about these calibration constants while some others may depend on them to run correctly. But even when a program does not need them, I do not see any reason to alter the TI factory calibration constants. There are three other Info-Flash-Segments other than Segment-A that can be used freely.

--- In m..., "duemchen" wrote:
>
> Thanks for your answer (on sunday!)
>
> On the cd is the wireless example with source and out.
> address 0x8000...
> But not the special info flash 0x1000... 0x10ff
>
> Now I have "killed" the second flash by writeing 0x1000..0x10f0 becuase in this segment, you must erase the complete range 0x1000...0x10f0, if you will store new data.
>
> I know then values. But i think, my write programm has a problem.
>
>
> flashIst = 0x10F0; (in the lnk_msp.cmd)
>
> extern char flashIst[15]; //0x10F0...0x10FF
>
> char flashConst[] ={
> 139,
> 68,
> 172,
> 76,
> 225,
> 255,
> 255,
> 255,
> 221,
> 142,
> 111,
> 142,
> 96,
> 141,
> 167
> };
>
> void bahnToFlash(){
> int i;
> char *Flash_ptrA;
> //char flashOrg[sizeof(flashIst)]; // merker f die alten werte
> // sichern
> for ( i= 0; i < sizeof(flashIst); i++) {
> //flashOrg[i]= flashIst[i];
> }
> // ganzes segment lchen
> Flash_ptrA = (char *)0x10C0;
> FCTL3 = FWKEY + LOCKA; // Clear LOCK & LOCKA bits
> FCTL1 = FWKEY + ERASE; // Set Erase bit, allow interrupts eei
> *Flash_ptrA = 0; // Dummy write to erase Flash seg A
> FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
> for ( i= 0; i < sizeof(flashIst); i++) {
> *Flash_ptrA++ = flashConst[i];
> }
> FCTL1 = FWKEY; // Clear WRT bit
> FCTL3 = FWKEY + LOCKA + LOCK; // Set LOCK & LOCKA bit
>
> }
>
>
> Thank you
> Wolfgang
>
>
>
>
>
> --- In m..., "old_cow_yellow" wrote:
> >
> > You should have both the source code and the compiled code. They should be included in the CD of that eZ kit. TI website should have them too. Thus the Main-Flash can easily be re-stored.
>


Memfault Beyond the Launch