Forum: Mikrocontroller und Digitale Elektronik Sd-Card Spec


von Nik Bamert (Gast)


Lesenswert?

hi,

ich bin gerade dabei einen Mp3 Player mit SD Card Slot zu
bauen/programmieren. Jetzt hab ich gerade das Web ein bisschen nach
Sd-Card Infos abgesucht. Dabei hab ich einige sehr nützliche Programmer
gefunden. Doch eigentlich möchte ich das Original Spec. Bei
www.sandisk.com gibts sehr wohl eine 'simpified version', aber die
nütz mir nicht viel, weil dort genau das fehlt, was eigentlich wichtig
ist; die beschreibung zu den Registern, deren Funktion, Adressen usw.
Das einzige was mir darin als nützlich erschient, ist eine
Anschlussbelegung der Karte und eine Auflistung der Ansteuerungsmodi.
Auch einige Beispiele zum auslesen der Karte sind dabei, jedoch nur als
Timing-Diagramme..:( Für weitere Infos wird man auf die "full
Version" verwiesen. Schliesslich bin ich dann auf www.sdcard.org
gestossen. Doch dort findet man keine Downloads, sondern nur eine
Anmeldung für eine Lizenz, die die Wenigkeit gg von  1000 us$ pro
Jahr kostet. Für mich als 14 Jähriger Hoby Elektroniker nicht zu
denken..:) Aber es gibt doch massennhaft MP3-Player Projekte im
Internet, darunter auch einige mit Sd/mmc Cards. Doch die Personen, die
diese Player gebaut haben, werden doch auch irgendwo die Infos
herhaben..? Gibts irgendwo eine Quelle, wo man das gratis downloaden
kann, oder waren die Specs früher mal Gratis?

MFG Nik

von F01Q2 (Gast)


Lesenswert?

tach nik,
geh einfach mal auf www.myplace.nu/mp3/. da gibts auch quellcodes.
vielleicht is ja was dabei.

von leif (Gast)


Lesenswert?

Hi Nik,

ich melde mich mal als Mitstreiter an :-)
Willst Du die SD ebenfalls über SPI betreiben, oder das SD Interface
nutzen?

Ich glaube, ich werde mich vorerst auf das Lesen von FAT 16 über Spi
einschränken, und da gibt's ja schon Code im Netz, den man verstehen
und anpassen könnte.

Kennst Du noch andere Quellen, die kein CF sondern SD/MMC (und
avr)benutzen? Welchen AVR möchtest Du verwenden?

Ich fange erst gerade an, mich schlauer zu machen, aber vielleicht
können wir uns ja kurzschließen; auch wenn ich mittlerweile meine
Quellen nicht mehr weiß; aber dann werde ich mal für die nachwelt
anfangen zu sammeln.

Im Kaltmacher.de forum hat sich eine grupper zusammengeschlossen, die
den yampp7 mit farbdisplay und mmc noch weiter verkleinern will,
basierend auf der original-firmware.
Die scheinen mir aber etwas zu enthusiastisch, ich kann nicht
einschätzen wie genau die da den durchblick haben (ich habe nämlich
noch keinen :-) Aber die Platine haben sie wohl schon herstellen
lassen..

Ich möchte aber auf den USB Controller verzichten, und eine möglichst
kompatibel formatierte sd/mmc verwenden, von der ja dann ggf. neue
firmware geladen werden kann.
Das eigene Format mag platzsparend sein, aber ich möchte auch normale
daten speichern können.

Neben der SD/MMC soll über SPI auch der VLSI Decoder und das Nokia
Display betrieben werden, allerdings kann ich leider noch nicht
einschätzen, ob das von der Geschwindigkeit überhaupt reicht, vermute
aber schon. Zumal ich auch gerne eine RTC und kleine Sensorikaufgaben
realisieren möchte.

Naja, ist noch viel Arbeit :-)

Würd mich interessieren was Du Dir so gedacht hast, und wie weit Du
schon bist.

-leif

von ulrich (Gast)


Angehängte Dateien:

Lesenswert?

hallo

evt. hilft das euch weiter die spec. von einer MMC karte SD sind
abwärts Kompatibel.

Mfg Ulrich Radig

von Nik Bamert (Gast)


Lesenswert?

hi

@leif
Ich mache mich auch gerade schlau. Jedoch hab ich eigentlich alle Teile
schon, ausser dem vs1001k...Heute werde ich mal versuchen, die Sd Card
anzusteuern...dazu verwende ich einen Atmega162. Dies scheint ein wenig
überdimensioniert, aber ich hab im Moment keinen anderen Controller da
und ich will das Programm zuerst mal ohne optimierungen zum laufen
bringen. Wenn dann (hoffentlich) alles geht und der Code unter 8 kbyte
gross ist, werde ich einen atmega8 mit 16 mhz nehmen. Mit der
Ansteuerung hab ich noch nicht so ganz den Durchblick, aber vielleicht
wirds heute noch was:)

@Ulrich
Vielen Dank, das bringt mich schonmal einen riesen Schritt weiter, da
ist da alles ziemlich genau beschrieben..:)
Hier doch noch mal eine Frage zu dem  mp3 Player, den du gebaut hast.
Dieses 'Wochenendprojekt', wie es kürzlich mal genannt hast.
eigentlich verstehe ich die eigentliche Ansteuerung(sektor auslesen)
Aber bei der initialisierung blick ich nicht ganz durch. Um in den SPI
Modus zu kommen, muss man glaube ich 8 'leere' also 0xFF bytes
senden. Dananach kommt chip select auf low(weil die low aktiv ist)
Danach cmd0 senden und die Antwort auswerten. Dann CMD1 senden und
diesen wiederhohlen, bis die Karte mit 0xFF antwortet. Und das wars
dann auch schon? So hab ich das aus einem kleinen C Programm zur MMC
anteuerung...

MFG Nik

von ulrich (Gast)


Angehängte Dateien:

