SPI – Probleme mit ISP

Bei der Verwendung des SPI-Busses kann es je nach verbundener Peripherie zu Problemen kommen, sodass der Mikrocontroller nicht mehr per ISP-Anschluss programmierbar ist. Dieser verwendet nämlich ebenfalls die SPI Leitungen. Normalerweise sollte dies kein Problem darstellen, in manchen Fällen aber leider doch.

Das Problem

SD card module
Schaltplan des SD-Karten Moduls.

Bei mir war das der Fall, als ich angefangen habe mich mit SD-Karten zu beschäftigen. Diese kann man ebenfalls per SPI ansteuern, sie benötigen allerdings nur einen Signalpegel von 3,3V. Daher war auf dem von mir bestellten Modul ein Pegelwandler. Und zwar ein LVC125A, der eigentlich ein Bus-Puffer ist, hier aber als Pegelwandler dient, da er 5V und 3,3V kann. Liest man sich die erste Seite des Datenblatts durch, steht dort, dass die Ein- und Ausgänge “Tri-State” sind. Sie können also auch hochohmig sein, was ja sehr gut ist bei SPI, da die Slaves normalerweise auch hochohmig werden, wenn sie nicht per CS ausgewählt werden und somit keiner dazwischen redet. Um das zu gewährleisten muss man beim LVC125A die “Output Enable” Eingänge auf High Potential legen. Das Modul hat allerdings alle OE-Pins einfach mit Masse verbunden. Wodurch die Schaltung nichtmehr per ISP programmiert werden konnte.

Die Lösungen

Lösung 1

sd card module fix
Lösung bei einem anderen Modul. Quelle: forum.arduino.cc

Da die SD-Karte sowieso vor einer Kommunikation per CS ausgewählt werden muss, kann man sich das zunutze machen und den LVC125A dazu bringen seine Ein- und Ausgänge hochohmig zu schalten. CS ist aktive Low, d.h. die SD-Karte ist ausgewählt wenn CS Low Pegel hat und deaktiviert, wenn CS High Pegel hat. Das trifft sich gut, weil der LVC125A auf hochohmig schaltet, wenn High Pegel vorhanden ist und in Normalbetrieb schaltet, wenn Low Pegel vorliegt. Also muss die Verbindung der OE Pins lediglich gekappt werden und mit der CS Leitung verbunden werden.

Lösung 2

Wer nicht am SD-Modul rumlöten möchte und auch nicht auf ultra high Speed SPI aus ist, kann in die SPI-Leitungen einen bidirektionalen triple dualchannel Multiplexer (schöne Bezeichnung übrigens) einbauen. Z.B den 74HC4053. Schließt man die Adressleitungen vom Multiplexer an die Reset-Leitung, so wird bei jedem Progammiervorgang die Adressleitung von High nach Low wechseln und der Multiplexer somit hin und her schalten. Mit dieser Beschaltung ist man bei Einhaltung der Frequenzgrenzen während des Programmierens vollkommen von aller Peripherie getrennt und danach ist der Programmer vom Rest getrennt.

Nachteil

Der Multiplexer ist der Engpass in der Schaltung, was die Übertragungsgeschwindigkeit angeht. Die maximale Geschwindigkeit richtet sich nach der maximalen Geschwindigkeit des Multiplexers. Dem Diagramm im Datenblatt zufolge wären das ca. \(2 \cdot 10^4 kHz\) also knapp 20 MHz die ohne großartige Dämpfung funktionieren sollten. Größere Werte sollten auch noch funktionieren, allerdings wird die Dämpfung oberhalb des o.g. Wertes rapide größer. 

74hc4053 schematic
Beispielbeschaltung eines 74HC4053

 

Ein Kommentar

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.