Hallo zusammen,
ich nehme gerade meine erste SPI Schnittstelle in Betrieb und habe
Probleme. Als Hardware habe ich einen Arduino DUE (ATSAM3X8E) als SPI
Master und ein SPI Device (Hilscher netx51).
Ich habe im ersten Schritt nur das Clock Signal und Chip Select
verbunden! MISO und MOSI ist nicht am SPI Device angeschlossen. Mit
meinem Oszi kann ich nun alle Signale am Oszi messen. Alles funktioniert
super. Chip select, Clock und MOSI gehen richtig raus und auf der MISO
Leitung stehen ebenfalls gültige und richtige Daten an. Sobald ich aber
nun die MISO Leitung an meinen Arduino DUE anschliesse, kann ich keine
Signale mehr auf MISO und MOSI messen. Chip Select und Clock sind nach
wie vor ok.
Irgendwelche Ideen an was das liegen könnte?
Wie hast du die denn verbunden? Zum netX51 finde ich nur
Übersichtsblätter, aber keinerlei Datenblatt. Wäre es möglich, das mal
hier zu verlinken und den Schaltplan zu posten?
Normalerweise wird MISO mit MISO und MOSI mit MOSI verbunden. Das hast
du auch so gemacht?
Ja, genauso habe ich es verbunden. Das habe ich auch schon öfters
überprüft. Das passt auf jeden Fall. Ich habe Controllerpin A25 (MISO)
mit Ader 10 verbunden und Controllerpin A26 (MOSI) mit Ader 9. Ich habe
dazu noch folgende Ideen:
- Sowohl Arduino wie auch das SPI Device laufen mit 3.3V. Könnte dies
Probleme machen, da auf dem SPI Stecker (am Arduino) 5V mit drauf sind,
oder sollte SPI ebenfalls mit 3.3V problemlos funktionieren?
- Irgendwelche Potentialprobleme in der Schaltung? Allerdings relativ
unwahrscheinlich, da ich das SPI Device über die 3.3V
Spannungsversorgung aus dem Arduino Board versorge und ausser SPI sonst
gar nichts mehr angeschlossen habe
- Eventuell MISO und MOSI Pin falsch konfiguriert. Ich bin aber der
Meinung, daß ich im Programm die Pins auf Peripherie konfiguriert habe
und nicht über PIO Controller.
ekon schrieb:> - Sowohl Arduino wie auch das SPI Device laufen mit 3.3V. Könnte dies> Probleme machen, da auf dem SPI Stecker (am Arduino) 5V mit drauf sind,> oder sollte SPI ebenfalls mit 3.3V problemlos funktionieren?
Solange 5V nirgends an die 3,3V-Logik angeschlossen wird, ist das kein
Problem. Wenn beide Halbleiter mit 3,3V arbeiten, dann ist das so
richtig.
> - Irgendwelche Potentialprobleme in der Schaltung? Allerdings relativ> unwahrscheinlich, da ich das SPI Device über die 3.3V> Spannungsversorgung aus dem Arduino Board versorge und ausser SPI sonst> gar nichts mehr angeschlossen habe
Vielleicht. Komisch ist, dass beim Verbinden von MOSI und MISO (während
CLK und GND bereits verbunden sind) plötzlich nichts mehr passiert.
Könnte es sein, dass der Takt noch vorhanden ist, die Pegel der beiden
Leitungen aber auf Masse bleiben, weil Nullen ausgegeben werden?
Hast du den richtigen SPI-Mode?
> - Eventuell MISO und MOSI Pin falsch konfiguriert. Ich bin aber der> Meinung, daß ich im Programm die Pins auf Peripherie konfiguriert habe> und nicht über PIO Controller.
Passt aber nicht dazu, dass was zu sehen ist, solange nur CLK und GND
verbunden sind, oder?
Also der Takt ist immer ok, auch wenn ich die MISO Leitung anschliesse
(Chip select auch). ich glaube nicht daß ich nullen ausgebe und auch
nicht das ich nullen zurückbekomme. Ich kann es definitiv am Oszi sehen,
daß sobald ich den Pin verbinde die Leitung auf 0 bleibt. Es scheint so
auf der MISO Leitung als wolle das SPI Device teilweise eine 1 setzen,
aber dies nicht "schafft". Ich kann dies an einem leichten Zappeln am
Anfang sehen wo normalerweise eine 1 zurückkommen sollte.
Laut Datenblatt soll das Device mit SPI Mode 3 betrieben werden. Dies
mache ich auch (siehe Statusflags im Anhang). Ich habe aber gerade auch
mal eben alle anderen SPI Modes durchgespielt. Es ändert sich nichts.
Wurde der MISO-Pin am Controller vielleicht als Ausgang gesetzt (falls
das überhaupt geht)?
Prüfung ginge mit einem Pullup-Widerstand gegen 3,3V. Ich vermute mal,
3k..10k wären okay. Aber erstmal mit 10k anfangen.
Ok, den Test mach ich dann morgen. Einfach einen 10k Pullup Widerstand
von MISO auf 3.3V. Wenn der Pin trotzdem auf 0V bleibt ist dieser wohl
aus Ausgang definiert und auf False geschrieben. Richtig?
Generell müssten alle 4 Pins im PIO Status Register auf 0 sein, um hier
sicherzustellen, daß Peripherie angewählt ist und nicht der PIO
Controller den Pin schaltet.Zudem muss MISO im Output Status Register
auf 0 sein und die anderen 3 Leitungen auf 1. Richtig?
Ich bin mir sicher, daß die Belegung passt. Zudem hab ich die Kabel auch
schon mal vertauscht um sicherzugehen, daß nicht was falsch in der einen
oder anderen Doku drin steht. Das Problem bleibt aber... Leider.
Ich fürchte, zu der Konfiguration des Controllers kann ich mangels
Erfahrung leider nichts sagen.
Ich denke aber, dass der Pullup-Test zeigt, ob es das sein kann.
Hallo,
ich habe nun heute deinen Pullup-Test durchgeführt. Vielen Dank nochmals
für den Tip. Es ist wirklich so, daß der MISO Pin immer auf Low bleibt!!
Das heißt jetzt für mich ich muss mein Programm durchforsten um den Pin
auf Input zu schalten. Richtig?
Ja, zum einen das. Schaue parallel aber auch mal nach Kurzschlüssen.
Und, auch wenn schon öfters gemacht, kontrolliere besser nochmal, dass
MOSI und MISO wirklich nicht vertauscht sind.
Obwohl der Test leicht ist, da beim Senden Daten aus MOSI kommen...