Lesenswert?

Ich werde laufe nächster Woche auch mein kleines C Programm für den
Atmel fertig haben, werde darin alles genau erläutern.
Hier habe ich noch ein PDF File für das SPI Timming ich hoffe das hilft
weiter.

Mfg Ulrich Radig

von Dirk (Gast)


Lesenswert?

Und noch ein kleiner Tip von mir:

Man kann auch mal in die Datenblätter anderer µController schauen. Zum
Beispiel hat Philips den I²C-Bus erfunden, und dort bzw. in deren
Datenblätter für ihre µController findet man jede Menge Informationen
über die Funktionsweise des I²C-Busses.

Genau so verhält es sich mit der SPI-Schnittstelle: Motorola hat diese
Schnittstelle erfunden, und in deren Datenblätter (teilweise ziemlich
große Controller, 32Bit) finden sich sehr detaillierte Informationen
zum SPI-Bus.

Also, mal über den Tellerrand schauen lohnt sich! :-)

In diesem Sinne,
fröhliches Schaffen!
Dirk.

von Nik Bamert (Gast)


Lesenswert?

hi,

ich hab nun mal ein programm zum auslesen der csd gemacht, nur geht es
leider noch nicht... Ich glaube eigentlich, dass es an der
Initialisierung vom SPI hängt. Dort hab ich massenhaft einstellungen
Die config zeile aus Bascom sieht bei mir z.b. so aus :
Config Spi = Hard , Data Order = Lsb , Master = Yes , Polarity = Low ,
Phase = 0 , Clockrate = 16 , Noss = 1
aber ob die stimmt, weiss ich nicht recht. Was ist mit Phase gemeint?,
denn dazu steht in der Hilfe nur, man soll im Datenblatt schauen und
dort hab ich auch nichts gefunden...
Bei der Hardware bin ich mir auch nicht 100% sicher. Ich hab da einen
Schaltplan von einem MP3 Player, aber dort kann schon mal etwas nicht
stimmen; der Datenausgang der Karte ist mit Miso verbunden und mosi ist
mit dem eingang der karte verbunden, das müsst aber doch eingentlich
genau umgekehrt sein...? Und dann wären da noch meine Spannungsteiler.
Ich hab welche mit 1.8kOhm und 3.3kOhm gelötet, die gehen eigentlich
auch ganz gut. Nur ist die stromverorgung der karte ~3.15Volt und die
Spannungsteiler erzeugen etwa 2.9 Volt. Reicht dass, damit die Karte
dies als high erkennt? Und dann gibts auch noch die Pullups, die im
Datenblatt beschrieben sind, wie kann ich die denn noch einbauen, wenn
ich schon die spannungsteiler habe?

Ich würde mich über eure weitere Hilfe freuen:)
MFG Nik

von Nik Bamert (Gast)


Lesenswert?

@ulrich

du hast in einem anderen tread einmal dein asm programm deines
mp3players gepostet. Hast du auch noch den Schaltplan dazu auf dem pc,
den du mir schicken könntest? Ich bin mir nämlich nicht ganz sicher, ob
das stimmt, wie ich die Karte angeschlossen habe...

MFG Nik

von Nik Bamert (Gast)


Angehängte Dateien:

Lesenswert?

hi,

hat zufällig jemand ein bascom beispiel zur ansteuerung einer sd/mmc
karte? Ich hab nun schon zweimal darüber geschlafen und leider klappt
immernoch nichts...SPI klappt zwar, nur gibt die Karte keine Antwort.
Im anhang ist noch mein Programm. Ich weiss es ist noch total
unübersichtlich, dies wird sich ändern, wenn es erst einmal geht.

MFG Nik

von uli (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe hier ein kleines programm für bascom
war nur mal als versuch gedacht.
Dabei habe ich kein hardware SPI benutzt sondern Software SPI.
Ist schon etwas länger her, deshalb werde ich keine fragen dazu
beantworten. dieses programm liest einfach einen bereich aus und gibt
diesen auf der seriellen schnittstelle aus.

Mfg Ulrich Radig

von leif (Gast)


Lesenswert?

Also, was deine Spannungsteiler angeht habe ich nicht den Durchblick.
Aber die Spi Leitungen müssten doch richtig sein. Am MISO heißt Master
In Slave Out, also bei der MMC an den Datenausgang. Entsprechendes gilt
für MOSI.

Was die SD Karte als Pegel akzeptiert, müsste in den Spezifikationen
stehen(Datenblatt).

Ich habe mir erstmal den Schaltplan vom yampp runtergeladen, und
eingehend studiert; das Ding funktioniert, und bietet dementsprechend
eine gute Möglichkeit, sich das abzugucken.

Bin gerade selber am Schaltplan zusammenstricken, und stelle jetzt erst
annähernd den Arbeitsaufwand fest! :-)

Habe zwar selbst keine Ahnung, aber ich würde mir überlegen, ob Du
nicht gleich C, bzw. auch ein bisschen Assembler lernst. So wahnsinnig
unterschiedlich sind Programmiersprachen an sich ja nicht (was einfache
Programme betrifft), und ob Du ne Schleife in Bascom oder C schreibst,
ist vermutlich auch ähnlich.
Das ganze hat aber einen Vorteil: alle anderen benutzen C :-), und Du
kannst auf funktionierenden COde zurückgreifen und daraus lernen.
Und später kannst Du damit auch mehr anfangen.

Weiterhin Motivation und ab und zu ein bißchen Erfolg! (ich freu mich
schon auf die einzelnen Etappensiege :-)

-leif

von Alexander Höller (Gast)


Lesenswert?

... und ich schließ mich auch gleich mal an.
Bin zwar erst dabei ein Projekt vorzubereiten, aber zu Wissen wie man
SD/MMC Karten ansteuert, ist für's Projekt auf jeden Fall mal
interessant ;)

