Flash-Speicher mit BASCOM nutzen

Gast #98079
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
Gast #98080
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...
Gast #98081
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
Gast #98083
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...
Gast #98084
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.
Gast #98085
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...
Gast #98086
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
Angehängte Dateien:
Gast #98088
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?
Gast #98091
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)
Gast #98092
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...
Gast #98096
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...)
Gast #98098
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"...)
Gast #98100
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren