mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Flash-Speicher mit BASCOM nutzen


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen ATMEGA128/16 und versuche damit einen Art Datenlogger zu
basteln.
Leider mußte ich feststellen, daß via

>Dim a as ERAM byte
>a=100

ich nur die 4KB des proz ausnutzen kann, ich würde aber gerne ca. 100KB
daten speichern, also den FLASH des ATMEGA nutzen.
wie geht das? Danke für Eure Tipps...
Gruß Johannes

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

Mit SPM kann man den Flash beschreiben, mit LPM lesen. Das geht dann
indirekt über den Z-Pointer. Steht z.B. im Datenblatt und im
AVR-Instruction-set.

Ich denke aber, dass das für deine Zwecke ungeeignet ist, Flash ist
nunmal Programmspeicher und hat eine begrenzte Lebensdauer
(Schreibzyklen). Versuchs doch mal mit einem externen I²C-EEPROM, die
gibt es bei Reichelt auch bis 64KByte. Oder mit MMC-Speicherkarte über
SPI...

Bit- & Bytebruch...
...HanneS...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi HanneS,

danke für Deine Tipps.
Die Schreibzyklen sind kein Problem, es werden alle 2 Wochen neue Daten
reingeschrieben und ich tu das auch zyklisch implementieren (so daß jede
Zelle nur alle 2 Wochen mal drankommt)

Nur stellt sich mir nun die Frage:
Wie mache ich so ein SPM / LPM mit Bascom?
Hab in der Hilfe geguckt, Bascom kennt weder nen SPM noch nen
LPM-Befehl und den Z-Pointer kennt es auch nicht. Geh ich da evtl. mit
PEEK / POKE vor???
Gruß
Johannes

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

Ich weiß es nicht, denn ich benutze kein BASCOM. Ich mach alles in
Assembler, stelle aber keine allzu hohe Anforderungen an meine
Programme.

...HanneS...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich hab mich nochmal erkundigt,

bascom mag LPM, aber kein SPM

und das ganze ginge über bootloader und fuses und das ist mir zu
heiß...

hab mir jetzt einen 64MB-MMC-Baustein samt Halterung (Kartenleser mit
USB1.1 gabs günstig) besorgt...

jetzt versuch ich alles per Soft-SPI-Interface auf PB0,PB1,PB2,PB3

mal schaun ob das funzt...

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nicht richtig verstanden: die anwendung waere kein "bootloader" im
ueblichen sinn sondern ein programm, das im bereich fuer bootloader
liegt und auf den flash-speicher mittels funktionen zugreift/schreibt,
die eigentlich fuer bootloader gedacht sind. Es wuerde halt nicht wie
bei einem bootloader das anwendungs-programm, sondern die geloggten
daten abgelegt.
Einerlei, der ansatz mittels externem speicher ist besser.

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

@mthomas:
So hatte ich das auch verstanden...

Ich muss aber zu meiner Schande gestehen, dass ich noch nix mit SPM
gemacht habe, auch noch keinen Bootloader. Auch mit dem Mega128 habe
ich noch nix gemacht, habe also noch lange nicht alle Tücken im
Datenblatt entdeckt. Trotzdem meine ich, dass es in Assembler nicht
allzu kompliziert wird, regelmäßig eintreffende Daten ins Flash zu
schreiben. Ich habe auch noch nicht nachgeschaut, ob das Schreiben
byteweise, wortweise oder nur pageweise möglich ist.

@Johannes:
Hast du ein Datenblatt der MMC, welches das gesamte Protokoll der
Übertragung beschreibt? Ich bin nämlich bei Google bisher nicht fündig
geworden, habe nur ein Vierseitiges entdeckt, was vermutlich für
Händler geschrieben wurde, also außer der Anschlussbelegung nix
Verwertbares enthält.
Wenn ja, schick bitte mal den Link oder Mail...

Ich habe nämlich an einem AT90LS8535 eine SmartMediaCard laufen, mich
stört aber die umständliche Kontaktierung, würde das Nachfolgeprojekt
gern mit MMC realisieren.

Bit- & Bytebruch...
...HanneS...