Nur hab ich bis jetzt leider noch keine Ahnung, außer das, das eh im
orum zu lesen ist ...
aber ein sehr interessanter Beitrag scheint folgender zus ein:
http://www.mikrocontroller.net/forum/read-1-53662.html

mfG
Alex

von Nik Bamert (Gast)


Lesenswert?

wow! Vielen Dank, ich werds gleich mal ausprobieren :)

von leif (Gast)


Lesenswert?

Jetzt hab ich mal ein paar Fragen, die vielleicht hier am besten
aufgehoben sind.

Und zwar möchte ich LCD,MMC/SD, und VS10xx(*) am SPI betreiben (wie
jeder andere auch :-), die SPI Frequenz wird dabei von den 11/02
Decodern auf 4MHz begrenzt (alter Typ 6MHz).

1) Kann ich auf einen µC Quarz verzichten, oder hat das Folgen für das
SPI? (überhaupt kann ich mich nicht entscheiden, was ich als Clck
nehmen sollte)

1b) Welche Taktfreuquenz ist für 'unser' Projekt denn überhaupt
nötig? Zum yampp7 mit NokiaLCD sagt MIS (der Softwaremensch):

"If you have installed ATmega161L CPU, change it to ATmega162L.
2. Change CPU crystal from 4.0Mhz to about 10-13Mhz. Higher is better,
but not to more :-). You may insert 12.288Mhz Crystal - the same type
as for VS1001. If you not have any new crystal, you may use internal
8MHz CPU clock generator without any crystal change, but this is not
recommended."

Ich persönlich möchte zwar keinen USB Support (weil's Platz, Speicher,
Aufwand kostet, und es spottbillige Kartenleser gibt), aber dafür evtl.
ein paar andere Dinge implementieren, z.B. eine RTC à la Hagen.

2) Sollten die SPI Slaves einen gemeinsamen RESET haben?
(Den Reset des 11/02 kann man auch per Software, und nur zum power-up
mittels RC Glied hardwaremäßig durchführen; sinnvoll?) Bei welchen
Slaves wird der denn überhaupt eingesetzt?
Aber ich vermute, daß auch hier pro Slave ein IO geopfert werden muß.

3) Wie lassen sich die Slaves 'abschalten', also zum Stromsparen?


Ich habe (weil ich die Info nicht mehr finden konnte) Atmel mal
angeschrieben, wo jetzt genau die Unterschiede zwischen den L, und
normalen AVRs sind. Reichelt hat nämlich den mega32-L nur als DIP, und
atmega64 ist vermutlich zu groß. Aber ich denke, dann kann man den
normalen Typen trotzdem mit <16Mhz @ 3V laufen lassen(?).

VLSI habe ich gefragt, ob sie für die in "Audio Porduct Family.pdf"
gezeigte "Mobile Phones und PDAs" Applikation, S7, Vorschläge für die
Verwendung eines zusätzlichen Verstärkers machen könnten.
Ich würde nämlich gerne die Möglichkeit haben, mich mit MP3 zu wecken.
Ist aber wohl auch eine Frage des Platzes.

Idee Falls das nicht in einem Gerät zu machen ist, könnte man auch
über eine Docking-Station nachdenken.

Naja, jetzt reicht's erstmal. Erfolgreiche Recherche!

-leif


(*)
Übrigens Nik: Falls Du den Decoder nicht schon bestellt hast, würde ich
damit noch warten, bis Du die neuen Typen bekommen kannst. Die bieten
eine Reihe von Vorteilen, der 02 kann sogar in einem PCM Format
aufnehmen. Ich habe gerade ein 'älteres' muster 02c bekommen.;
egnite.de wollte sich bei mir melden, sobald sie wissen wann die in
serie verfügbar sind, evtl. könnte ich dann ja für dich einen
mit-ordern.

von Nik Bamert (Gast)


Angehängte Dateien:

Lesenswert?

@alexander

oho, dieser beitrag scheint wirklich seh spannend zu sein. Ich hoffe
ich krieg das ganze heute noch hin.

@Ulrich / all

Ich hab dein Proggie gerade ausprobiert. Leider funzt es noch nicht.
Ich hab zwar die pinbezeichnungen angepasst, aber immer noch
nichts...Es scheint also an der hardware zu liegen. Ich hab zu meiner
hardware mal einen schaltplan angefügt, evtl weiss ja jemand besser
Bescheid und kann mir sagen, was ich faslsch gemacht habe..(?)

@Leif

1/1b) Dazu denke ich auch gerade nach. Ich hab einfach mal einen 16 mhz
Quarz an den mega162 gehängt...:)

2) Eigentlich kannst du alle Slave hardware Resets zusamenehmen,
eigentlich unterstützen alle slaves(decoder, mmc/sd usw.) einen Soft.
Reset. Ausser du möchtest alle einzeln über hard Reset resetten...

3)Also Sd und mmc unterstützen beide einen Sleep Mode, ob das auch der
Decoder kann, weiss ich nicht

>Aber ich denke, dann kann man den
>normalen Typen trotzdem mit <16Mhz @ 3V laufen lassen(?).

Sollte eigentlich gehen. Bei den L Typen wird einfach garantiert, dass
sie mit 3 Volt laufen.

(*) Ja, ich hab den Decoder schon bestellt. Netterweis hat mir Andreas
Auer ein Vs1001 Piggyback gelötet, welches in ein paar Tagen eigentlich
ankommen sollte. freu
Trotzdem danke für dein Angebot einen mitzubestellen

MFG Nik

von leif (Gast)


Lesenswert?

Mensch, die bei VLSI haben einen tollen Support; auch wenn Euch das
evtl. weniger interessiert, vielleicht hilft es doch mal jemandem:

"Probably your best approach in terms of overall simplicity would be
to run the chip in its Differential Output state by setting the bit
SM_DIFF (lsb of register SCI_MODE). This changes the sign of the left
output channel effectively doubling the output voltage and mixing the
two channels together for mono applications. You should then connect
the speaker terminals to the output channels; speaker+ to right channel
and speaker- to left channel, for example.

