Forum: Mikrocontroller und Digitale Elektronik SPI Kommunikationsproblem (MISO always HIGH)


von Arduino Fan (Gast)


Lesenswert?

Hallo zusammen,

ich möchte ein Audio Modul (VS1053) und ein SD Karten Leser (die 2€ 
Dinger aus dem Netz) an einem ESP32 Dev Board per SPI nutzen.

Der SD Karten Leser funktionierte problemlos, aber ich hatte massive 
Probleme das Audio Modul zu verwenden. MP3 Rohdaten schreiben ging, 
Register etc lesen ging schlicht weg nicht. Ich habe tagelang nach dem 
Fehler gesucht, neue Audio Module bestellt, ESP32/Arduino/etc 
ausprobiert und gewechselt, Leitungen und GPIO's getauscht, .....!

Ich denke, dass ich den Fehler nun gefunden habe....aber ihn nicht 
beseitigen kann!!!

Und zwar ist die MISO Leitung des SD Karten Lesers immer auf HIGH, wenn 
dieser nichts sendet (auch wenn das Modul nicht initialisiert ist + die 
SS Leitung HIGH ist). Dadurch wird auf der gemeinsamen MISO Leitung 
immer 11111111 vom ESP32/Arduino empfangen. Lese ich also die einzelnen 
Register aus dem VS1053 aus, erhalte ich immer:
1
REG_SCI_MODE 65535
2
REG_SCI_STATUS 65535
3
REG_SCI_BASS 65535
4
REG_SCI_CLOCKF 65535
5
REG_SCI_DECODE_TIME 65535
6
REG_SCI_AUDATA 65535
7
REG_SCI_WRAM 65535
8
REG_SCI_WRAMADDR 65535
9
REG_SCI_HDAT0 65535
10
REG_SCI_HDAT1 65535
11
REG_SCI_AIADDR 65535
12
REG_SCI_VOL 65535
13
REG_SCI_AICTRL0 65535
14
REG_SCI_AICTRL1 65535
15
REG_SCI_AICTRL2 65535
16
REG_SCI_AICTRL3 65535

Ich kann aber an diesen kleinen SD Karten Modulen weder etwas umstellen 
noch konfigurieren. Hatte jemand mal dieses Problem (MISO always HIGH) 
oder kann mir evtl einen Tip geben?

Vielen Dank, grüße Arduino Fan!

von test (Gast)


Lesenswert?

Geht es mit einem externen Pulldown Widerstand an MISO?

von Arduino Fan (Gast)


Lesenswert?

Hallo test,

erstmal danke für die schnelle Antwort. Ich bin in der Elektrotechnik 
nicht so bewandert. Wie müsste ich den Pulldown denn schalten?

Reicht ein z.B. 10k Ohm gegen Masse?

Ich hätte gedacht, dass das SD Karten Modul (gemäß SPI Anforderungen) 
seinen Ausgang auf LOW zieht.

Grüße Arduino Fan.

von Kruemelbahn (Gast)


Lesenswert?

Hallo Arduino Fan,

das Problem wird hier
http://0x0001.de/hacks/hardwarehack-buskonflikt-durch-lowcost-sdcard-modul-spi/
beschrieben und liegt am 'billigen' SD-Card-Modul.

Gruß
Michael

von Arduino Fan (Gast)


Lesenswert?

Hallo Kruemelbahn,

ja...der Artikel hätte mir mal vor etlichen Tagen in die Hände fallen 
dürfen. Kann ja keiner ahnen, dass sowas das Problem ist.
Ich erhalte in ein paar Tagen ein paar andere SD Karten Module. Die 
teste ich einmal aus.
Trotzdem nochmal die Frage: Reicht ein 10k Ohm gegen Masse aus?

Grüße Arduino Fan.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Arduino Fan schrieb:
> kann mir evtl einen Tip geben?
Der Pulldown wird dir nicht helfen. SPI funktioniert auch ohne solche 
Tricksereien...

Wie sieht denn das Signal auf dem MISO physikalisch aus? Hast du da 
mal mit dem Oszi gemessen? Welchen Pegel hast du auf der SS# Leitung? 
Was passiert, wenn in dem Modul keine SD-Karte steckt?

