Forum: Mikrocontroller und Digitale Elektronik Flash W29C011A-15 beschreiben mit PIC18F4525


von Simon B. (urganot)


Lesenswert?

Hi,

Als blutiger Mikrocontrolleranfänger bräuchte ich mal eure Hilfe.
Wir haben an der FH die Aufgabe, einen Flash (W29C011A) mithilfe eines 
PICs (18F4525) zu beschreiben. Allerdings habe ich keine Ahnung, wie ich 
damit anfange, bzw. wie das funktioniert.

Könnte mir jemand ein paar Hinweise geben, wie ich dabei vorgehe.

von W.S. (Gast)


Lesenswert?

Ja.

Datenblätter lesen, zuerst das vom Flash, damit du ne Ahnung kriegst, 
was man da tun muß, um ihn zu beschreiben und dan das vom PIC, damit du 
lernst, diesen sinnvoll zu benutzen.

W.S.

von holger (Gast)


Lesenswert?

Wie sieht die Schaltung dazu aus?

Du musst immerhin 28 Leitungen an den Flash anschliessen.
Könnte eng werden mit dem 40 pinnigen PIC.
Evtl. Zusatzhardware wie Latches anschliessen.

von Simon B. (urganot)


Lesenswert?

Die Datenblätter habe ich schon gelesen, allerdings werde ich da nicht 
schlau draus.

Was die Anzahl der Pins angeht, unser Prof. hat uns das ok gegeben, also 
sollte das funktionieren.

von Frank K. (fchk)


Angehängte Dateien:

Lesenswert?

So würde ich das machen.
Du hast zwei Latches für die Adressleitungen, eines für A8..A1 und eines 
für A16..A9.

Startbedingung:
!WE=1
!OE=!
!CE=1
ALE_L=0
ALE_H=0
A0=X (egal)
TRISD=0 - Port D auf Ausgang

Schreiben:
Adressbits 8..1 auf Port D/LATD schreiben
ALE_L auf 1
ALE_L auf 0 - damit sind die Bits im Latch gespeichert
Adressbits 16..9 auf Port D/LATD
ALE_H auf 1
ALE_H auf 0 - damit sind die Bits im Latch gespeichert
Adressbit 0 auf A0
Daten auf Port D/LATD schreiben
!CE=0 - Flash aktivieren
!WE=0 - Schreiben
!WE=1 - Schreiben Ende
!CE=1 - Flash deaktivieren

Lesen:
Adressbits 8..1 auf Port D/LATD schreiben
ALE_L auf 1
ALE_L auf 0 - damit sind die Bits im Latch gespeichert
Adressbits 16..9 auf Port D/LATD
ALE_H auf 1
ALE_H auf 0 - damit sind die Bits im Latch gespeichert
Adressbit 0 auf A0
TRISD=255 - Port D auf Eingang
!CE=0 - Flash aktivieren
!OE=0 - Daten aus Flash lesen, Datenausgänge des Flashes anschalten
Daten von PORTD lesen
!OE=1 - Datenausgänge des Flashes abschalten
!CE=1 - Flash deaktivieren
TRISD=0 - Port D auf Ausgang

Auf ein Flash kann man nicht so wie auf ein RAM schreiben, da gibts eine 
spezielle Prozedur, die im Datenblatt steht. Auch Löschen steht da drin.

Durch die Latches sind noch sehr viele Pins des PICs frei für andere 
Sachen. Du willst ja vielleicht noch ein Display oder eine serielle 
Schnittstelle anklemmen. Wenn Du eines der üblichen Text-LCDs 
anschließend willst, kannst Du die Datenleitungen auf auf Port D legen 
und für RS A0 mitbenutzen, nur die Steuerleitungen E und RW brauchen 
extra Pins.

So, jetzt solltest Du das ohne weitere Hilfe schaffen.

fchk

von Simon B. (urganot)


Lesenswert?

Danke, das hat mir schonmal sehr weitergeholfen.

Es gibt noch eine Sache, die ich nicht verstehe.
So wie ich es aus dem Datenblatt verstehe, wird bei einem 
Schreibvorgang, nachdem das erste Byte an den Flash geliefert wurde, 
durch eine fallende Flanke an !WE der byte-load cycle beendet. Wenn man 
aber innerhalb von 200mys weitere Bytes hinschickt, werden diese auch in 
den Buffer geschrieben.
Mein Problem ist jetzt, muss ich vor jedem zusätzlichen Byte !WE wieder 
auf 1 setzen und danach auf 0, oder fällt das dann weg?
Wenn das wegfällt, woher weiß der Flash dann, dass er das neue Byte 
jetzt in den Buffer schreiben darf, bzw. dass der PIC fertig ist?

von Frank K. (fchk)


Lesenswert?