Chances are that you will get enough output power to a small mono
speaker from the chip itself. Experiment with speaker impedances around
16 ohms or higher. Lower impedances may be used to maximize output
power if some sound distortion is acceptable.

If the output power of the chip remains too low, the simplest and
least-expensive way to boost the output signal with a differential
transistor amplifier stage."

Alternativ wurde mir vorgeschlagen, die beiden Ausgänge hardwaremäßig
zu koppeln, und dann extra zu verstärken.

Toll, das muß ich unbedingt ausprobieren, wenn's soweit ist :-))

-leif

von leif (Gast)


Lesenswert?

Falls jemand (mit mehr Ahnung als ich) eine Idee hat, wie sich das
Vorgeschlagene mit gleichzeitiger Kontrolle über den Kopfhörerausgang
umsetzen ließe... Man ist ja für jede Inspiration dankbar.. G

Nik,

weißt Du, wo man das mit den L-Typen nachlesen kann?

Zum Reset: Ja, aber es ist doch nicht unbedingt sinnvoll, alle Slaves
gleichzeitig zu resetten. Naja, werde ich nochmal nachsehen.

In den MMC Specs habe ich irgendwo gelesen, daß der SPI Modus nicht
notwendig vorgeschrieben ist; haben das trotzdem alle/die meisten
Hersteller implementiert?


-Leif

von Nik Bamert (Gast)


Lesenswert?

@leif

>weißt Du, wo man das mit den L-Typen nachlesen kann?
Ich hab hier auch schon mal dasselbe gefragt. Mir wurde das dann
ungefähr so erklärt; Die chips werden nach dem herstellen getestet, ob
sie mit 3.3 Volt@8mhz laufen, wenn ja, dann bekommen sie ein L und
sonst nicht. Das würde aber bedeuten, dass die ohne L sicher nicht
unter diesen Bedingungen laufen würden. Doch das tun einige doch...Wo
man darüber sonst etwas nachlesen kann, weis ich leider auch nicht.

>In den MMC Specs habe ich irgendwo gelesen, daß der SPI Modus nicht
>notwendig vorgeschrieben ist; haben das trotzdem alle/die meisten
>Hersteller implementiert?

Eigentlich sollten alle Sd/mmc Karten diesen modus unterstützen.

MFG Nik

von Nik Bamert (Gast)


Lesenswert?

ach ja, noch was zu meinem Schaltplan:
Im Datenblatt steht, man solle pullups für alle Leitungen verwenden.
Nun hab ich aber schon den Spannungsteiler, reicht der, oder wie sollte
das ganze aussehen?

MFG Nik

von Alexander Höller (Gast)


Lesenswert?

Mhmmm .... gute Frage ! überleg

Aber das könnte auch ein/der Grund sein, warum deine Schaltung nicht
funktioniert. Hast du die internen Pull-Up's eingeschalten??

mfG
Alex

von Nik Bamert (Gast)


Lesenswert?

.....wie macht man das in bascom ?:)
ich habe das gefühl, dass die leitungen mit spannungsteiler keinen
pullup mehr brauchen. Aber die Leitungen DAT1 und DAT2 sollten glaube
ich mit 100 kohm nach vdd geschaltet sein. Gerade hab ich übrigens
bemerkt, dass ich diese leitungen einfach auf masse gelegt habe. Wenn
scho ohne widerstand sollte ich die dann aber mit 3.3 Volt verbinden?

Nik

von Alexander Höller (Gast)


Lesenswert?

Aja, hab noch etwas gefunden...

Auf Holgi's Elektronik Seite ist ein Beispiel wie man auf CF, MMC & SD
mit FileSystem schreiben kann...

Wenn man den Code für's FileSystem weglässt, hat sieht man wie man auf
MMCD & SD via SPI zugreifen kann (ganzer Code kommentiert!!) - aja, und
alles ist in C (AVR-GCC) geschrieben .. was will man mehr ;)

Seite:
http://home.t-online.de/home/holger.Klabunde/avr/avrboard.htm#cf

Zip-File (mmc_spi.c & mmc_spi.h sind interessant):
http://home.t-online.de/home/holger.Klabunde/avr/FATTests.zip


Und gleich auch noch ne - vermutlich dumme - Frage:
Wird eine MMC im SPI-Mode auch Sektorweise gelesen, so wie CF oder kann
man dort eh jedes Byte einzeln lesen/schreiben?


mfG
Alex

von Nik Bamert (Gast)


Lesenswert?

hi alexander

die Datei hatte ich letze Woche schon einmal gefunden, aber
mittlerweile wieder total vergessen..:)

>Wird eine MMC im SPI-Mode auch Sektorweise gelesen, so wie CF oder
>kann man dort eh jedes Byte einzeln lesen/schreiben?

Also man liest einen Block, dieser hat normalerweise die Grösse eines
Sektors, also 512 byte. Man kann die grösse aber auch auf z.b. 32 byte
stellen, um so nur immer 32 bytes aufs Mal lesen zu müssen.

MFG Nik

von Alexander Höller (Gast)


Lesenswert?

Hey!

.. achso, dachte man kann die MMC Karte wie ein ser. EPROM sehn, aber
ist ja auch egal ;)

Wie ist das beim Schreiben? Kann da auch immer nur ein ganzer Block
geschrieben werden??
Haben diese Blöcke so wie Sektoren fixe Grenzen, oder kann man
irgendeine Startadresse angeben?

mfG
Alex

von Nik Bamert (Gast)


Lesenswert?

hi,

also die startadresse kann glaube ich frei festgelegt werden. Die
Adresse zur startadresse ist immerhin 32 bit lang. Wenn es sich also um
sektoren handlen würden, dann wären das immerhin 2^32*512
byte...(=2199023255552 byte = 2048 gigabyte) So könnte man also 2
terrabyte adressieren. Ich glaube eher, dass dabei auf ein byte genau
jede adresse ausgweählt werden kann. Eigentlich könntest du die
blockgrösse auch auf 1 stellen. Dann könntest du bei jedem Lesevorgang
aber nur ein Byte auslesen...