Autor: Johannes (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
also, den MMC Baustein hab ich besorgt
(64MB war das kleinste, was der Händler hatte
:-o (welch Verschwendung bei 128KB rechnerischem Datenbedarf))
34,50 Euronen

das Ansprechen des Bausteins war unerwartet ganz einfach. das läuft
sogar via "freiluftverdrahteter" kleiner Schaltung mit 6 widerständen
und 2 dioden (zwecks spannungsabfall auf 3,6V)
von
www.ulrichradig.de (danke uli!!)

mit den bascom befehlen SPIOUT, SPIMOVE... ging feld(500) in den MMC
schreiben und lesen auf anhieb prima...

jetzt bin ich noch auf der suche, den block, wo hingeschrieben wird, zu
verschieben, also die adresse auf dem "riesigen" Speicherblock,
schließlich muß ich bei o.g. Methode das Dimfeld vorher im SRAM / ERAM
vorhalten und da komm ich ja nicht wirklich weiter, wenn da der
speicherbedarf genau so hoch ist wie auf meinem MMC-Chip... aber in
angehängter Source scheint jemand hierfür ne Lösung zu haben...

ich weiß nur nicht, was die befehle

Dat = &HFF
Shiftout Mosi , Clk , Dat , Msbl
Shiftin Miso , Clk , Resp , Msbl

immer bedeuten, schließlich wird mit shiftout nur bitweise verschoben,
oder? aber nächste woche wird das mal weiter analysiert...

freu mich auf deine kommentare / hilfe, wenn du lust + zeit hast

gruß
johannes

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieviel byte können denn in der sek vom avr via spi auf die mmc
geschrieben werden? weiß das einer von euch?

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich hab das noch nicht gemessen, aber das scheint superschnell zu
sein. wenn ich das richtig sehe, schiebt der avr so ein feld mit 500
byte einfach mal so in 1-2 takten da rüber. das hiesse (wenn die
beobachtung stimmt)

500 byte = 4000 bit * 16000000 (Ops) gäbe 64000 MBit/s

Das scheint mir realistische Zahl für nen Speicher.
Ist aber alles nur Vermutung, sicher weiß ichs auch nicht. Aber
vielleicht sonstjemand?

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seriell, also ein (SCK-)Takt pro Bit, plus Befehlsoverhaed...

Mit 500 Byte pro Takt wird da wohl nix, wenn doch, dann Nobelpreis...

...HanneS...

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber so 2-3kb in der sek sollte doch gehen bei 8MHZ, oder?

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stimmt, hab jetzt auch rausgefunden, wie das geht, und zwar bitweise...
du hast recht@HanneS

leider kommt bei mir im moment nur wirres zeug an, manchmal hängt das
ganze komplett und wacht erst auf, wenn ich an der schaltung leicht
schüttel...
mit den waitstates "delay" in uS (standardeinstellung=2) habe ich
auch schon experimentiert von 4, über 7 zu 8 und auch 30, 60, 80 und 1
und 0, aber meist dasselbe ergebnis, die übertragung vom MMC und zum
MMC ist bei mir im moment nicht verlässlich...
weiß da jemand rat? muß man das besonders abgeschirmt verdrahten?
ich hab den MMC in eine halterung montiert, die ich aus einem
USB-Chipleser rausgelötet und da dann die Litzen an die Lötkontakte
rangelötet... mit den Befehlen SPIIN und SPIOUT funktionierte das ganze
auch TOP, leider jetzt nicht mit SHIFTOUT und SHIFTIN (software)

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Schüttelsensor" eingebaut???

Das riecht nach Wackelkontakt (kalte Lötstelle)...

Weitere Fragen (betrifft SD/MMC im SPI-Modus im Direktzugriff,
also ohne FAT):

Weiß zufällig jemand, ob man während des Lesens eines Blocks Pausen
machen darf?
Ich meine das so, dass man das nächste Byte erst dann einliest (durch
senden der 8 SCK-Takte), wenn man es braucht.

Wie groß darf ein Block beim Lesen definiert werden?
Kann man z.B. die gesamte zu lesende Datei als Block definieren und
dann nach und nach (so wie das nächste Byte gebraucht wird) einlesen?

...HanneS...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*sucht nach kalten lötstellen

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*hat alles neu gelötet und immer noch schüttelempfindlich...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe nun zum ersten mal fehlerfrei 512 byte gelöscht, geschrieben und
gelesen... leider ist das ganze SAU-LANGSAM... 512 byte in ca. 1
minute...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage:
ist irgendwie entscheidend, welche PINS man für das SPI verwendet.
Ich hab grad PB0, PB2, PB3 und PB4 in Gebrauch (funzt allerdings
momentan nicht, weiß au net wieso)

vorher hatte ich PB0,PB1,PB2 und PB3 in Betrieb und hab jetzt
verdachtsweise mal PB1 entlastet, weil dieser auch für die
ISP-Programmierschnittstelle in Gerbauch ist und ich dachte, das könnte
das Problem sein (das MMC-schreiben-lesen ist nämlich IMMER NOCH
wackelempfindlich...)

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi HanneS,

du wolltest doch nähere Infos zu Schreibpausen und
Schreib/Lesegeschwindigkeiten bei MMC.

Schau mal beim Uli:

(Spezif.-DOKU eines MMC)
http://www.ulrichradig.de/site/avr_mmcsd/pdf/hitac...

(Timing beim MMC)
http://www.ulrichradig.de/site/avr_mmcsd/pdf/MMCSD...

Gruß
Johannes

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Johannes...

Danke, aber die habe ich schon durch. Sogar ausgedruckt und kommentiert
(macht sich auf dem Bildschirm schlecht).

Da wird von kontinuierlich folgenden Takten ausgegangen. Die Timing
Diagramme enthalten auch noch einige Widersprüche (8x4=64???).

Ich werde mir demnächst in Sande eine kleine SD-Card bestellen, brauche
sowiso wieder einige AVRs, dann kann ich etwas experimentieren. Ich will
mal hoffen, dass die SD-Card im SPI-Modus ohne FAT keine Probleme
macht...

Trotzdem viele Dank...
Bit- & Bytebruch...
...HanneS... (ohne "Jo"...)

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hachje, bei mir tuts immer noch nicht richtig.

was ist eigentlich der I2C oder I²C modus, macht der evtl. mehr sinn
als der SPI?

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

I²C wird von ATMEL TWI genannt, ist auch seriell, aber eben anders als
SPI. Um den Unterschied zu sehen wirst du dir schon mal die
Impulsdiagramme und Spezifikationen etwas genauer ansehen müssen.

Tips zum Umgang mit der MMC-Karte kann ich dir nicht geben, ich habe
mir zwar eine SD-Card 32MB bestellt, die ist aber noch nicht da.
Außerdem wird das auch seine Zeit dauern, bis ich die ersten Bytes
erfolgreich hin und her geschoben habe (wenn es mir überhaupt gelingt).
Wobei ich mich auch nicht täglich mit den AVRs beschäftigen kann und
will...

...HanneS...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht mir au so, schließlich gibts draussen vorm labor auch noch eine
welt mit bäumen und wiesen und sonne und menschen... ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.