Forum: Mikrocontroller und Digitale Elektronik [Pi4] GPIO-Probleme


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Mampf F. (mampf) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

ich hab eine Raspberry Pi kompatiblen HAT, auf dem ein FPGA-Modul ist. 
Das JTAG ist an den GPIOs des Pis angeschlossen (TCK GPIO12, TMS GPIO16, 
TDI GPIO20, TDO GPIO21).

Auf einem Pi3 funktioniert OpenOCD mit BCM2835-Interface wunderbarst. 
FPGA wird in sowas 8s konfiguriert und es funktioniert quasi immer.

Für den Pi4 hab ich herausgefunden, dass die Basisadresse eine andere 
ist (0xfe000000) und ich hab für OpenOCD Koeffizienten für das 
BCM2835-Interface gefunden, mit dem das Timing an den Pi4 angepasst 
wird.

Funktionierte erstmal überhaupt nicht - wenn ich die Koeffizienten so 
anpasse, dass der Clock ca. 300kHz langsam ist, klappt es - aber nicht 
immer (und dauert fast 30 Sekunden).

Über sysfs klappte es, aber ist noch langsamer.

Ich frag mich, wieso reproduzierbar der HAT nicht auf einem Pi4 geht 
(drei Pi4 getestet mit 5 HATs und insgesamt 15 Modulen^^), aber ohne 
Probleme und mit wunderbarer Geschwindigkeit auf einem Pi3.

Ich weiß, dass der Pi4 andere Register für die GPIO Pull-Ups und -Downs 
hat, aber die werden nicht benutzt.

Mittlerweile vermute ich, dass die GPIOs nicht sauber auf Ausgang 
geschaltet werden, konnte aber noch nicht mit einem Oszi draufschauen.

Alternativ dachte ich auch daran, dass die GPIOs vlt von einer 
Peripherie benutzt werden, aber im Device-Tree des Raspian Busters 
findet man nicht disbezügliches.

Etliches Googeln hat mich leider nicht schlauer gemacht und solche 
Probleme hab ich sonst keine gefunden (außer das bereits Bekannt mit 
Basisadresse und PUPs/PUDs).

Hat jemand ähnliche Beobachtungen gemacht?

Viele Grüße,
Mampf

*edit*: Ich hab auch ein anderes Program zum Konfigurieren des FPGAs 
ausprobiert. Ich glaube es hieß irgendwas mit xvcpi oder so - ein 
Xilinx Virtual Cable driver für einen Pi, mit dem man sich vom Vivado 
hardware-manager hinconnecten und die GPIOs als Virtual JTAG Cable 
benutzen kann. Funktioniert auf einem Pi3 super, auf einem Pi4 wieder 
gar nicht.

: Bearbeitet durch User
von Gerald M. (gerald_m17)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Mampf,

leider kann ich dir nicht helfen. Ich wollte allerdings fragen ob du 
mittlerweile herausgefunden hast woran es liegt.
Ich wollte einen STM32 programmieren, was mit dem alten Raspberry super 
funktioniert (per SWD über OpenOCD) mit dem neuen (auch mit angepasster 
Baseaddress) allerdings gar nicht :(

von Mampf F. (mampf) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Gerald M. schrieb:
> Hallo Mampf,
>
> leider kann ich dir nicht helfen. Ich wollte allerdings fragen ob du
> mittlerweile herausgefunden hast woran es liegt.
> Ich wollte einen STM32 programmieren, was mit dem alten Raspberry super
> funktioniert (per SWD über OpenOCD) mit dem neuen (auch mit angepasster
> Baseaddress) allerdings gar nicht :(

Hallo Gerald,

ja mittlerweile funktioniert alles.

Die Probleme waren weg, als ich in der /boot/config.txt die 
Pull-Ups/Downs deaktivierte, die wohl standardmäßig an sind.

Sah bei mir (für JTAG) dann in etwa so aus:
# risc-v reset to pull-up
gpio=19=pu

# fpga jtag
# tck
gpio=12=pn
# tms
gpio=16=pn
# tdi
gpio=20=pn
# tdo
gpio=21=pu

Vlt ist es bei dir auch soetwas - die Pullup/down werden von der 
Software für Pi3 nicht konfiguriert, weil die Adressen andere sind.

So nebenbei ... Gestern erst gesehen:
https://medium.com/@ly.lee/openocd-on-raspberry-pi-better-with-swd-on-spi-7dea9caeb590

Dort wird SWD über SPI gemacht, was wesentlich schneller ist :)

Vielleicht funktioniert das auch auf dem Pi4 :)

Viele Grüße,
Mampf

von Gerald M. (gerald_m17)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und schon mal vielen Dank!

Das SWD über SPI habe ich bei der Suche nach der Lösung meines Problems 
auch schon entdeckt, nur brauche ich auch die SPI-Schnittstelle zur 
Übertragung von Daten zum Mikrocontroller.
Ich komme von der Mikrocontroller Seite und den Charm den der Raspberry 
für mich ausmacht ist der, dass das meiste ohne viel zutun funktioniert 
(wenn es nicht funktioniert bin ich meist aufgeschmissen und muss viel 
googlen).
Aktuell habe ich den Mikrocontroller wie angehängt an den Raspberry 
angebunden um:
- debuggen und programmieren zu können
- Via UART Befehle senden zu können
- Via SPI live-Daten auszutauschen

Ich glaube wenn man beispielsweise eine weitere SPI-Schnittstelle über 
die Alternativen GPIO Funktionen hinzufügt und diese dann für z.B. die 
live-Daten benutzt funktioniert eventuell etwas anderes nicht mehr, was 
sich bei einem Raspberry deutlich schlechter herausfinden lässt als bei 
einem normalen Mikrocontroller...

Oder sind meine "Ängste" unbegründet?

Danke und liebe Grüße
Gerald

von Mampf F. (mampf) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Gerald M. schrieb:
> Ich glaube wenn man beispielsweise eine weitere SPI-Schnittstelle über
> die Alternativen GPIO Funktionen hinzufügt und diese dann für z.B. die
> live-Daten benutzt funktioniert eventuell etwas anderes nicht mehr, was
> sich bei einem Raspberry deutlich schlechter herausfinden lässt als bei
> einem normalen Mikrocontroller...
>
> Oder sind meine "Ängste" unbegründet?

Hmm schwer zu sagen ... Ängste können zerstreut werden, indem man es 
einfach ausprobiert und feststellt, dass es geht - oder nicht :)

von Gerald M. (gerald_m17)


Bewertung
0 lesenswert
nicht lesenswert
Ja, das stimmt schon. Ich werde vermutlich SWDIO und SWD_CLK auf GPIO20 
und GPIO21 legen, so kann ich zunächst das Bitbanging nutzen. Falls mich 
die Geschwindigkeit zu sehr stört habe ich wenigstens so die Möglichkeit 
durch Zeiteinsatz das SWD Interface über den SPI1 Kanal laufen zu 
lassen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.