Hallo Leute, zunächst ein paar Infos: Hardware: phyCORE-XC167 - Prozessor: Infineon XC167CI-16F - Flash-Speicher: AM29F800BB(-70EF) Programmiertool: Keil ULINK2 Entwicklungsumgebung: Keil µVision3 Ich versuche mit Keil µVision3 über den Keil ULINK2 Adapter den Flashspeicher des phyCORE-XC167 zu programmieren, da dieser standartmäßig aus dem externen Flash Speicher startet. Mit folgenden Routinen fuktioniert es: int EraseBlock (unsigned long adr) { // Start Erase Sector Command HVAR(unsigned short, base | 0xAAA) = 0xAA; //for byte mode: AAA HVAR(unsigned short, base | 0x554) = 0x55; // 554 HVAR(unsigned short, base | 0xAAA) = 0x80; // AAA HVAR(unsigned short, base | 0xAAA) = 0xAA; // AAA HVAR(unsigned short, base | 0x554) = 0x55; // 554 HVAR(unsigned short, adr) = 0x30; } int ProgramBlock (unsigned long adr, void near *buf) { unsigned int cnt; for (cnt = 0; cnt < 64; cnt++) { // Start Program Command HVAR(unsigned short, base | 0xAAA) = 0xAA; //for byte mode: AAA HVAR(unsigned short, base | 0x554) = 0x55; // 554 HVAR(unsigned short, base | 0xAAA) = 0xA0; // AAA HVAR(unsigned short, adr) = *((unsigned short near*) buf); buf = (unsigned short near*) buf+1; adr+=2; } return (0); } HVAR() schreibt dabei an die übergebene Adresse den Wert nach dem =. Pin #Byte des Flash-Speichers ist auf High -> Word Modus Im Datenblatt des Flash Speichers steht: Command Sequence ------------------------------------------------------------------------ Program: Word Mode: 555h=AAh 2AAh=55h 555h=A0 -> jetzt folgen Adresse und Daten Byte Mode AAAh=AAh 555h=55h AAAh=A0 -> jetzt folgen Adresse und Daten Sector Erase: Word Mode: 555h=AAh 2AAh=50h 555h=80h 555h=AAh 2AAh=55h Sektor Adresse=30h Byte Mode: AAAh=AAh 555h=50h AAAh=80h AAAh=AAh 555h=55h Sektor-Adresse=30h 1. In den Routinen oben wird die Kommando Sequenz für Byte-Mode verwendet. Allerdings mit der Ausnahme, dass Anstelle von !!!! 555h hier 554h !!!! verwendet wird. -> so funktioniert es auch 2. Ändere ich 554h in 555h, so funktioniert nichts mehr, obwohl dann eigentlich erst die Kommando Sequenz aus dem Datenblatt verwendet wird. 3. Ändere ich die Kommando Sequenz von Byte zu Word Mode, so funktioniert dies mit 555h überhaupt nicht. Verwende ich hier 554h, so lässt das Board sich zwar programmieren, aber die Verifizierung scheitert. Hat jemand eine Idee? Danke!
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.