Forum: Mikrocontroller und Digitale Elektronik SWD Protokoll, SWCLK Polarität


von Johannes S. (Gast)


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.

von A. B. (Gast)


Lesenswert?

SWD ist vor ARM, also zieht man NUR die Doku von ARM zu Rate: ARM IHI 
0031D oder ggf. eine neuere Version.
Irgendwelche Beispielimplementationen sind nett, aber nicht relevant.

von Johannes S. (Gast)


Lesenswert?

in genau dieser ARM Doku bin ich nicht fündig geworden.

von A. B. (Gast)


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.

von Johannes S. (Gast)


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"

von A. B. (Gast)


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.

von Johannes S. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.