Bauplan Schaltplan Quellcode Atmel AVR GCC Dataflash AT45DB041 Library

AT45 DB041 Dataflash auf Adapter für STK500
Mit einem entsprechend programmierten Mikrocontroller ist es sehr einfach, Messwerte aufzunehmen und weiter zu verarbeiten. Die meisten Controller stellen hierfür entsprechende AD Wandler oder Timer und dergleichen zur Verfügung, so dass dieser Teil einer Anwendung meist recht einfach zu implementieren ist. Etwas schwieriger wird es schon, wenn man die gelesenen Messwerte über einen längeren Zeitraum aufzeichnen möchte, um sie später zB auf einem Computer auswerten zu können.

Zwar haben die meisten Mikrocontroller meist hierfür etwas EEPROM Speicher mit auf dem Chip, und auch den Programmspeicher könnte man zur Not noch für die Speicherung von Daten verwenden, aber die weitaus bessere Lösung ist es, hierfür spezialisierte Bausteine zu verwenden.

Genau für solche Anwendungen sind die Atmel Dataflash Bausteine geeignet. Sie können mit sehr geringem Aufwand seriell an einen Mikrocontroller angeschlossen werden und bieten mehrere hundert kByte Speicher, wodurch auch grössere Datenmengen untergebracht werden können.

Meist bieten die Mikrocontroller sogar schon eine integrierte Serielle SPI Schnittstelle, um diese Dataflash Bausteine anschliessen zu können.

Die hier gezeigte Bibliothek (Quellcode hier) für Atmel Controller und AT45DB041 Dataflash unter AVR GCC Compiler verwendet jedoch diese Hardware Schnittstelle nicht, stattdessen werden die benötigten Steuersignale mit einzelnen IO-Befehlen erzeugt. Dadurch kann ein Dataflash Baustein an praktisch jede Schaltung mit genügend freien Leitungen angeschlossen werden. Auch ist diese Implementierung (soweit ich feststellen konnte), immun gegen Unterbrechungen von ISR Routinen, kann also vollkommen transparent aufgerufen werden.

Das Prinzip für die Kommunikation mit den Dataflash Baustein ist dabei recht einfach und gut im Datenblatt beschrieben. Der Dataflash Baustein besitzt zwei 256 Byte (eigentlich 264 Byte, ich benutze im Momnent aber nur 256 Byte) grosse RAM-Bereiche, welche per SPI gelesen und geschrieben werden können. Diese RAM-Puffer können nun per Kommando in eine der Flash-Seiten geschrieben und wieder gelesen werden. Weiterhin gibt es natürlich noch Befehle zum Löschen von Speicherseiten sowie zum Löschen des gesamten Chips.

Folgende Funtionen sind dabei implementiert:

void dataflash_init(void);
void dataflash_led_on(void);
void dataflash_led_off(void);
void dataflash_device_id(uint8_t* buffer);
void dataflash_status_read(uint8_t* buffer);
void dataflash_security_register_read(uint8_t* buffer);
void dataflash_page_read(int page, uint8_t* buffer);
void dataflash_buffer1_write(uint8_t* buffer);
void dataflash_buffer1_read(uint8_t* buffer);
void dataflash_buffer1_to_main(int page);
void dataflash_auto_page_rewrite(int page);
void dataflash_page_erase(int page);
void dataflash_chip_erase(void);
uint8_t dataflash_ready(void);

Beispiel zur Verwendung:

uint8_t buffer[256]

dataflash_init();

//liest 256 Bytes aus Page 1234

dataflash_page_read(1234,buffer);

//schreibt 256 Bytes in den Dataflash RAM Puffer 1

dataflash_buffer_1_write(buffer);

//schreibt den Inhalt des RAM Puffers in Speicherseite 1536

dataflash_buffer_1_to_main(1536);

//wartet auf Ende des Schreibvorgangs

while (!dataflash_ready());

Die Bibliothek stellt also eine sehr einfache Möglichkeit zur Verfügung, Dataflash Bausteine in eigene Mikrocontroller Anwendungen zu integrieren.

Noch eine Anmerkung:

Laut Datenblatt sollten alle Dataflash Speicherseiten in periodischen Abständen neu programmiert werden, um die Datensicherheit zu gewährleisten. Hierfür gibt es die Funktion dataflash_auto_page_rewrite(int page), welche entsprechend der Vorgaben im Datenblatt benutzt werden kann!

Bauteile für dieses Projekt - Anzeigen:
Aktive Bauelemente

Passive Bauelemente


Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen:

Neueste Artikel
Anzeigen:
Aktuelle Newsbeiträge
Sie sind Besucher Nr. 1212703