Hallo, ich verwende einen ESP32 mit einem SN65HVD230 CAN-Transceiver und den ESP32 standard Funktionen für CAN (keine Bibliothek). Das funktioniert gut auf 125Kb/s, aber nicht mit höheren Bitraten. Die Ziel-Bitrate ist 500Kb/s, aber dabei bekomme ich einen ESP_ERR_INVALID_STATE Fehler. Ich habe es schon ohne Verbindung zu einem CAN Bus getestet, mit einem Abschlusswiderstand und an den Bus angeschlossen, jedes Mal das gleiche Ergebnis. Leider habe ich nur ein analoges Oszilloskop und einen Logicanalyzer für die Fehlersuche, falls das ein Hardware Problemen ist. Irgendwelche Ideen, was der Fehler sein könnte?
1 | #include "driver/gpio.h" |
2 | #include "driver/can.h" |
3 | |
4 | can_message_t message; |
5 | |
6 | void setup() { |
7 | Serial.begin(115200); |
8 | |
9 | can_general_config_t g_config = CAN_GENERAL_CONFIG_DEFAULT(GPIO_NUM_4, GPIO_NUM_5, CAN_MODE_NO_ACK); |
10 | can_timing_config_t t_config = CAN_TIMING_CONFIG_500KBITS(); |
11 | can_filter_config_t f_config = CAN_FILTER_CONFIG_ACCEPT_ALL(); |
12 | |
13 | can_driver_install(&g_config, &t_config, &f_config); |
14 | can_start(); |
15 | |
16 | message.identifier = 0x23; |
17 | message.flags = CAN_MSG_FLAG_EXTD; |
18 | message.data_length_code = 1; |
19 | message.data[0] = 0x04; |
20 | }
|
21 | |
22 | void loop() { |
23 | esp_err_t error = can_transmit(&message, pdMS_TO_TICKS(4300)); |
24 | if (error != ESP_OK) Serial.println(esp_err_to_name(error)); |
25 | delay(500); |
26 | }
|