seltsames Verhalten bei zweimaliger SPI-Übertragung

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

Moderator: Guido Körber

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

seltsames Verhalten bei zweimaliger SPI-Übertragung

Post by Franz Peter Zantis »

Anbei zwei Diagramme die mit unten stehenem Code enstanden. Zunächst werden nur Nullen gesendet. Dann wird eine bestimmte Zahl gesendet. Das Diagramm, dass beim Senden der Nullen aufgenommen wurde zeigt, dass der Ausgang zwischen der Übertragung zweier Byte auf High springt. Auch nach der Übertragung des zweiten Byte springt der Ausgang auf High (diagram1.png). Dieser Effekt behindert die Datenübertragung mit manchen Chips. Was ist falsch?

lspisettings(0) = &H8
lspisettings(1) = &H1
lspisettings(2) = &H4
lspisettings(3) = 250
ret = IowKitWrite(iohandle, 1, lspisettings(0), 64)

iowrite(2) = ClearBit(iowrite(2), 0)
ret = IowKitWrite(iohandle, 0, iowrite(0), 8)

lspidata(0) = &H9
lspidata(1) = 2
lspidata(2) = 0
lspidata(3) = &H0 'Hbyte
lspidata(4) = &H0 'Lbyte
ret = IowKitWrite(iohandle, 1, lspidata(0), 64)
ret = IowKitRead(iohandle, 1, lspidata(0), 64)

iowrite(2) = SetBit(iowrite(2), 0)
ret = IowKitWrite(iohandle, 0, iowrite(0), 8)

iowrite(2) = ClearBit(iowrite(2), 0)
ret = IowKitWrite(iohandle, 0, iowrite(0), 8)

lspidata(0) = &H9
lspidata(1) = 2
lspidata(2) = 0
lspidata(3) = lwert(1) 'Hbyte
lspidata(4) = lwert(0) 'Lbyte
ret = IowKitWrite(iohandle, 1, lspidata(0), 64)
ret = IowKitRead(iohandle, 1, lspidata(0), 64)

iowrite(2) = SetBit(iowrite(2), 0)
ret = IowKitWrite(iohandle, 0, iowrite(0), 8)
Attachments
diagram2.png
diagram2.png (111.84 KiB) Viewed 7057 times
diagram1.png
diagram1.png (106.74 KiB) Viewed 7057 times

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

Re: seltsames Verhalten bei zweimaliger SPI-Übertragung

Post by Guido Körber »

Hallo Herr Zantis,
da ist nicht wirklich was falsch, der Pegelwechsel passiert weil das Nachladen des Senderegisters im IOW56 nicht beliebig schnell geht und kein Doublebuffering in der Hardware vorhanden ist, damit geht die Leitung kurzzeitig auf Idle bis das nächste Byte kommt. Die SPI Slaves sollten den Zustand der Datenleitung zwischen den Taktflanken ignorieren, das ist ein Protokollfehler auf der Slave-Seite und zwar einer für den man Aufwand treiben muss damit der passiert.

Post Reply