www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keil µVision3 Programmier-Algorithmus


Autor: rk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.