Hallo, habe folgendes Problem: Hab einen uC und einen externes Data Flash(AT45DB161D). uC schickt die Daten über SPI erstmal in den Buffer (RAM(528Byte)) Ist der Buffer voll werden die Daten in die gewünschte page geschrieben. Kann mir hier jemand vielleicht sagen wie die Daten aus dem buffer kommen? Die Daten vom uC in den Buffer gehen ja über SPI und da schick ich die daten ja nur byteweise. Wird das aus dem Buffer in eine page genauso gemacht oder hat das dann garnichts mehr mit SPI zu tun wenn ich vom Buffer in eine page schreiben will? Die daten die ich vom uC in den Buffer schicke ist eine Struktur, insgesamt werden 12 Strukturen in den buffer geschreiben bis er voll ist und dann komplett in eine page geschreiben werden soll. Kann mir bei diesem problem evtl jemand weiterhelfen? Grüße
Hallo, was soll da passieren? Du schickst das Kommando, daß er z.B. Buffer 1 in Page x schreiben soll und er macht das intern. Inzwischen kannst Du gern den anderen Buffer nutzen usw. Busy zeigt an, wenn er mit dem internen Programmieren fertig ist. Oder habe ich Deine Frage nicht verstanden? Gruß aus Berlin Michael
Schick ja die daten so byteweise in den buffer: S0SPDR = (unsigned char)(data.battery_mode >> 8); // High Byte Daten an SPI while (!(S0SPSR & (SPI_SPIF))); // Warten bis Daten gesendet S0SPDR = (unsigned char) (data.battery_mode & 0xFF); // Low Byte Daten an SPI while (!(S0SPSR & (SPI_SPIF))); so mach ich das mit der ganzen struktur.Davor schicke ich noch den opcode ab 0x84 und die 3 dummy bytes: for (uint8_t k=0; k<3; k++) { S0SPDR = adressfeld[k]; // Daten an SPI while (!(S0SPSR & (SPI_SPIF))); // Warten bis Daten gesendet } muss man dann auch so vorgehen um vom buffer in eine page zu schreiben oder nehmm ich einfach den befehl das er den inhalt des buffers nimmt und direkt in eine page schreibt?? Man kann auch nur einen Buffer verwenden,oder? Wozu ist denn der 2. buffer und warum ist der kleiner als der 1.?
Wozu ist denn der 2. buffer und warum ist der kleiner als der 1.? sorry, das stimmt garnicht, hab es falsch gelesen. hab eigentlich fragen wollen, wozu die binary page size(512 bytes) verwendet wird?
Schon wieder hab ich was falsches geschrieben. >Davor schicke ich noch den >opcode ab 0x84 und die 3 dummy bytes: das sind nicht die dummy bytes, sondern da geb ich ja die pageadresse vor und ein paar don't care bits
Hast mir einer einen Tipp wie man dabei vorgehen könnte? Hat eigentlich so ein buffer auch noch irgendwie so untergeordnete pages oder sowas?Wenn ich die 1. Struktur in buffer geschreiben hab, an welche Stelle schreib ich dann die 2.?Wie bekommt man dazu den freien, noch zur verfügung stehenden Speicherplatz heraus?oder schreibt es die neuen Daten einfach automatisch hinter die Daten, die schon im buffer stehen? Wäre echt nett wenn mir jemand weiterhelfen könnte
Hallo, mit einem (84H) Buffer 1 write sendet man Daten (bis zu 528 Byte) in dem Buffer 1. Also musst Du anschliessend (ohne CS zwischenzeitlich zu verändern) noch die zu sichernden Daten senden!! Danach sendet man dem Flash (Buffer to Main Memory Page Program) den Befehl, den Buffer 1 im Flash an die mitgegebene Adresse zu speichern.
ja so hatte ich es bis jetzt auch so vor. also erst den 84er opcode und dann den 83er. weiß nur nicht wie man das mit der Übergabe der Werte macht. In den Buffer schreib ich ja die daten byteweiße hinein: S0SPDR = (unsigned char)(data.battery_mode >> 8); // High Byte Daten an SPI while (!(S0SPSR & (SPI_SPIF))); // Warten bis Daten gesendet S0SPDR = (unsigned char) (data.battery_mode & 0xFF);// Low Byte Daten an SPI while (!(S0SPSR & (SPI_SPIF))); genauso mach ich es mit den restlichen strukturen ebenfalls. nur wenn ich jetzt die daten wieder herausholen möchte um in eine page zu schreiben weiß ich nicht wie man da vorgeht. kannst du mir da weiterhelfen?
Hallo, Steff wrote: > Hast mir einer einen Tipp wie man dabei vorgehen könnte? > Hat eigentlich so ein buffer auch noch irgendwie so untergeordnete pages > oder sowas?Wenn ich die 1. Struktur in buffer geschreiben hab, an welche > Stelle schreib ich dann die 2.?Wie bekommt man dazu den freien, noch zur > verfügung stehenden Speicherplatz heraus?oder schreibt es die neuen > Daten einfach automatisch hinter die Daten, die schon im buffer stehen? > > Wäre echt nett wenn mir jemand weiterhelfen könnte Irgendwie bringst Du da ein paar Sachen durcheinander. Wo und wie Du die Daten im Flash ablegen willst, ist letztlich Dein Problem. Du kennst Deine Datenstruktur, deren Platzbedarf usw. Die Buffer sind ja vor allem, damit man ohne Verrenkungen eine ganze Page programmieren kann. Also Bufferzeiger auf den Anfang setzen, Deine Daten nach und nach reinschreiben und wenn der Buffer voll (oder Du nicht weiter willst) den Buffer per Kommando in die gewünschte Page flashen lassen. Der 2. Buffer hilft ja nur, um die maximale Geschwindigkeit zu erreichen. So kann man seine nächsten Daten schon in den anderen Buffer schreiben, während der Flash intern noch die Daten des ersten ins Flash kopiert. usw. Wieviel Daten Du schreibst, weißt Du (bzw. Dein Programm) doch. Solange Du /CS aktiv läßt, schreibt er einfach nacheinander Deine Bytes in den Buffer. Wie voll der ist, darauf muß Du selbst achten, wenn Du das Ende erreichst macht er kommentarlos wieder ab Anfang weiter und überschreibt, was da schon stand. zur binary Pagesize: die Meinungen gehen da sicher auseinander, ich programmiere meine AT45DBxxxD immer auf binary Pagesize. Einfach, weil meine Gewohnheiten mit 512 Byte besser klarkommen als mit 528. ;) Das Umprogrammieren ist allerdings eine Einbahnstraße. Einmal auf binary Pagesize gesetzt bleibt es auch für immer so. Gruß aus Berlin Michael
>Also Bufferzeiger auf den Anfang setzen, Deine Daten nach und nach >reinschreiben und wenn der Buffer voll (oder Du nicht weiter willst) den >Buffer per Kommando in die gewünschte Page flashen lassen. Bin noch relativ unerfahren was dies angeht. Wie würde denn sowas aussehen, einen Zeiger auf den Anfang setzen. Ich vertausch glaub einiges, was das SPI angeht mit dem was das flash angeht. Im S0SPDR stehen ja meine daten drinn wenn ich mit 0x84 in den buffer schreib. wenn ich aus dem buffer die daten an das flash weitergeben möchte, wie greif ich dann darauf zu? Könntest du mir nicht ein kleines Beispiel dazu geben?
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.