SPI mit Fehlern?

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

SPI mit Fehlern?

Post by Franz Peter Zantis »

Mit der folgenden Routine werden Sektoren zu jed 512 Byte einer SD-Karte ausgelesen. Dies funktioniert bis zum Sektor 47. Im Sektor 48 ändert sich plötzlich das Verhalten des SPI-Bus. Tatsächlich kann die SD-Karte mit einem anderen Kontroller vollständig ausgelesen werden (also nicht nur bis zum Sektor47).
Dazu gibt es zwei Diagramme. In einem Diagramm ist die fehlerfreie SPI-Übertragung zu sehen. Im anderen Diagramm erkennt man, dass der SPI-Bus ohne erkennbaren Grund eine Pause einlegt und danach 6 Byte ganz schnell hintereinander einliest. Dies führt dann nach kurzer Zeit zum Absturz des Programms bzw. man erhält zunächst falsche Werte.

'Trigger to low (P0.0)
IOdatawrite(1) = ClearBit(IOdatawrite(1), 0)
intret = IowKitWrite(IOhandle, 0, IOdatawrite(0), 8)
'getting data from the SD-Card; 512 Byte
For lcounter = 1 To 512
IOspidata(0) = &H9
IOspidata(1) = 1 'reading 1 Byte
IOspidata(2) = &H0 'flags
intret = IowKitWrite(IOhandle, 1, IOspidata(0), 64)
IOspidata(2) = &HFF
intret = IowKitRead(IOhandle, 1, IOspidata(0), 64)
sdreadsector(lcounter) = IOspidata(2)
If datasetcounter = 1012 Then
'only one specific sector will be shown in the Immediate Window
Debug.Print(CStr(triggercounter) & " " & CStr(datasetcounter) & " value " & Convert.ToString(sdreadsector(lcounter), 16))
End If
Next lcounter
'Trigger to high (P0.0)
IOdatawrite(1) = SetBit(IOdatawrite(1), 0)
intret = IowKitWrite(IOhandle, 0, IOdatawrite(0), 8)
Attachments
SPI.mit.Fehler_k.gif
SPI.mit.Fehler_k.gif (297.42 KiB) Viewed 9186 times
SPI.ohne.Fehler_k.gif
SPI.ohne.Fehler_k.gif (270.9 KiB) Viewed 9186 times
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI mit Fehlern?

Post by Guido Körber »

Also ohne Beschreibung was für Signale (abgesehen von Data und Clock, die sind ja zu erkennen) da gezeigt werden ist das leider nicht wirklich zu verstehen.

Aber eine Frage stellt sich mir direkt: Warum werden die Bytes einzeln gelesen? Der IOW56 kann bis zu 61 Datenbytes in einem SPI-Report transportieren, das erhöht den Durchsatz ganz gewaltig.
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: SPI mit Fehlern?

Post by Franz Peter Zantis »

Also die Signale von oben nach unten:

oben:
Gelb: Triggersignal (P0.0 geht von high auf low)
Rot: SPI-Clock
Blau: MISO

unten:
dasselbe nochmal allerdings ein kleiner gezoomter Bereich

Das lesen von mehr als einem Byte funktioniert nicht mit SD-Karten.
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI mit Fehlern?

Post by Guido Körber »

Das mit dem Lesen von einzelnen Bytes ist aber nicht schön. Sind Sie sicher, dass das nicht anders geht?

Betreffs der Verzögerungen: Siehe anderer Thread.
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: SPI mit Fehlern?

Post by Franz Peter Zantis »

Aber beim SPI-Datenverkehr hole ich doch die Input-Reports ab. Das geht doch gar nicht anders. Beim SPI muss doch schreiben und lesen um Daten zu erhalten.
Der Trigger wird aufgrund der IF-Anweisung nur ein einziges mal ausgeführt. habe gerade nach der Write-Anweisung eine Read-Anweisung eingefügt, aber das hat die Verzögerung nicht geändert. Sie beträgt immer noch 7 Byte. Das heißt vor dem Trigger wurden schon 7 Byte übertragen.
Anbei nochmal der Code.
Attachments
WarriorSPIProblem.gif
WarriorSPIProblem.gif (16.36 KiB) Viewed 9173 times
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI mit Fehlern?

Post by Guido Körber »

Der Report muss jedes mal abgeholt werden, sonst sammeln die sich im Puffer und man bekommt ggf. beim nächsten mal sofort einen Report, weil ja noch einer im Puffer war.
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: SPI mit Fehlern?

Post by Franz Peter Zantis »

Innerhalb der Schleife For lcounter=1 To 512 bis Next lcounter
wird kein IO-Report erzeugt und die SPI-Antworten werden aufgefangen weil lesen über SPI nur mit Write/Read geht.

Wie kann es also sein, das ein paar der 512 Byte ordentlich gelesen werden und dann plötzlich kommt ein Aussetzer?
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI mit Fehlern?

Post by Guido Körber »

Wie ist die Schaltung aufgebaut? Ist das auf dem Board das wir auch hier haben?
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: SPI mit Fehlern?

Post by Franz Peter Zantis »

Nein, es ist eine direkte Verbindung zwischen dem IO-Warrior56 und einer SD-Karte. Der Fehler tritt beim Lesen der Daten auf. Die Initialisierung der SD-Karte funktioniert dagegen ohne Probleme. Die SD-Karte wird mit 3,3V betrieben. Die Pullup-Widerstände sind beim IO-Warrior abgeschaltet. Die Pins sind direkt miteinander verbunden (Clock, CS, MISO, MOSI).
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI mit Fehlern?

Post by Guido Körber »

Haben Sie mal ein Bild davon? Ist für die SD-Karte ein Kondensator in der Nähe?
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: SPI mit Fehlern?

Post by Franz Peter Zantis »

Anbei ein Foto vom Versuchsaufbau. IO-Warrior56 und SD-Karte sind über den SPI-Bus direkt miteinander verbunden. Die Spannungsversorgung der SD-Karte ist mit einem 100nF-Kondensator (SMD) abgeblockt.
Warrior.und.SD-Karte.jpg
Warrior.und.SD-Karte.jpg (341.12 KiB) Viewed 9024 times
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI mit Fehlern?

Post by Guido Körber »

Ich les mich grad in die SD-Card Spec ein, wir werden mal versuchen das hier nachzustellen, wird aber wahrscheinlich nicht mehr vor Weihnachten.
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: SPI mit Fehlern?

Post by Franz Peter Zantis »

Hallo Herr Körber,

gibt es denn hier etwas Neues?


Viele Grüße

Franz Peter Zantis
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI mit Fehlern?

Post by Guido Körber »

Die Einzelteile zum Testen sind da, mir ist momentan eine Erkältung dazwischen gekommen :(
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI mit Fehlern?

Post by Guido Körber »

Eine Sache über die ich grad gestolpert bin: Die SPI Signale haben externe Pullups zu 3,3 V bekommen?

Was ich nicht verstehe ist, wo die Information her kommt, dass per SPI nur jeweils ein Byte aus der SD Karte gelesen werden kann. Die SD Spec ist ja sehr umfangreich, aber ich finde da nur Bezug auf Blockgrößen von max. 512 Byte.
Post Reply