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
Ich hatte das selbe Problem, wenn ich mich richtig erinnere, musste ich PROTECT_BITS = 1 definieren. Dann hats funktioniert.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.