Hi.Mal eine kurze Frage Ich habe ein Programm geschrieben das ich in einem Flash Memory(AM29F010 ) laden will? wie soll ich vorgehen? NB:Mein Flash Memory ist an einem MCU (HC11)angeschlossen
Für den HC11 einen 256 Byte großen "Preloader" schreiben, eine Art Monitorprogramm, das in einem bestimmten Modus (Special Bootstrap Mode, wenn ich mich richtig erinnere) über die serielle Schnittstelle in den internen RAM des HC11 geladen und von dort ausgeführt wird. Dieses Programm startet direkt nach der Übertragung des letzten Bytes. Es muß nun mit einer passend dazu geschriebenen PC-Applikation kommunizieren, und im einfachsten Fall den Flash löschen, dann die Daten byteweise entgegennehmen und schreiben. Ggf. ist vorher eine Baudratenumschaltung nötig, da die Datenrate hoch sein muß, um das Timing für das Schreiben eines Blockes im Flash einzuhalten.
Du kannst mit einem Bootloader der Flash Speicher programmieren, aber du brauchst ein EPROM oder ROM mit Bootloader.
Hi Sebastian der Talker und der Preloader sind schon im RAM. mein Programm steht im EEPROM.dieses ist auch "voll" jetzt will ich die Hauptlast vom EEPROM im Flash Memory verlagern.
Hier leute hier ist ein Preloader also jetzt will ich mein Programm im Flash speichern pddr equ $08 baud equ $2B sccr2 equ $2D scsr equ $2E scdr equ $2F * org $BF40 * main ldx #$1000 init x for indexed access to hardware ldaa #$A2 staa baud,x restart timer , set baudrate to 7812 Bd ldaa #$0C staa sccr2,x enable receiver and transmitter bset sccr2,x $01 send break to signal start of download to master wait brset pddr,x $01 wait wait for startbit from master bclr sccr2,x $01 clear break char brclr scsr,x $20 char wait for first character from master (RDRF) ldaa scdr,x read character bne goon jmp $B600 start program in internal EEPROM goon cmpa #$55 test mode ? beq strt yes, skip download cmpa #$FF baud rate ok ? beq bdok yes, goon bset baud,x $33 change to 1200 Bd bdok ldy #$000 init pointer loop brclr scsr,x $20 loop wait for RDRF ldaa scdr,x get character staa 0,y store character to RAM staa scdr,x echo character to master iny adjust pointer cpy #$0000 end of area ? bne loop no, next character *
Ist das ein echter, klassischer HC11 oder ein HCS11? Der HC11 hat doch recht wenig internen EEPROM, oder? Wenn der Flash nicht extern (Programmiergerät) beschrieben werden soll, geht es nicht ohne im HC11 ablaufende Flash-Schreibroutine. Das Datenblatt des Flashes sagt, wie. Vereinfacht gesagt, Adresse und Daten anlegen, Programmierimpuls (WE/PROG o.ä.) geben, Adresse hochzuählen, nächstes Datenbyte anlegen, Programmierimpuls geben... Wiederholen, bis Blockgröße erreicht, ggf. kurz warten, bis Schreibvorgang intern abgeschlossen, dann weiter mit dem nächsten Block. Wenn das programm dann aus dem Flash läuft, muß der HC11 das natürlich über die Beschaltung der MODE-Pins mitbekommen.
Im Prinzip müßte anstelle dieser Zeile: staa 0,y store character to RAM eine Reihe von Anweisungen stehen, etwa (nur als Pseudocode, vereinfacht): Lege Adresse Y an den Port, an dem die Adreßleitungen des Flash liegen (ggf, separat für High- und Low-Byte) Lege eben empfangene Daten aus den Akkumulator an den Port, an dem D7-D0 liegen Setze Schreibsignal (WE=L) (Tip: CE=L, OE=H während des Schreibvorganges) Setze Schreibsignal zurück (WE=H) Aber: Vor Beginn des Schreibvorganges muß, siehe DATENBLATT, 2x ein "Unlock" und 1x ein "Write Set-Up" Befehl geschrieben werden. Dies setzt voraus, daß der Flash schon leer ist, sonst ist Löschen nötig.
Hi Sebastian viel Danke für die Bemühungen.mein MCU ist an einem CPLD über den PORTC angeschlossen Das Flash Memory ist ihrer seite an dem CPLD angeschlossen.die CE(chip enable ), WE(Write enable) und OE (Output enable) sind an dem CPLD angeschlossen.soll der Flash über das CPLD programmiert werden? ich habe echt keine Ahnung.
Oh, vielleicht ein PSD von Waferscale (heute ST)? Solche Sachen habe ich in der Firma schon gesehen. Aber, um zurück zur Sache zu kommen: Das hängt ganz davon ab. Nämlich davon, was denn im dem CPLD an Logik realisiert ist. Möglicherweise ein Adreßdekoder, vielleicht auch mit Latch, um Portleitungen zu sparen? Ohne zu wissen, was der CPLD mit den Datenleitungen macht, wird das Programmieren leider ziemlich schwierig. Gibt es denn keine Beschreibung oder Quellcode dazu?
Hi Sebastian soll ich einfach den Flussdiagramm auf dem Dattenblatt herausprogrammieren?
eigentlich brauche ich nicht der CPLD. im prinzip das war eine vorgefertige platine.meine aufgabe liegt darin das Steuerprogramm zu laden. der CPLD wie ich sagte brauche ich nicht. Also A0-A7 sind an dem CPLD angeschlossen A8-A14 sind an dem CPLD Microcontroller angeschlossen A15-A16 sind an dem CPLD angeschlossen CE,WE und OE sind an dem CPLD angeschlossen und die Microcontroller Pins E , ES, RS sind am dem CPLD angeschlossen also ich denke ich brauche eigentlich nicht der CPLD
Hi Sebastian auf dem Oben genannten Programm können wir nicht anstatt Im EEPROM zu verzweigen im Flash Momerory verzweigen? Ich meine mit dem Befehl FlahStart EQU $8000 ; Flash anfang . . . char brclr scsr,x $20 char ; wait for first character from master ldaa scdr,x ; read character bne goon jmp FlahStart ; start program in Flash ()entspricht sector SA2 aber hier denke ich müssen wir den Port definieren da wo der Flash anegschlossen ist
Prinzipiell richtig. Um ein Programm aus dem Flash ausführen zu können, muß dieser in einer bestimmten Art und Weise angeschlossen sein. Schaltplan wäre toll. Im Prinzip ist es gar kein Problem, in den Flash memory zu verzweigen - vorausgesetzt der Flash ist an den HC11 wirklich so angeschlossen, wie das Datenblatt des HC11 es fordert, also für Daten- und Adreßbus die richtigen, dafür vorgesehenen Ports. Vielleicht setzt der CPLD ja nur die Signale E und R/W des HC11 in /OE und /WE für den Flash um (und dient vielleicht als Adreßlatch).
Okay, danke... (jetzt angemeldet, damit die Nachricht auch ankommt). Bin allerdings kein Profi, kann nur mal nach der Devise "Vier Augen sehen mehr als zwei" drüberschauen.
Hi Sebastian nicht dass du lange wartest.ich meld mich später bitte danke für die Geduld
Hi Sebastian ,ich bin nicht vorangekommen.bin immer noch am ueberlegen
Kein Problem. Ich bin auch per e-mail zu erreichen, SEckert01 (at) netscape.net
Noch eine Ergänzung: Vielleicht hilft es, den Flash nicht kontiniuerlich zu beschreiben, sondern im Assembler mit ORG-Direktive den Code nur an Stellen zu legen, die sich nicht mit internem Speicher des HC11 überlappen. Also im externen Flash Lücken lassen, wo er nicht benutzbar ist.
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.