Schönen guten Tag, ich versuche mich gerade an einem Flashspeicherchip von Atmel (AT45DB312D). Leider bekomme ich ihn nicht zum laufen. Habe schon alles mögliche probiert. Kann auch nicht genau bestimmen ob das lessen oder das schreiben nicht funktioniert. vielleicht könnte mal einerder sich damit schon beschäftigt hat über den code gucken. mfg matze
Hi für ein AT45DB041B hab ich fertigen Code da und würde auch mal über deinen kucken aber mit .rar kann ich nichts anfangen (nein, ich werde mir keine extra Software für das Format installieren) Matthias
Ich hatte nur einen schnellen Blick. Zuerst muss man das RAM Füllen dann den Schreibbefehl geben, das lesen geht genauso. rene
es gibt auch einen befehl der dass beides hintereinander macht. da kann man sich das schreiben in einen puffer sparen.
Man muss bei den AT45DBs ein bischen aufpassen. Die sehen alle irgendwie gleich aus, von der Kapazität mal abgesehen. Ein genauerer Blick ins Datasheet zeigt indes, dass sie es nicht sind. Das fängt damit an, dass das 011er nur einem Puffer hat, ab dem 041er aber zwei drin sind. Und es betrifft auch die SPI-Schnittstelle, die zumindest bei den kleinen Typen zum SPI Mode 0 der AVRs inkompatibel sind (man landet 1 Bit daneben), nur in Mode 3 funktionieren. Der 321er allerdings hat ein anderes Verhalten im SPI, nennt sich auch anders, das zu AVR Mode 0 kompatibel aussieht. Möglicherweise hängt das SPI-Verhalten aber auch noch vom Command-Code ab. Immerhin gibt es für die gleiche Operation 2 verschiedene Kommandos, ohne dass Atmel verrät wo der Unterschied liegt. Da fehlen eindeutig einpaar Seiten in den Datasheets.
Hi Datenblatt: http://www.atmel.com/dyn/resources/prod_documents/doc3597.pdf Es geht also garnichts? Oder kannst du zumindest die ID lesen? Geht nur das Schreiben von Daten nicht? WP/ Pin Beschaltung? Matthias
Also die ID kann ich lesen. Bekomme auch das was ich erwarte. Also funktioniert die. Das Statusregister kann ich auch lesen. Habe dann versucht einen Block zu schreiben (einfach 1 - 528) und den wieder zurück zu lesen. Doch leider bekomme ich nur den wert 128 wieder. und das in allen 528 byte. kann nicht genau definieren welche der beiden funktionen nicht funktioniert.
Hi Problem dürfte beim Schreiben liegen. Du mußt zuerst einen der beiden Buffer befüllen (mit dem BufferWrite Kommando) und dann das Kommando zum Schreiben des Buffer ins Flash absetzen. Matthias
aber ich nutze doch den "ProgramMainMemoryTroughBuffer" Befehl. Der schreibt zuerst die Daten in einen Puffer. Wenn dann CS wieder auf High geht, wird die Page im MainMemory gelöscht und anschließend der Inhalt des Puffers in die Page geschrieben. Oder funktioniert dieser Befehl nicht so richtig??
Hi stimmt eigentlich. Hatte ich nicht richtig hingekuckt. Kannst ja mal die Schreibbefehle über die Buffer testen. Als ertsten Test würde ich dir aber empfehlen einfach mal einen Buffer mit Daten zu befüllen und sofort wieder auszulesen. Dann kannst du dir sicher sein das die Kommunikation passt. Matthias
also ich hab mal zum testen einen block in buffer 1 geschrieben und wieder zurückgelesen. und da passt schon was nicht. hab wieder von 0 bis 527 reingeschrieben und dann wieder gelesen. bis byte 99 bekomme ich werte, aber auch nicht die richtigen. bei byte 99 erwarte ich den wert 99, bekomme aber 98. und ab byte 100 bekomme ich nur noch null zurück. könnte der chip kaputt sein??? hänge mal die neue headerdatei an.
hab auch nochmal buffer 2 getestet und da bekomme ich nur völligen unsinn zurückgegeben.
Ich hab da noch mal ne frage zur adressierung.. zum schreiben in den puffer wird eine pufferadresse gefordert. Da der nur 528 byte groß its, und ich 528 byte schreibe, gehe ich mal davon aus dass die bei null beginnt. ich würde jetzt gern wissen ob er die pufferadresse automatisch hochzählt, oder ob ich bei jedem byte die adresse neu setzen muss...
Vielleicht hilft Dir das weiter? Das ist der Quelltext für den Dataflash-Treiber des Linux-Kernels. Der SPI-Kram ist allerdings woanders untergebracht. Dieser Treiber funktioniert zumindest bei mir ohne Probleme.
Da gibt es eine AppNote AVR335 von Atmel. Betrifft zwar den AT45DB161B, aber vielleicht hilft es dir weiter.
Das hab ich auch schon gelesen. Steht auch nicht viel mehr als im Datenblatt. Aber ich hab den Fehler selbst gefunden....die mosileitung war nicht richtig verlötet. und so gingen wohl daten verloren...dann noch ein paar kleine änderungen am code und es funktioniert alles wunderbar :-)
Hallo Habe auch ein Problem mit dem Data Flash 16Mb So funktioniert er prima aber ich bekomme beim lesen von Pages immer doppelte daten d.h Page 0 Daten1 Page 1 Daten1 Page 1 sollte aber Daten 2 liefern und so führt sich das fort wenn ich page+=2 nehme dann sind die Daten sauber hintereinander. Habe allerdings meinen eigenen Code Könnt Ihr mal drüberschauen??? Danke
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.