Forum: Mikrocontroller und Digitale Elektronik M16C Block_1 vom Flash


von Maik (Gast)


Lesenswert?

Hallo...ich habe einen Mc16C62P und will Daten im BlockA und Block1 des 
Flash ablegen. Ich habe auf der Seite http://www.m16c.de/ folgende 
Vorlage verwendet: Simple Flash API for CPU-Rewrite Operations. Diese 
sollte laut beschreibung daten in alle möglichen blöcke ablegen können.

Das Programm funktioniert ohne Probleme wenn ich daten im BlockA 
schreibe. Sobald ich aber in einen anderen Block schreibe funktioniert 
dies nicht. Ich habe sowohl den EW1 und EW0-Mode getestet, aber das 
selbe ergebnis. Danach habe die ganze API mal ausfühlich debugged, aber 
ich bekomme einfach nicht raus wo der fehler liegt, zumal alle pointer 
usw. auf korrekte werte zeigen.

Muss man für einen anderen Block zusätzlich Veränderungen in 
irgendwelchen Registern vornehmen?!?

vielen dank für eure hilfe im voraus! Maik

von Max (Gast)


Lesenswert?

Ich hatte das selbe Problem, wenn ich mich richtig erinnere, musste ich 
PROTECT_BITS = 1 definieren. Dann hats funktioniert.

von crazy horse (Gast)


Lesenswert?

Hm, hast du externen RAM dran? Dann funktioniert sinnigerweise im 
EW1-Modus das externe Speicherinterface nicht mehr.
Ich benutze
#include     "Flash_API_M16C.c"

temp_char = FlashErase( BLOCK_7 ); 
for(i=0;i<3600;i++)FlashWriteBuffer[i]=Betriebsparameter.AmplitudenKennl 
inie[i];
temp_char = FlashWrite( 
FLASH_PTR_TYPE)0xD0000,(BUF_PTR_TYPE)FlashWriteBuffer, 14400);

Solange allerdings FlashWriteBuffer im ext.RAM lag, funktionierte es 
nicht.

von Max (Gast)


Lesenswert?

Ich habe kein ext. RAM dran, ich verwende die API um ein Update der 
Applikation zu ermöglichen. Soweit ich mich erinnere, hat das Löschen 
nicht sauber funktioniert, als PROTECT_BITS = 1 war. Block A ging wie im 
Sample, die anderen Blöcke nicht.
Ich habe nie mehr als 1024 Bytes auf einmal geflasht. Eventuell solltest 
du mal versuchen, den Schreibvorgang in mehrere Pages aufzuteilen.

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.