Simon B. schrieb:

> Mein Problem ist jetzt, muss ich vor jedem zusätzlichen Byte !WE wieder
> auf 1 setzen und danach auf 0, oder fällt das dann weg?

nein, für jedes einzelne Byte wird ein negativer Puls auf !WE fällig. 
!CE kann auf low bleiben. Siehe Seite 13 des Datenblatts.

fchk

von Simon B. (urganot)


Lesenswert?

Heißt quasi

!WE -> 1
schicke byte 1
!WE -> 0
!WE -> 1
schicke byte 2
!WE -> 0
!WE -> 1
schicke byte 3

usw.?

Die Interne Programmierung läuft dann an, sobald !WE lang genug auf 1 
bleibt?
Setz ich den Flash, nachdem eine "Page" geschrieben wurde wieder in den 
Standby, bevor ich mit der nächsten anfange?

von Frank K. (fchk)


Lesenswert?

Simon B. schrieb:
> Heißt quasi
>
> !WE -> 1
> schicke byte 1
> !WE -> 0
> !WE -> 1
> schicke byte 2
> !WE -> 0
> !WE -> 1
> schicke byte 3

Erst Daten senden, dann !WE=0, dann !WE=1. Schau Dir mein 
Originalposting an, da steht es exakt drin.

> Die Interne Programmierung läuft dann an, sobald !WE lang genug auf 1
> bleibt?

Entweder wenn eine Page voll ist oder !CE und !WE wieder auf 1 sein 
(Ruhezustand)

> Setz ich den Flash, nachdem eine "Page" geschrieben wurde wieder in den
> Standby, bevor ich mit der nächsten anfange?

!CE=1 setzen, um den Schreibvorgang zu beenden, und dann Data Polling 
(siehe Seite 4 und Seite 14).

fchk

von Simon B. (urganot)


Lesenswert?

Frank K. schrieb:
>
> Startbedingung:
> !WE=1
> !OE=!
> !CE=1
> ALE_L=0
> ALE_H=0
> A0=X (egal)
> TRISD=0 - Port D auf Ausgang
>
> Schreiben:
> Adressbits 8..1 auf Port D/LATD schreiben
> ALE_L auf 1
> ALE_L auf 0 - damit sind die Bits im Latch gespeichert
> Adressbits 16..9 auf Port D/LATD
> ALE_H auf 1
> ALE_H auf 0 - damit sind die Bits im Latch gespeichert
> Adressbit 0 auf A0
> Daten auf Port D/LATD schreiben
> !CE=0 - Flash aktivieren
> !WE=0 - Schreiben
> !WE=1 - Schreiben Ende
> !CE=1 - Flash deaktivieren
>

Sorry, ich hab grad nen Knoten im Hirn.
Wenn ich das richtig verstehe, müsste ich nach dem "!WE=1 - Schreiben 
Ende" quasi wieder von vorne anfangen.
Wenn ich den Flash deaktiviere, dann schreibt er ja die erste Seite 
voll.

Oder meinst du, dass ich den Schreibvorgang jedesmal komplett durchgehe, 
dabei die Pageadresses gleichlasse und nur die Datenadresse ändere?

von Frank K. (fchk)


Lesenswert?

Simon B. schrieb:

> Oder meinst du, dass ich den Schreibvorgang jedesmal komplett durchgehe,
> dabei die Pageadresses gleichlasse und nur die Datenadresse ändere?

Wenn Du schnell genug bist (die byte-load cycle time (TBLC) of 200
µS), dann brauchst Du die Adresse nicht zu ändern, sondern kannst 
einfach Daten mit !WE reintakten.

Adressbits 8..1 auf Port D/LATD schreiben
ALE_L auf 1
ALE_L auf 0 - damit sind die Bits im Latch gespeichert
Adressbits 16..9 auf Port D/LATD
ALE_H auf 1
ALE_H auf 0 - damit sind die Bits im Latch gespeichert
Adressbit 0 auf A0
!CE=0 - Flash aktivieren

Daten auf Port D/LATD schreiben
!WE=0 - Schreiben
!WE=1 - Schreiben Ende
Daten auf Port D/LATD schreiben
!WE=0 - Schreiben
!WE=1 - Schreiben Ende
Daten auf Port D/LATD schreiben
!WE=0 - Schreiben
!WE=1 - Schreiben Ende
Daten auf Port D/LATD schreiben
!WE=0 - Schreiben
!WE=1 - Schreiben Ende
Daten auf Port D/LATD schreiben
!WE=0 - Schreiben
!WE=1 - Schreiben Ende
...
!CE=1 - Flash deaktivieren

fchk

von Simon B. (urganot)


Lesenswert?

OK, ich denke jetzt hab ichs.
Vielen Dank für deine Hilfe

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.