Ich arbeite an einem Projekt, bei dem ich BME688, CAN, LoRa, SD-Karte, ePaper-Display und WiFi-Modul integriere. Ich verwende das Board Heltec LoRa V2. Und ich habe dieses Pin-Diagramm gefunden . Was ich nicht verstehe, ist, warum sie andere Pins für SPI (mit LoRa) anstelle der vordefinierten verwendet haben. Basierend auf dem ESP32-Datenblatt sind die 2 verfügbaren SPI-Pins diesen Pins zugeordnet:
ESP32 HSPI und VSPI
Meine Frage ist also, was der Vorteil ist, die SPI-Pins zu ändern (und wie ist das überhaupt möglich)? Beim Lesen der offiziellen Dokumentation von espressif wird etwas über GPIO-Matrix und IOMUX erwähnt. Wo es folgendes heißt
Die meisten Peripheriesignale in ESP32 können direkt mit einem bestimmten GPIO verbunden werden, der als IOMUX-Pin bezeichnet wird. Wenn ein Peripheriesignal zu einem anderen Pin als seinem IOMUX-Pin geleitet wird, verwendet ESP32 die weniger direkte GPIO-Matrix, um diese Verbindung herzustellen.
Wenn der Treiber so konfiguriert ist, dass alle SPI-Signale auf ihre spezifischen IOMUX-Pins gesetzt sind (oder nicht verbunden sind), umgeht er die GPIO-Matrix. Wenn ein SPI-Signal auf einen anderen Pin als seinen IOMUx-Pin konfiguriert ist, leitet der Treiber automatisch alle Signale über die GPIO-Matrix. Die GPIO-Matrix tastet alle Signale mit 80 MHz ab und sendet sie zwischen dem GPIO und dem Peripheriegerät.
Wenn die GPIO-Matrix verwendet wird, können sich Signale schneller als 40 MHz nicht ausbreiten und die Einrichtungszeit von MISO wird leichter verletzt, da die Eingangsverzögerung des MISO-Signals erhöht wird. Die maximale Taktfrequenz mit GPIO-Matrix beträgt 40 MHz oder weniger, während die Verwendung aller IOMUX-Pins 80 MHz zulässt.
Für mich ist das etwas Neues, ich habe noch nie davon gehört. Wenn jemand erklären kann, was los ist und den Grund für diese Pin-Wahl kennt, wäre ich dankbar. Kann mir außerdem jemand helfen, die Pins für den freien SPI zu definieren (da einer vom LoRa-Modul verwendet wird). Ich möchte den Oled-Bildschirm, der mit dem Modul geliefert wird, fallen lassen und stattdessen ein ePaper-Display verwenden.
Die Kurzgeschichte der SPI-Pins lautet:
Da die meisten Peripheriegeräte eine maximale SPI-Geschwindigkeit von deutlich weniger als 40 MHz haben, ist dies oft nicht relevant. Sie können also beliebige GPIO-Pins nehmen.
Mit dem Heltec-Board ist die Wahl bereits für Sie getroffen. Ich habe keine Ahnung, warum sie sich für diesen speziellen Satz von Pins entschieden haben. Möglicherweise hat es die Leiterplatte vereinfacht.
Ich kenne die Details Ihrer Peripheriegeräte nicht. Aber nehmen wir an, Sie haben Geräte, die sowohl über SPI als auch über I2C verbunden sind.
I2C und SPI sind Busse. So können mehrere Geräte an denselben Bus angeschlossen werden. Daher muss kein separater SPI- oder I2C-Bus verwendet werden. Sie können die von Heltec ausgewählten SPI-Busse einfach wiederverwenden:
Jedes SPI-Gerät benötigt eine separate CS-Leitung. Sie können aus den verbleibenden GPIOs wählen: 0, 2, 12, 13, 17, 22, 23.
Pins ab 32 aufwärts sind auch als GPIOs verfügbar, können aber nur als Input-Pins arbeiten. Sie sind also nicht als CS-Signal geeignet.
Pin 16 kann verwendet werden, wenn die OLED nicht verwendet wird. Ich kann Ihnen nicht sagen, ob dies auch für 4 und 15 gilt, da sie möglicherweise mit Pull-up-Widerständen verbunden sind. Daher ist es wahrscheinlich besser, diese Pins wie vorgesehen für I2C zu verwenden und Ihre I2C-Geräte daran anzuschließen.
Für Arduino IDE,
Sie können die Pins von pins_arduino.h ändern
Stellen Sie sicher, dass Sie es für das richtige Board ändern. Unten war der Pfad für mich C:\Users\USER\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\variants\doitESP32devkitV1
Roh
Roh
Kodo
Roh
Kodo
hspi.begin(2, 12, 13);
...