SWD Protokoll, SWCLK Polarität

Gast #6418957
Lesenswert?

Kennt sich hier jemand mit dem SWD Protokoll aus? Welche Polarität hat 
Clock:
CPOL=0, also im Ruhezustand 0 und clock ist 0-1 oder
CPOL=1, also im Ruhezustand 1 und clock ist 1-0 ?

Ich habe unterschiedliche Angaben gefunden, z.B. ist hier ein buntes 
Diagramm mit CPOL=0:
https://www.cnblogs.com/shangdawei/p/4748751.html
In der Black Magic Probe wird mit positiven Pulsen gearbeitet (schon 
seit dem Urcode von vor 10 Jahren) und der SWD Decoder von Saleae zeigt 
auch nur richtig bei positiven Pulsen an.

Dagegen arbeitet DAP Link von ARM mit negativen Pulsen, oder auch diese 
Mbed Implementierung:
https://os.mbed.com/users/va009039/code/SWD//file/794d2801ff94/SWD.cpp/
https://github.com/ARMmbed/DAPLink/blob/f28bbfd7b39bcad07aa451dde74ddc180734b04b/source/daplink/cmsis-dap/SW_DP.c
oder der Beispielcode für EFM32:
https://www.cnblogs.com/shangdawei/p/4753040.html

ich bin sehr verwirrt...

Hintergrund ist: ich habe eine BMP mit Ethernet gebaut und die 
funktioniert gut mit STM32F1 und F4, aber beim H7 hakt es. Es gibt 
ständig verschiedene Protokollfehler. Beim low level analysieren bin ich 
jetzt auf diesen Unterschied in der Polarität gestossen. Die BMP 
Software selber ist für den F1 geschrieben, mit einem Bluepill kann ich 
den H7 auch programmieren und debuggen. BMP kann also nicht schlecht 
sein.
Bei meiner Portierung laufen im Moment mehr Debugausgaben über die 
serielle und Ethernet Interrupts kommen dazu. Aber wenn das Protokoll 
richtig implementiert ist sollten Ints nicht stören, es erfolgen ja 
immer Reaktionen auf den clock den der Host selber produziert.
Gast #6419280
Lesenswert?

Doch z. B. B4.2.2, Fig. B4-2 zeigt, dass jedes Bit mit einer steigenden 
Taktflanke beginnt.

Die älteren Datenblätter von ST sind hinsichtlich SWD etwas schweigsam, 
aber bei den H7er siehts etwas besser aus, z. B. in dem vom STM32H735xG, 
Table 123 und Fig. 73: setup und hold etc. beziehen sich auf die 
steigende Flanke von SWCLK. Dies bezieht sich jetzt allerdings auf auf 
den "slave", also den uC. Der "master" oder "host" oder wie man auch 
sonst sagen will, wird dann allerdings sinnvollerweise immer auf die 
fallende Flanke triggern, da angesichts der nicht absehbaren 
Leitungsparameter sonst die setup und hold Zeiten nicht garantiert 
werden können, insbesondere weil ja auch noch Pegelwandler im Pfad sein 
können.
Gast #6419288
Lesenswert?

nach langer Session gestern bin ich sicher das CPOL nicht relevant ist,
nach B4.3.1 in 'Arm® Debug Interface Architecture Specification ADIv5.0 
to ADIv5.2'
1
When the target samples SWDIO, sampling is performed on the rising edge of SWCLK. When the target drives
2
SWDIO, or stops driving it, signal changes are performed on the rising edge of SWCLK.

ist das aus Sicht der core IP Entwickler komplett beschrieben.

Das Problem das ich habe scheint im Timing zu liegen, ich verfolge den 
Tipp weiter den ich hier bekommen habe: 
Beitrag "Re: Black Magic Probe für PC (hosted) in WSL kompilieren"
Gast #6419289
Lesenswert?

Ach ja, noch eine Sache: "Ruhezustand" im Sinne von SWCLK ändert sich 
nicht, ist eigentlich (außer für längere Pausen) NICHT vorgesehen, 
vielmehr läuft SWCLK einfach weiter, während SWDIO auf '0' bleibt. Erst 
mit mit dem nächsten Startbit '1' beginnt das nächste Paket.
Das ist also vollkommen anders als üblicherweise bei SPI.
Gast #6419310
Lesenswert?

da haben sich unsere Antworten überschnitten. In B4.3.4 ist ein Beispiel 
wo ein clock cycle 1-0 ist. Aber es geht wie geschrieben auch andersrum, 
der kritische Punkt ist nur bei read nach dem ACK, da muss man sich 
darauf verlassen das SWDIO schon auf dem Pegel vom 1. Datenbit ist, aber 
das ist wohl so. Bei clock 1-0 muss vor dem clock das Datenbit gelesen 
werden, bei 0-1 clock zwischen 0 und 1. Positiver clock hat den Vorteil 
das der Saleae Dekoder das richtig darstellt, eine Option für negativen 
Takt hat der nicht.

Das Problem mit dem Ruhezustand könnte schon eher sein, ich habe Fälle 
wo nach dem request keine Antwort mehr kommt, das SWD also beleidigt 
abgeschaltet hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren