Forum: Mikrocontroller und Digitale Elektronik Flash programmierung + HC11


von Gabi (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Endlich mal wieder eine präzise Frage und schön kurz auch noch.

von Sebastian (Gast)


Lesenswert?

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.

von Ale (Gast)


Lesenswert?

Du kannst mit einem Bootloader der Flash Speicher programmieren, aber du 
brauchst ein EPROM oder ROM mit Bootloader.

von Gabi (Gast)


Lesenswert?

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.

von Gabi (Gast)


Lesenswert?

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
*

von Sebastian (Gast)


Lesenswert?

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.

von Gabi (Gast)


Lesenswert?

Ja der Hc11 hat einen 512 Bytes internen EEPROM

von Sebastian (Gast)


Lesenswert?

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.

von Gabi (Gast)


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

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?

von Gabi (Gast)


Lesenswert?

Hi Sebastian soll ich einfach den Flussdiagramm auf dem Dattenblatt 
herausprogrammieren?

von Gabi (Gast)


Lesenswert?

Zu viele Fragen aber ich bin am lernen leute

von Gabi (Gast)


Lesenswert?

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

von Gabi (Gast)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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).

von Gabi (Gast)


Lesenswert?

Hi ich versuche das Programm zu fertigen dann schick ich dir

von Sebastian E. (der_andere_sebastian)


Lesenswert?

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.

von Gabi (Gast)


Lesenswert?

Hi Sebastian nicht dass du lange wartest.ich meld mich später bitte
danke für die Geduld

von Gabi (Gast)


Lesenswert?

Hi Sebastian ,ich bin nicht vorangekommen.bin immer noch am ueberlegen

von Sebastian E. (der_andere_sebastian)


Lesenswert?

Kein Problem. Ich bin auch per e-mail zu erreichen, SEckert01 (at) 
netscape.net

von Gabi (Gast)


Lesenswert?

Hi Sebastian ich habe was.ich es dir per email.
bis spaeter

von Sebastian (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.