Forum: Mikrocontroller und Digitale Elektronik Beim c8051f120 Daten ins Flash schreiben / lesen


von Markus (Gast)


Lesenswert?

Hallo uC_ler,


Ich programmiere gerade einen C8051F120 von Silabs.

Im Moment weiß ich noch nicht wie ich mit der Silabs IDE Daten ins Flash 
an eine definierte Adresse schreiben und bei Bedarf wieder auslegen 
kann.

Hat das jemand schon gemacht?

Vielen Dank

von Bernd N (Gast)


Lesenswert?

Was meinst Du damit ? Flash als EEPROM Area ?

von Bastler (Gast)


Lesenswert?

Bei Nutzung des Flash als EEPROM muss immer eine ganze Page gelöscht 
werden, einzlne Bytes gehen nicht. Geschrieben werden können Sie schon.

Denke das hilft!

/*********************************************************************** 
***
  ucFlashRead
************************************************************************ 
**/

unsigned char ucFlashRead (unsigned int addr)
{
   bit EA_SAVE = EA;                   // Preserve EA
   char code * data pread;             // FLASH read pointer
   unsigned char byte;

   WDT_RESET;

   EA = 0;                             // Disable interrupts

   pread = (char code *) addr;

   byte = *pread;                      // Read the byte

   EA = EA_SAVE;                       // Restore interrupts

   return byte;
}


/*********************************************************************** 
***
  vFlashWrite
************************************************************************ 
**/

void vFlashWrite (unsigned int addr, char byte)
{
   bit EA_SAVE = EA;                   // Preserve EA
   char xdata * data pwrite;           // FLASH write pointer

   WDT_RESET;

   EA = 0;                             // Disable interrupts

   VDM0CN = 0xA0;                      // Enable VDD monitor and high 
threshold

   RSTSRC = 0x02;                      // Enable VDD monitor as a reset 
source

   pwrite = (char xdata *) addr;

   FLKEY  = 0xA5;                      // Key Sequence 1
   FLKEY  = 0xF1;                      // Key Sequence 2
   PSCTL |= 0x01;                      // PSWE = 1 which enables writes

   VDM0CN = 0xA0;                      // Enable VDD monitor and high 
threshold

   RSTSRC = 0x02;                      // Enable VDD monitor as a reset 
source

   *pwrite = byte;                     // Write the byte

   PSCTL &= ~0x01;                     // PSWE = 0 which disable writes

   EA = EA_SAVE;                       // Restore interrupts
}


/*********************************************************************** 
***
  vFlashPageErase
************************************************************************ 
**/

void vFlashPageErase (unsigned int addr)
{
   bit EA_SAVE = EA;                   // Preserve EA
   char xdata * data pwrite;           // FLASH write pointer

   WDT_RESET;

   EA = 0;                             // Disable interrupts

   VDM0CN = 0xA0;                      // Enable VDD monitor and high 
threshold

   RSTSRC = 0x02;                      // Enable VDD monitor as a reset 
source

   pwrite = (char xdata *) addr;

   FLKEY  = 0xA5;                      // Key Sequence 1
   FLKEY  = 0xF1;                      // Key Sequence 2
   PSCTL |= 0x03;                      // PSWE = 1; PSEE = 1


   VDM0CN = 0xA0;                      // Enable VDD monitor and high 
threshold

   RSTSRC = 0x02;                      // Enable VDD monitor as a reset 
source
   *pwrite = 0;                        // Initiate page erase

   PSCTL &= ~0x03;                     // PSWE = 0; PSEE = 0

   EA = EA_SAVE;                       // Restore interrupts
}

von Bernd N (Gast)


Lesenswert?

Das wäre auch meine Antwort gewesen :-) aber

>> weiß ich noch nicht wie ich mit der Silabs IDE Daten ins Flash an eine
>> definierte Adresse schreiben...

Mh, mit der Silabs IDE ?

von Ralf (Gast)


Lesenswert?

Was du brauchst ist das Handbuch-Kapitel über die Vergabe fester 
Adressen von Variablen für deinen Compiler =)

Ralf

von Ralf (Gast)


Lesenswert?

Und natürlich das Datenblatt...

Ralf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.