Hi, Ich habe auf Espressif gelesen, dass der ESP32 einen integrierten CAN controller besitzt, jedoch scheint im Datenblatt des ESP32-WROOM nichts dazu zu stehen. https://riot-os.org/api/group__cpu__esp32__esp__can.html#details https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/can.html#overview Jemand eine Idee, wie man da einen externen CAN tranceiver anschließt, damit man auch den integrierten Controller verwenden kann? Grüsse Bert
Bert S. schrieb: > https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/can.html#overview > > Jemand eine Idee, wie man da einen externen CAN tranceiver anschließt, > damit man auch den integrierten Controller verwenden kann? Steht doch alles auf der Seite, die Du verlinkt hast. Wieso die Frage?
John Doe schrieb: > Steht doch alles auf der Seite, die Du verlinkt hast. Wieso die Frage? Es steht schon, dass es mit RX und TX verbunden wird, doch braucht es Pins zu einem internen UART oder kann man da irgendwelche IOs nehmen, die dann über die GPIO Matrix eingestellt werden?
Wenn Du Dir einen normalen High-Speed CAN-Transceiver wie den TJA1051T/3 ansiehst stellst Du fest, dass der sowas wie CLKOUT überhaupt nicht kennt. Und mit dem BUS-OFF Signal könnte man den "S" Pin bedienen, aber normalerweise ist das überflüssig und "S" liegt einfach auf GND. Also CAN_TX and TXD vom Transceiver, CAN_RX an RXD vom Transceiver. Und den TJA1051T/3 habe ich gewählt, weil der 3,3V I/O unterstützt mit einem Pin für die I/O Spannung (Pin 5, VIO). Zusätzlich benötigt der Transceiver aber auch 5V für den CAN an Pin 3 (VCC). Aber Vorsicht, es gibt auch TJA1051T ohne Funktion von Pin 5. Und TJA1051T/E mit "EN" auf Pin 5. Möchte man den ESP32 über den CAN wecken bräuchte man zum Beispiel einen TJA1043.
Rudolph R. schrieb: > Also CAN_TX and TXD vom Transceiver, CAN_RX an RXD vom Transceiver. Das ist schon klar, CAN_TX und CAN_RX sind aber auf dem ESP32 nicht spezifiziert, das ist ja das Problem.
Bert S. schrieb: > John Doe schrieb: >> Steht doch alles auf der Seite, die Du verlinkt hast. Wieso die Frage? > > Es steht schon, dass es mit RX und TX verbunden wird, doch braucht es > Pins zu einem internen UART oder kann man da irgendwelche IOs nehmen, > die dann über die GPIO Matrix eingestellt werden? Steht doch da: The CAN controller’s interface consists of 4 signal lines known as TX, RX, BUS-OFF, and CLKOUT. These four signal lines can be routed through the GPIO Matrix to GPIOs. Verstehe die Frage jetzt nicht.
Richtig, aber wenn Du dem Link von Espressif folgst siehst Du, dass die für das Beispiel GPIO21 und GPIO22 benutzt haben. Also zumindest dieses Paar funktioniert wohl dafür. Vor einer Woche habe ich hier die Frage gestellt, wohin man die Pins routen kann: Beitrag "ESP32 CAN Pins?" Nur eine Antwort gab es darauf nicht. Aber immerhin gibt es ein paar Beispiele die wohl funktionieren. Eine Platine habe ich schon auf CAN_RX = GPI35 CAN_TX = GPIO5 verdrahtet, also wie Olimex das gemacht hat. Und das hat wohl funktioniert, zumindest gab es keine Beschwerden. Meine neue Platine hat CAN_RX = GPIO22 CAN_TX = GPIO21 wie eben bei Espressif, schauen wir mal, die beiden Pins hatte ich zufällig sowieso frei. Woanders hatte ich GPIO4 für CAN_RX gesehen. Möglicherweise kann man die auch fast überall hin legen. Ein externer SPI-CAN-Controller ist vielleicht sogar besser. So mit weniger Bugs und der Möglichkeit CAN-FD zu nutzen. Dem gegenüber steht das CAN durch SPI zu drücken eher unlustig ist wenn man das auch direkt haben kann.
Quellcode-Beispiel ist auch da:
1 | can_general_config_t g_config = CAN_GENERAL_CONFIG_DEFAULT(GPIO_NUM_21, GPIO_NUM_22, CAN_MODE_NORMAL); |
Und unter
1 | struct can_general_config_t |
steht der Rest.
John Doe schrieb: > These four signal lines can be routed through > the GPIO Matrix to GPIOs. Und mit welchen Einschränkungen? Das Problem ist doch nur, dass das nicht dokumentiert ist. Und mit dem Code könnte man auch versuchen CANTX auf GPI34 / GPI35 zu legen.
Rudolph R. schrieb: > John Doe schrieb: >> These four signal lines can be routed through >> the GPIO Matrix to GPIOs. > > Und mit welchen Einschränkungen? > Das Problem ist doch nur, dass das nicht dokumentiert ist. > Und mit dem Code könnte man auch versuchen CANTX auf GPI34 / GPI35 zu > legen. Ja, wenn man meint, sich das Doku-Lesen sparen zu können. Nach kurzem Blick ins Technical Reference Manual würde man Deine Kombi sicherlich nicht mehr nehmen. Jaja, ich weiss, in Zeiten von CubeMX und Arduino ist Lesen verpönt, erst recht, wenn es vierstellig wird...
John Doe schrieb: > Ja, wenn man meint, sich das Doku-Lesen sparen zu können. > Nach kurzem Blick ins Technical Reference Manual würde man Deine Kombi > sicherlich nicht mehr nehmen. Okay, auf welcher Seite des Technical Reference Manual für den ESP32 finde ich denn CANRX und CANTX? In der Tabelle 17 im Kapitel 4.9 "Peripheral Signal List" taucht CAN nicht als Funktion auf welche durch die GPIO Matrix geroutet werden kann. In der Tabelle 18 im Kapitel 4.10 fehlt das ebenso. Es gibt dort auch keine Kapitel "CAN Controller" und der entsprechende I/O Bereich ist als "reserved" markiert. John Doe schrieb: > Jaja, ich weiss, in Zeiten von CubeMX und Arduino ist Lesen verpönt, Glashaus und so.
Rudolph R. schrieb: > John Doe schrieb: >> Ja, wenn man meint, sich das Doku-Lesen sparen zu können. >> Nach kurzem Blick ins Technical Reference Manual würde man Deine Kombi >> sicherlich nicht mehr nehmen. > > Okay, auf welcher Seite des Technical Reference Manual für den ESP32 > finde ich denn CANRX und CANTX? > > In der Tabelle 17 im Kapitel 4.9 "Peripheral Signal List" taucht CAN > nicht als Funktion auf welche durch die GPIO Matrix geroutet werden > kann. > In der Tabelle 18 im Kapitel 4.10 fehlt das ebenso. > Es gibt dort auch keine Kapitel "CAN Controller" und der entsprechende > I/O Bereich ist als "reserved" markiert. > > John Doe schrieb: >> Jaja, ich weiss, in Zeiten von CubeMX und Arduino ist Lesen verpönt, > > Glashaus und so. Genau. Es steht: Note that the I/O GPIO pads are 0-19, 21-23, 25-27, 32-39, while the output GPIOs are 0-19, 21-23, 25-27,32-33. GPIO pads 34-39 are input-only. Damit ist klar, welche Pins als RX und welche als TX genutzt werden können.
John Doe schrieb: > Damit ist klar, welche Pins als RX und welche als TX genutzt werden > können. Warum ist das klar, wo steht das man CAN RX und TX überall hin routen kann? Input-only Pins kann man offensichtlich nicht als Ausgang verwenden, das ist aber auch schon alles was man daraus ableiten kann. Und wenn ich das nicht wüsste hätte ich GPI34 und GPI35 nicht erwähnt.
Ist es denn so schwer: The CAN controller’s interface consists of 4 signal lines known as TX, RX, BUS-OFF, and CLKOUT. These four signal lines can be routed through the GPIO Matrix to GPIOs. und Note that the I/O GPIO pads are 0-19, 21-23, 25-27, 32-39, while the output GPIOs are 0-19, 21-23, 25-27,32-33. GPIO pads 34-39 are input-only. Eine simple Und-Verknüpfung...
John Doe schrieb: > Ist es denn so schwer: Sieht so aus, sonst hättest Du inzwischen mal die Frage verstanden und mit "weiss ich nicht" oder anders beantwortet.
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.