Hallo Zusammen, Habe schon hier im Forum gesucht, habe auch vor ein paar Tagen meine Frage in einem anderen Thread mit ähnlicher Thematik gepostet (Beitrag "xc866 indirekt adressierbaren speicher in C beschreiben"), aber leider noch keine Antwort darauf erhalten.... deshalb versuch ichs nochmal so: Ich benötige bei einem Infineon XC888 einen Speicher für Kalibrierwerte, welcher während des Programmablaufs beschrieben werden kann und nach dem Reset noch erhalten bleibt (oder wenn die Spannung fehlt), also einen EEPROM. Ich habe mir mal das EEPROM- Manual von Infineon angeschaut, dort gibt es bereits einen FlashHandler, mit welchem man in den D-Flash Speicher des XC888 schreiben kann, alles auf C- Basis. Ich werde leider aus den Beispielen überhaupt nicht schlau - ich möchte einfach nur wissen, mit welcher Funktion ich einen Wert (8 oder 16 Bit) in den D-Flash speichern kann und wie ich diesen Wert wieder auslesen kann. Hat hier schonmal jemand Erfahrung mit dem FlashHandler gemacht oder gibt es vllt. sogar einfachere Methoden, um eine Variable beim XC888 nicht flüchtig abzuspeichern? Danke vorab für Eure Hilfe! Gruß
Es scheint wohl keiner Bescheid zu wissen... da antworte ich mir doch mal am besten selber ;-) Habe es nach langem Versuchen nun hinbekommen.... Es gibt zunächst beim XC888 nur einen Flash Speicher und keinen EEPROM- man muss also immer einen ganzen Sektor vor dem Zugriff löschen. Zudem können keine einzelnen Bytes beschrieben werden sondern immer nur eine "Wordline" (32 Bytes). In den Beispielroutinen von Infineon ist ein Flash- Handler enthalten, der das Beschreiben des D-Flashs ermöglichen soll.... allerdings ist die Dokumentation absolut chaotisch.... Ich habe mir nun ein eigenes kleines Testprogramm auf Basis des Flash- Handlers erstellt. Hier wird bei jedem Controller- Neustart ein Wert im Speicher erhöht und als Binärzahl an Port 3 (LEDs am Hitex Easykit) ausgegeben. Um in den Flash schreiben zu können, muss man wie folgt vorgehen: 1. Warten, bis der Speicher bereit für einen Zugriff ist (Funktion FLASH_Ready(Speichersektor) 2. Speicher Auslesen und zwischenspeichern, falls man die Werte noch braucht 3. Speicher löschen (Funktion FLASH_Erase(Speichersektor,0)) 4. Warten, bis der Speicher bereit ist (Flash_Ready()) 5. In den "Wordline- Buffer" (char WLBuf[32]) zu Speichernde Daten übertragen 6. Flash Programmieren (Funktion FLASH_Prog(Zeiger auf Adresse)) 7. Warten, bis der Speicher bereit ist (wenn man danach gleich wieder drauf zugreifen will) Ich hänge das Programm mal an... ist mit DAVE und Keil erstellt. Gruß
Vielen Dank für die Anleitung zum Flashen des XC886. Ich habe das Programm auf DAVE-Bench umgeschrieben : Bei der Main Datei ist darauf zu achten , das die Lösch- und Programmierfunktion bis zu 104 mSek benötigen und die READY Abfrage bei mir nicht immer richtig funktionierte . Was jedoch immer problemlos geht , ist eine Warteschleife von min. 105 mSek .
Авто хамер н4 ремонт и диагностика являются одним из направлений московского автотехцентра. Осуществляются все существующие вопросы с использованием новых технологий, а также огромного навыка.
Es funktioniert teilweise... Das liegt unter anderem daran dass bei mir die FLASH_Erase-Funktion den Flash-Sector nicht löscht. Der Wert wird bei mir immer wie folgt hochgezählt: 0x01 0x03 0x0F 0x13 0x13 ... einen kleinen Schönheitsfehler habe ich im Code schon gefunden. Der Löschaufruf sollte so aussehen: FLASH_Erase(SEC0,0); und nicht FLASH_Erase(DFLASH0, 0); der erste Parameter ist der zu löschende Sector im DFLASH0 und der zweite Parameter der des DFLASH1. Aber das kann nicht mein Problem sein. Warum wird der Sector nicht gelöscht und warum löscht der Code Bits beim schreiben (0x0F->0x13)? Ich habe auch schon ein 500ms Timeout hinter den besagten Funktion ausprobiert - das gleiche.
also es funktionierte nur wenn ich folgenden Löschbefehl benutze. FLASH_Erase(SECALL, 0); Also muss irgendwas nicht stimmen.. durch ausprobieren habe ich herausgefunden dass anscheinend 0xA000 im Sektor 8 liegt. [FLASH_Erase(SEC8, 0); funktioniert auch (bei all meinen XC800 Easy Kits)]... wie kann das sein??? Das passt doch nicht mit der Doku zusammen!!!
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.