MFG Nik

von Nik Bamert (Gast)


Lesenswert?

hi,

ich hab mal ein bisschen überlegt; könnte so wie im Anhang ein
Spannungsteiler & der Pullup funktionieren? An der Diode fällt ja auch
noch ein Strom ab..dann wären es am Schluss wahrscheinlich wieder unter
3 Volt. Meine Schaltung funzt leider immernoch nicht richtig.
Vielleicht  liegts ja daran, dass die sd mit ca. 3.15 volt versorgt
wird, die Spannungsteiler aber(ohne Dioden!) nur etwa 2.9 Volt
erzeugen. Bis wieviel Volt erkennt die SD Karte denn das Signal noch
als high?

Nik

von Nik Bamert (Gast)


Angehängte Dateien:

Lesenswert?

...mist, ich hab den anghang vergessen...

von Alexander Höller (Gast)


Lesenswert?

Hey,

wenn du die ganze Schaltung sowieso mit 3,3V Versorgst brauchst du den
Spannungsteiler eh nicht. (also wenn du einen L-Typ ATMega verwendest
und den eben auch mit 3,3V fütterst)
Dann kannst du den Pull-Up rein geben (wenn's die Spezi. so will ...)
und Diode, usw. kannst dir sparen).

mfG
Alex

von Uli (Gast)


Angehängte Dateien:

Lesenswert?

Hier habe ich den anschaltplan der MMC Karte an den µC

Mfg Ulrich Radig

von Nik Bamert (Gast)


Lesenswert?

hi,

@alex
Das könte ich eigentlich mal machen. Aber mit 3 Volt laufen die Avr's
nur mit 8MHZ, und ich möchte 16. Das zweiter Problem ist, das ich nun
ein Piggyback board habe(mit vs1001k drauf) dies hat schon einen Level
shifter drauf. Dann brüchte ich also nochmals einen, um wieder auf 3.3
volt zu kommen...

@uli

Danke für den Plan:) Ich hab bis jetzt eignetlich alles gleich, ich hab
aber ausserdem gestern noch einen Transistor von data out der mmc zum
eingang am uc gehängt. Dennoch funzt es immernoch nicht(auch mit deinem
Proggie nicht) Dein Prog läuft ja über soft spi. Ich hab aber gerade
die hardware spi pins dazu verwendet. Könnte das Probleme geben? Ich
hänge wohl besser alles an einen anderen Port und mach alles über
software spi. Denn die neuste Bascom Version unterstütz ja auch soft
spi...

MFG Nik

von Alexander Höller (Gast)


Lesenswert?

Hallo!

Nik, ich hab mir deine Schaltung mit der Diode, usw. nochmal angschaut.
Also wenn ich jetzt nicht komplett verwirrt bin, kann das so ja gar
nicht funktionieren.
Angenommen, der AVR gibt nen Low-Pegel aus. Nehemn wir den mal mit 0V
an. Dann sind mitten im Spannungsteiler, also vor der Diode, auch 0V
gegen Masse. Wegen der Diode kann der AVR die Leitung bei der MMC aber
nicht gegen Masse ziehen, sondern macht dort einfach nix. Der Pull-Up
sorgt dann dafür, dass dort ca. 3,3V sind -> an der MMC liegt permanent
ein High-Pegel an...

mfG
Alex

von Alexander Höller (Gast)


Lesenswert?

Aja, den Trasistor von der MMC zum µC solltest dir eigenlich auch sparen
können:

Input High Voltage: min. 0,6 * Vcc
0,6 * 5V = 3V

-> 3,3V von der MMC sollten reichen !

mfG
Alex

von Alexander Höller (Gast)


Lesenswert?

Mhmmm ... das letzte Posting vergiss bitte gleich wieder =))

Hab an der falschen Stelle im Datenblatt nachgeschaut ( XTAL Pin
oooops )

... sind doch 0,7 * Vcc = 0,7 * 5V = 3,5V

... Sorry !

mfG
Alex

von leif (Gast)


Lesenswert?

Hallo Nik & Mitstreiter,

erstmal eine nicht besonders aufschlußreiche, offizielle Info zu den
Unterschieden der L Typen von den 'normalen' Versionen. Im Grunde
das, was du schon sagtest; anscheinend wollen die nicht präziser
werden:

  "You are free to use the regular mega32 (non L) at any voltage and
speed you like, but Atmel takes no responsibility for the
functionality. Using the mega32 as an L device is likely to work, but
please test this first to see whether it works properly for you.

All AVRs are tested before shipped to our customers, and there are
several tests. Some mega32s are only tested in the voltage range 4.5 to
5.5 volt, but up to 16 MHz. These devices are marked ATmega32. Other
devices are tested down to 2.7 volt, but only up to 8MHz, These devices
are marked ATmega32L."

Im Grunde hieße das dann doch, daß die L-Typen (aus welchen Gründen
auch immer) minderwertiger sind als die normalen!?

Den L-Typen habe ich jetzt aber bei Segor bestellt, die haben nämlich
auch den zum VS10xx passenden Grundtonquarz 24,..MHz, und ausserdem smd
minijoysticks (von denen ich demnächst einige günstig weiterreichen
kann :-).

Zur Auswahl der Clock:

Ich werde jetzt einen SMD Keramikresonator nehmen. Der ist um einiges
schlechter als der Quarz, was die Frequenzstabilität angeht, aber wohl
für UART Zwecke noch ausreichend (im Gegensatz zu dem internen, der
wiederum wesentlich schlechter ist). Er läßt sich dafür aber wesentlich
schneller starten. Außerdem ist er kompakter.

[Hardware Design Considerations, Realtime Clock; Appnotes von atmel]

