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.