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