Arduino Fan schrieb:
> Ich hätte gedacht, dass das SD Karten Modul (gemäß SPI Anforderungen)
> seinen Ausgang auf LOW zieht.
Aber nur zu bestimmten Zeitpunkten. Dann nämlich, wenn eine 0 zu 
übertragen ist.

Arduino Fan schrieb:
> ich möchte ein Audio Modul (VS1053) und ein SD Karten Leser (die 2€
> Dinger aus dem Netz) an einem ESP32 Dev Board per SPI nutzen.
Was passiert, wenn jeweils nur 1 einziger Slave am SPI angeschlossen 
ist? Also nur entweder das Ausio-Modul oder nur die SD-Karte?

von Arduino Fan (Gast)


Lesenswert?

Lothar M. schrieb:
> Der Pulldown wird dir nicht helfen. SPI funktioniert auch ohne solche
> Tricksereien...

Ja, dachte ich auch. Funktioniert ja auch mit anderen SPI Teilnehmern 
aber eben nicht zusammen mit dem SD Karten Modul.

Lothar M. schrieb:
> Was passiert, wenn jeweils nur 1 einziger Slave am SPI angeschlossen
> ist? Also nur entweder das Ausio-Modul oder nur die SD-Karte?

AudioModul (VS1053) ohne anderen Slave: funktioniert problemlos
SD Karten Modul ohne anderen Slave: funktioniert problemlos

Aus meiner Sicht ist es nicht richtig, dass ein Slave mit SS Leitung = 
HIGH 3.3V (deaktiviert) die MISO Leitung auf HIGH 3.3V zieht. Das MISO 
Signal müsste eigentlich auf floating / getrennt sein damit andere 
Bussteilnehmer senden können. Das Problem ist absolut exakt in dem Link 
beschrieben:

Kruemelbahn schrieb:
> das Problem wird hier
> http://0x0001.de/hacks/hardwarehack-buskonflikt-durch-lowcost-sdcard-modul-spi/
> beschrieben und liegt am 'billigen' SD-Card-Modul.

Ich möchte nur ungern an dem SD Karten Modul löten. Hätte gehofft, dass 
ein Pulldown der MISO Leitung hilft.

von Stefan F. (Gast)


Lesenswert?

Arduino Fan schrieb:
> ein SD Karten Leser (die 2€ Dinger aus dem Netz)

Das ist eine sehr ungenaue Produktbeschreibung. Handelsüblich sind 
folgende Varianten:

- passive Adapterstecker
- mit Bustreiber ohne Pegelwandlung
- mit Pegelwandler IC
- mit Spannungsteiler und Transistoren als Pegelwandler
- mit Spannungsteiler nur in eine Richtung (vom µC zur SD Karte)

Und diese dann alle in zwei unterschiedlichen Größen und mehreren 
Varianten.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Arduino Fan schrieb:
> Aus meiner Sicht ist es nicht richtig, dass ein Slave mit SS Leitung =
> HIGH 3.3V (deaktiviert) die MISO Leitung auf HIGH 3.3V zieht.
Richtig. Durch das Deaktivieren sollte der Ausgang eigentlich 
hochohmig sein.

> Das Problem ist absolut exakt in dem Link beschrieben
Mein Proxy hier sperrt den wegen "Games"...
Aber ich vermute, dass da einfach ein Chinese den Pegelwandler nicht 
richtig angeschlossen hat und die MISO-Leitung nicht hochohmig schaltet.
Probiers doch einfach mal mit einem Serienwiderstand im Bereich um 1k am 
MISO-Pin des Moduls. Dann kommt das Audio-Modul evtl. besser durch. Und 
wenn die SD-Karte angesprochen wird, ist hoffenlich die MISO-Strippe vom 
Audio-Modul hochohmig. Die Hoffnung stirbt zuletzt...  ;-)

: Bearbeitet durch Moderator
von Jim M. (turboj)


Lesenswert?

Lothar M. schrieb:
>> Aus meiner Sicht ist es nicht richtig, dass ein Slave mit SS Leitung =
>> HIGH 3.3V (deaktiviert) die MISO Leitung auf HIGH 3.3V zieht.

