Hallo, Ich hab mich jetzt schon einige Zeit mit dem LPC11c24 bzw. C14 beschäftigt. Im großen und ganzen läuft es auch gut. Ich habe einen sehr rudimentären CANopen Slave programmiert, der Analogwerte aufnimmt, skaliert und als PDO versendet. Jetzt zu meinem Problem: Ich möchte die Parameter der Skalierung durch SDOs verändern habe aber keine Ahnung wie ich die übertragenen Werte speichern kann, so das sie nach dem Neustart noch da sind. Es wäre super wenn mir jemand sagen könnte wie man das bei einem solchen ARM Controller üblicherweise macht. Danke und Gruß Scheldor
Da der kein EEPROM hat muss es im Flash gespeichert werden. Hierzu gibt es laut Manual im ROM eine Library die man direkt aufrufen kann: IAP Command Summary: Prepare sector(s) for write operation Copy RAM to flash ...
Application Note zur EEPROM Emulation googlen. Damit kannst du mit einem Funktionsaufruf 16 Bit Werte permanent wegschreiben. Die hinterliegende Emulation sorgt dafür, dass die Werte auf eine Flash-Page hintereinander weggeschrieben werden. Ist die Page voll werden die letzten Werte gesammelt und auf eine neue Page geschrieben und die alte Page gelöscht. Dann geht das Prinzip von vorne los.
Beachte, dass während des Speicherns der Werte in den Flash der Controller lahm gelegt ist. Steuert der also irgendeine Anlage, sollte die zuvor in einen "sicheren" Zustand gebracht werden...
Danke für die schnellen Antworten. Leider habe ich keine Applicationnote/Lib für meinen Controller gefunden. Also muss ich das wohl selbst machen ;) Wenn ich die Theorie richtig verstanden habe läuft das emulieren in etwa so ab: Ich vergebe eine ID für eine VAR. Die id mit Daten schreibe ich in die erste Zeile der Page. Jedes weitere Datum schreibe ich darunter. Auch ein neueres Datum, von einer Var/ID die bereits gespeichert ist, schreibe ich unter alles drunter. am Ende der Page suche ich von unten nach oben die aktuellsten werte und schreibe diese z.b. auf eine weitere Page. Die erste kann ich dann löschen. Die Daten suche ich von unten nach oben um immer die aktuellste zu finden. Ich hoffe bis hier stimmt das einigermaßen. Jetzt bin ich mir noch etwas unsicher was die IAP betrifft: Laut Datenblatt muss ich einen buffer im SRAM haben, den ich in den Flash kopiere. Die Start Adresse des Flash definiere ich. Vor dem schreiben muss ich das mit Prepare... vorbereiten. Wie läuft das mit den Sectorparametern? Kann ich so nur eine Zeile bzw. die Daten für eine Variable schreiben? Wenn ja, woher weiß ich welches der nächste sector ist? Ich hoffe man kann meine Fragen noch verstehen :D PS. Wie mache ich dem Teil eigentlich klar das der buffer im SRAM sein soll ? Vielen Dank für eure Hilfe. Gruß Scheldor
:
Bearbeitet durch User
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.