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.
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.
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.
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"
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.