Zum SPI Reset:

Ich werde nicht alle Slaves an eine Reset-Leitung hängen.
Der VS10XX 'schläft', wenn der Reset betätigt ist, die SD/MMC braucht
überhaupt keinen Hardware Reset (Da auch SW Reset und Sleep), und beim
Nokia Display braucht man anscheinend nur nach dem Power Up einen
Hardware-Reset. Ich werde mal rausfinden, ob man das nicht auch mit
einem einfachen RC-Glied machen kann, sowas wird nämlich für den VS10xx
in der Application Note erwähnt.
Also im besten Fall komme ich mit einer Reset für den Decoder weg..

Zum Lautsprecher:
segor hat sehr kleine (20mm D) Lautsprecherchen, allerdings mit 8 Ohm
Impedanz. Kann leider nicht einschätzen, wie sich das auswirkt. Sind
die Verzerrungen auch da, wenn man dann nicht mit voller Lautstärke
arbeitet?

Und zum Umschalten zwischen Kopfhörer und Lautsprecher:
MAX4736 - 0.8 Ohm, Low-Voltage, Single-Supply, Dual SPDT Analog Switch
Ich hoffe, daß das funktioniert.


Aufgeregt,

leif

von uli (Gast)


Lesenswert?

hört sich ja bisher nicht schlecht an!
und was wollt ihr als prozessor verwenden mega128 oder einen kleineren
mit externen speicher? schon alleine das Fat brauch einiges an
speicher! Desweiteren einen puffer für die mp3 daten.

Mfg uli

von uli (Gast)


Lesenswert?

achso habe vergessen, das ganze gibt es schon bei atmel, einen normalen
prozessor glaube auf 8051 oder avr basis mit eingebauten mp3decoder und
sd karten ansteuerung evt. schaut ihr euch mal den source code an, und
den schaltplan.

Mfg uli

von leif (Gast)


Lesenswert?

hallo uli,

ich hoffe, daß ich mit einem mega32 auskomme; yampp.com ist eine sehr
gute orientierungshilfe (mega162), allerdings benutzen die ein eigenes
dateisystem.

soweit ich weiß, kommt man an den mp3-micro noch nicht so einfach ran,
da gibt's auch schon einen thread. ausserdem möchte ich mit dem avr
erfahrungen sammeln.
-leif

von Nik Bamert (Gast)


Lesenswert?

hi

also ich versuchs gerade mit einem atmega162. Eigentlich sollte das
schon reichen. Aber entweder bin ich zu blöd, oder Bascom ist ein
rieser mist...Nicht einmal der Sinus Test will auf dem Piggyback Board
anlaufen. Wenn ich es richtig verstanden habe, muss man um den Test
anzuwerfen;

1. Hardware Reset
2. (software reset) <--muss man den machen?
3. cs auf low
4. die acht bytes für den sinus test senden.
5. cs auf high (inaktiv)

Dann sollte der Test laufen.
Aber nichts tut sich. Das Piggyback funzt 100 pro (wurde schonmal
getestet, allerdings nicht von mir.)
Es kann fast nur noch am Comiler liegen...mir fällt im moment nichts
mehr ein, was noch das Problem sein sollte. Ausser der Sinus Test wäre
einige Knackser und dann fertig...das hab ich nämlich.:)

MFG Nik

von Nik Bamert (Gast)


Lesenswert?

Eingentlich wollte ich noch etwas schreiben;
Einen externes Ram nehme ich vorerst nicht. Ich betreibe das ganze dann
mit einer SD Karte. Dort stelle ich eine Blockgrösse von 32 bytes ein
und kann so die Daten eigentlich direkt in den Decoder
rüberschieben(natürlich nur ohne Dateisystem). Leider hab ich es auch
noch nicht fertiggebracht, die sd karte anzusprechen...:(

von uli (Gast)


Angehängte Dateien:

Lesenswert?

hier das ist ein programm für bascom um einen Testton zu erzeugen.

Mfg Ulí

von Alexander Höller (Gast)


Lesenswert?

Hallo,

noch ein interessanter Link zu MMC/SD:
http://home.wtal.de/Mischka/MMC/

mfG
Alex

von leif (Gast)


Lesenswert?

Tach, eine kleine Anmerkung zu meinem voreiligen Post: Der SPDT switch
eignet sich nicht für den differential mode des VS10xx, weil er keine
negativen spannungen schalten kann... aber ich suche weiter..
-leif

von leif (Gast)


Lesenswert?

Maxim hat aber auch passendes für den differential mode: z.B. MAX4762.
Jetzt fragt sich 'nur' ob der VS10xx mit einem 8 Ohm minispeaker
klarkommt..Dazu mehr in ein bis zwei monaten :-)
-leif

von Nik Bamert (Gast)


Lesenswert?

hi,

ich hab ein bisschen nach einer Lösung um die Karte anzuschliessen
gesucht. Normalerweise verwendet man einen Levelshifter, oder einen
Spannungsteiler, um auf die 3.3volt herunter zu kommen. Meint ihr,
sowas wie im Anhang könnte vernünftig funktionieren? Das ganze kommt
von dieser Seite:http://homepage.ntlworld.com/seanellis/mmcserial.htm
Und dort hats anscheinend funktioniert.

MFG Nik

von Alexander Höller (Gast)


Lesenswert?

Mhmmm .... is das was ich dir auch shcon vorgeschlagen hab: den ATmega
auch mir 3,3V betreiben, dann brauchst keinen Levelshifter. Also denk
schon, dass das funktionieren sollte!

mfG
Alex

von Peter Kasi (Gast)


Lesenswert?

Also wenn du nicht runter kannst auf 3.3V versuchs doch mal mit nem
74LVX08 (20 ct bei Reichelt), damit hab ich's gemacht und funktioniert
ohne Probleme auch mit hohen Übertragungsraten. Ich hatte es auch
zuerst mit Spannungsteilern versucht, aber das sah grausam auf dem Oszi
aus (nix eckig, alles schön rund ;)