Vorsicht: Eine SD Karte ist kein SPI Slave - jedenfalls solange sie 
nicht ordentlich initialisiert ist.

Und selbst dann darf sie 8 extra Clocks nach dem CS=High benötigen, um 
den MISO auf high Impedance zuschalten.

Im SD Protokoll ist der Chip Select übrigens active HIGH...

von Arduino Fan (Gast)


Lesenswert?

Stefanus F. schrieb:
> Das ist eine sehr ungenaue Produktbeschreibung.

Das stimmt. Aber es gibt ja fast nur diese Dinger bzw. mir sind nur zwei 
Varianten bekannt.

Hier mal eine Beschreibung inkl. Problemlösung von dem Ding was ich 
habe^^:
http://www.vishnumaiea.in/projects/hardware/interfacing-catalex-micro-sd-card-module

Also ich bin auf jeden Fall nicht allein mit dem Problem. Heute sind 
'neue' Module angekommen (Aufdruck "CATALEX Micro SD Card Adapter v1.0 
11/01/2013").

Habe das aktuelle Modul gegen das Catalex Modul getauscht 
und....gleiches Problem! MISO bleibt bei 3.3V wenn der Slave deaktiviert 
ist.

Es scheint so als hätten alle diese Module mit diesem Aufbau / den 
Komponenten dieses Problem!

von Arduino Fan (Gast)


Lesenswert?

Jim M. schrieb:
> Im SD Protokoll ist der Chip Select übrigens active HIGH...

Ja ich spreche ja die Karte nicht direkt an sondern über einen Adapter. 
Den den ich eben verlinkt habe und die Probleme bereitet. Der SD Karten 
Adapter / Leser wird über die SD Library mit HIGH (deaktiviert) und LOW 
(aktiviert angesprochen):
1
bool sdSelectCard(uint8_t pdrv){
2
    digitalWrite(card->ssPin, LOW);
3
}

Es bleibt dabei. Die Module sind alle samt Mist. Bleibt mir nur diese zu 
ersetzen oder zu löten was sehr fummelig werden dürfte.

von Stefan F. (Gast)


Lesenswert?

Diese Adapter enthalten "richtige" Pegelwandler, aber sie sind so 
verschaltet, dass ihre Ausgänge immer aktiv sind. Kein Tristate.

von Arduino Fan (Gast)


Lesenswert?

Bleibt nur die Frage: was machen?
Löten wir 
http://0x0001.de/hacks/hardwarehack-buskonflikt-durch-lowcost-sdcard-modul-spi/ 
beschrieben oder nach einem anderen Modul suchen? Hat jemand eine 
gute/günstige Alternative zu den Modulen?

von JGP (Gast)


Lesenswert?

Arduino Fan schrieb:
> Der SD Karten Leser funktionierte problemlos, aber ich hatte massive
> Probleme das Audio Modul zu verwenden.

Einfach das Datenblatt lesen. Und schon werden sie geholfen :)

Manche Leute können kein Datenblatt lesen. Ich fasse es nicht !!

von Troll Hunter (Gast)


Lesenswert?

JGP schrieb:
> Einfach das Datenblatt lesen. Und schon werden sie geholfen :)
>
> Manche Leute können kein Datenblatt lesen. Ich fasse es nicht !!

Erst den Thread lesen und verstehen worum es dem Thread Ersteller geht 
und woher die Probleme kommen. Hat nichts mit dem Datasheet zu tun 
sondern mit dem fehlerhaften Modul. Idiot.

von Maxim B. (max182)


Lesenswert?

Arduino Fan schrieb:
> Hat jemand eine
> gute/günstige Alternative zu den Modulen?

Hallo,
wenn keine Lust etwas mit Modul zu machen, dann einfach MISO über Puffer 
schalten, so etwa wie HC125. Hier braucht man allerdings ~CS.

Ich benutze für SD-Card 74AHCT1G125DBVR auf MISO als 3,3/5 Pegelwandler 
und 74LVC14A für 5/3,3, man kann die Inverter sehr bequem zu zweit 
schalten, so bekommt man eine einfachere Platte.

: Bearbeitet durch User
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.