Gruß
Peter

von Nik Bamert (Gast)


Lesenswert?

hi

@alexander
Sorry, ich hab gemeint, dass auf dieser Page der Controller ebenfalls
mit 5 Volt läuft. Dann würden die Wiederstände wahrscheinlich nicht
genügen...Mit 3Volt möchte ich ihn eben nicht betreiben, weil ich noch
das Piggiback habe. Dieses hat schon einen Levelshifter, dort muss ich
dann 5Volt reinlassen.

@Peter
die lvx Typen sind ja low voltage. Da ich die aber nur in smd finden
konnte, hab ich ein bisschen weitergesucht. Darauf fand ich ein
Datenblatt, worin stand, dass die HCT Typen zwischen min 4.5 und max 6
Volt laufen. Die HC Typen jedoch zwischen 2 und 6. Also sollten auch
die gehen. Die geh ich mir dann heute mal hohlen...Mal hoffen, dass es
geht:)

MFG Nik

von Peter Kasi (Gast)


Lesenswert?

Bin mir nicht sicher ob die gehen, im Datenblatt steht was von
Input-Voltage 0 to Vcc / Output-Voltage 0 to Vcc. Von dem her ist wohl
nix mit 3.3V betreiben und mit 5V ansteuern. Bei den LVX ist dies
explizit angegeben (Input Voltage Level Translation 5V to 3 V / The
inputs tolerate voltages up to 7V allowing the interface of 5V systems
to 3V systems.)
Also lieber noch ein bischen suchen.
Gruß
Peter

von Jens-Erwin (Gast)


Lesenswert?

Hallo,

Der Tip mit dem 74LVX08 ist gut.

Der 74LVX08 scheint genau der richtige zu sein. Man betreibt ihn mit
den 3V, kann aber bis 7V an den Eingang krachen -- ist doch gut.

Mein MMC-Projekt läuft aber auch mit Widerstandspannungsteilern und
Ausgang der Karte direkt an Eingang-AVR, der mit 5 V betrieben wird.

von Nik Bamert (Gast)


Lesenswert?

hallo,

@alle
Gibts den 74lvx08 auch in einer anderen Package als smd? z.b. dil?
Ich werde mir die hc typen trotzdem mal hohlen, ich berichte dann mal
ob es auch geht.

@jens-erwin
Hast du für die Spannungsteiler etwa so aufgebaut?:

 vom uc
   -----o
        |
       .-.
       | |
       | | r1
       '-'
        |
        ---------------------- zur karte
        |
       .-.
       | |
       | | r2
       '-'
        |
   -----o-------- gnd
[created by Andy´s ASCII-Circuit v1.24.140803 Beta www.tech-chat.de]

[r1=1.8kOhm]
[r2=3.3kOhm]
Wenn du die selben Werte genommen hast, könnte ich das so auch mal
versuchen. Wenn alles nicht hinhaut, werde ich einfach Transistoren
nehmen..

von uli (Gast)


Lesenswert?

Habe nun auf meiner Homepage die Anschaltung einer MMC/SD als
Schaltplan, und den SourceCode mit WinAVR C zum Download
bereitgestellt. www.ulrichradig.de

Mfg Uli

von Nik Bamert (Gast)


Lesenswert?

@uli

wow, danke für die Info, wenn dieser Source Code auch unter der
"BEER-WARE-LICENSE" läuft, dann kann ich den ja in meinem Mp3 Player
verwenden.(?) Ich hätte nur noch eine Frage dazu; Wie schnell kannst du
von der Karte lesen? Ist ja schliesslich Soft-spi. So etwa 250 kbits/sek
(also etwa 45 kbyte/sek) würden mir reichen, ich hab fast keine Mp3's
die eine höhere Bitrate haben...

MFG Nik

von john (Gast)


Lesenswert?

hi,

ich lese die mp3 für meinen player von einer mp3. die lese
geschwindigkeit ist kein problem. ich hatte eher das problem, das der
puffer im vs1001 leer war bevor ich den nächsten sector in den speicher
lese. das habe ich mit einem 74hc08 gelöst. jetzt schreibe ich byte 2
während ich byte 3 lese.
auf http://www.phrozen.org/ sind schaltplan und source. ein selbst
gebastelter fat layer ist auch dabei. fand mmc wegen spi am
attraktivstren und habe es bis jetzt auch nicht bereut.

john

von uli (Gast)


Lesenswert?

der code von john sieht sehr gut aus!!
kurz zu meinen code ich habe mal 2048 blöcke gelesen
also 1MB dauerte bei 14Mhz ca. 20Sek.

mfg uli

von john (Gast)


Lesenswert?

@uli
ich habe mir deine source mal angeguckt. wenn die spi benutzt anstatt
das alles zufuss zu machen denke ich das du auch um einiges höherkommen
kannst. wenn man mal vom prtokoll overhead absieht kann man bei 8mhz mit
spi rechnerisch ca 1MB erreichen. hasst du dir während des auslesens
daten per rs232 ausgeben lassen ? das kostet nämlich auch zeit.
john

von Uli (Gast)


Lesenswert?

Natürlich kann man den SPI-Bus benutzen und in READ_BYTE_MMC sowie
WRITE_BYTE_MMC implementieren. reicht aber aus für eine transferrate
von 250kbit/s zumindest rechnerisch 1MByte in 20s sind 8MBit in 20s
sind ca. 400kbit/s.

Mfg Uli

von Uli (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch den neuen Source Code der die MMC/SD Karte in dem Hardware SPI
des Atmel AVR µC betreibt.

Mfg Ulrich

von john (Gast)


Lesenswert?

;) spi ist immer besser ;)

von Nik Bamert (Gast)


Lesenswert?

hi,

ich hätte noch eine Frage zur sd card und dessen /cs eingang.
Im Code von Uli wird der /cs eingang schon ganz am anfang
aktiviert(also low). Ich hab aber auch schon codes gesehen, wo das erst
nach den etsten 74 clocks gemacht wird und anscheinend trotzdem
funktioniert. Das würde also bedeuten, dass die Karte auch Daten
verarbeitet, wenn sie gar nicht mit /cs aktiviert ist (???). Ich bin
mir nun nicht ganz sicher wie ich die deaktivieren soll, denn am
harware spi hängt zusätzlich noch ein Vs1001k Piggyback.

MFG Nik

von ulrich (Gast)


Lesenswert?

Also der CS/ ist low aktiv das bedeutet bei mir am anfang wird sie bei
den ersten 74+ Clocks auch noch nicht auf low gelegt.
Erst bei dem ersten commando.

Mfg Ulrich

von rschaefer (Gast)


Lesenswert?

Hat jemand das Projekt von Uli (mmc incl. fat)
mit einem atmega16 bzw. atmega32 zum Arbeiten bekommen??
Kann es sein, daß durch die großen Arrays
zum Lesen der Blöcke größere Atmegas (evtl. sogar atmega128)
notwendig machen??
Die mmc Geschichte habe ich hinbekommen, doch wenn ich die fat
Funktionalität ausprobiere, spielen meine µC verrückt.

mfg

René

von Wolfgang (Gast)


Lesenswert?

Habe begonnen, mich etwas schlau zu machen, um eine MM/SD- karte
anzusteuern zu können und bin auf das hier begonnene Thema gestoßen.
Die von Ulrich unter MMC.zip zur Verfügung gestellten Beschreibungen
der MMC sind zum Verständnis sehr hilfreich.
Aber was ich insbesondere noch suche, ist ein Datenblatt einer Karte,
aus dem man die elektrischen Werte wie z.B. Stromverbrauch in Betrieb,
in Ruhe; Eingangströme usw. entnehmen kann.
Hat jemand einen Hinweis, wo man sich so ein Datenblatt runterladen
kann?
MfG
Wolfgang

von Mario Schulze (Gast)


Lesenswert?

Hi

Ich bin momentan auch dabei ein Projekt mit einer SD-Card bzw. MMC zu
machen. Ich habe die Karte an einem MSP430F149 hängen und steuere sie
über SPI an. Nun kann ich schon auf die Karte schreiben und aus der
Karte lesen (ganze Sektoren). Nun habe ich da noch eine Frage zur
Adressierung. Ich habe mal einige verschiedene Kartentypen ausprobiert
und dabei festgestellt, daß es bei der Adressierung irgendwie einen
Offset zu geben scheint. Die Karten sind alle im FAT16 formatiert und
ich möchte den Boot-Block des Dateisystems lesen (als nächster Schritt
ist eine FAT-Implementierung geplant). Der liegt ja im Sektor0 der
Karte. Ich habe mich zur Vereinfachung des gesamten Systems auf Karten
mit 512Byte Sektorgröße beschränkt (das sind ja im Prinzip fast alle
Karten) und ich lese/schreibe auch immer nur ganze Sektoren. Damit
mache ich bei mir die Adressierung immer nur auf den Sektoranfang.

bei 2 verschiedenen 64MB-SD-Karten muß ich dann als Adresse
39*512+0*512 angeben (also spreche ich den Sektor0 eigentlich mit der
Adresse von Sektor 39 an)
bei einer 256MB-MMC muß ich 95*512+0*512 angeben
bei einer 128MB-MMC und einer 16MB-MMC ist die Adresse (so wie ich es
erwartet hätte) 0*512+0*512

bei allen höheren Adressen verhält es sich ganz genauso - wenn ich bei
dem 2 64-MB-SD-Karten also den Sektor 200 lesen/schreiben will muß ich
als Adresse 39*512+200*512 angeben.

woran liegt das und kann ich irgendwie von der Karte diesen Offset
erfahren? Oder müßte ich eine ganze Reihe von Karten probieren und
diese dann als Kompatibel mit dem entsprechenden Offset einarbeiten?

Gruß
Mario

Die Karten sind von:
64MB-SD: einmal extreMEmory (gibts bei reichelt) und einmal Noname
128 und 256MB-MMC sind auch von denen
16MB-MMC ist von ScanDisk

von Olaf (Gast)


Lesenswert?

Was meinst du mit Sektor 0? Den ersten Sektor der Partition? Der haengt
natuerlich von der Groesse der Karte oder der Formatierung ab. Musst du
dir anhand der Daten im Bootblock ausrechenen.

Oder meinst du wirklich sektor0 der Karte, also der MBR? Der liegt
immer an derselben Stelle.

Olaf

von Rufus T. Firefly (Gast)


Lesenswert?

Das sieht in der Tat so aus, als würde hier MBR und der erste Sektor der
Partition miteinander verwechselt.

von Mario Schulze (Gast)


Lesenswert?

Hi

Danke für die ANtwort. Ich konnte das Problem mitlerweile lösen. Ich
hatte mir die Karte bisher immer mit dem WinHex angeschaut und da nicht
das Laufwerk als physikalischen Datenträger betrachtet sondern nur die
einzelne Partition. Dann fängt das WinHex mit der Adressierung am
Beginn der Partition an. Wenn ich es als physikalischen Datenträger
betrachte habe ich als erstes erstmal die Partitionstabelle mit dem
Eintrag, wo die Partition anfängt. Diesen Offset muß ich dann noch zu
den Adressen in der FAT dazurechnen und schon habe ich die richtige
Adresse auf der Karte.

Gruß
Mario

von octi (Gast)


Lesenswert?

hy leute.
ich wollte fragen ob einer von euch den yampp7 schon gebaut hat??
Falls ja wollte ich fragen ob irgendwer das nokiaa display schon
gelötet hat und wie?
wenn ja wären fotos oder wissenwertes über dieses thema sehr
interssant.
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
Noch kein Account? Hier anmelden.