CoreS3 + PWRCAN 13.2 Module working demo required
-
Hi,
The current demo code from git will fail on compile.
https://github.com/m5stack/M5Stack/blob/master/examples/Unit/CAN/CAN.ino
C:\Users\Sen\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.3/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_reg.h:21,
from d:\Arduino\libraries\ESP32CAN\src\CAN.c:38:
d:\Arduino\libraries\ESP32CAN\src\CAN.c: In function 'CAN_init':
d:\Arduino\libraries\ESP32CAN\src\CAN.c:173:26: error: # 'DPORT_PERIP_CLK_EN_REG' undeclared (first use in this function); did you mean 'SYSTEM_PERIP_CLK_EN1_REG'?
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~
C:\Users\Sen\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.3/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:67: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)If use the sample code from here (by using driver/twai.h)
https://github.com/m5stack/M5AtomS3/issues/26
The build is passed but fail to send the message
[ 1000][I][esp32-hal-psram.c:96] psramInit(): PSRAM enabled
[ 1023][I][M5GFX.cpp:732] init_impl(): [M5GFX] [Autodetect] load from NVS : board:10
[ 1026][D][M5GFX.cpp:694] _read_panel_id(): [M5GFX] [Autodetect] read cmd:04 = 7f0000e3
[ 1027][I][M5GFX.cpp:1515] autodetect(): [M5GFX] [Autodetect] board_M5StackCoreS3
[ 1187][V][Touch_FT5x06.cpp:63] _check_init(): [FT5x06] CIPHER:0x64 / FIRMID:0x05 / VENDID:0x02
[ 1190][W][Power_Class.cpp:434] setExtOutput(): [Power] setExtPower(true) is canceled.
[ 1227][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1228][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1416][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1417][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1419][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1426][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1442][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1452][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1453][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1464][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1465][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
[ 1468][V][common.cpp:1403] writeBytes(): [LGFX] i2c write error : ack wait
Driver installed
Driver started
CAN Alerts reconfigured
Message queued for transmission
Alert: TWAI controller has become error passive.
Alert: A (Bit, Stuff, CRC, Form, ACK) error has occurred on the bus.
Bus error count: 2
Alert: The Transmission failed.
TX buffered: 0 TX error: 136 TX failed: 1
Message queued for transmission
Alert: A (Bit, Stuff, CRC, Form, ACK) error has occurred on the bus.
Bus error count: 3
Alert: The Transmission failed.
TX buffered: 0 TX error: 144 TX failed: 2
Message queued for transmission
Alert: A (Bit, Stuff, CRC, Form, ACK) error has occurred on the bus.
Bus error count: 4
Alert: The Transmission failed.This is the sample code modified for the CoreS3, PWRCAN jumper G17 and G18 are switch on. Do you have any working demo for CoreS3 + PWRCAN? Thanks!
#include "M5CoreS3.h" #include "driver/twai.h" // Pins used to connect to CAN bus transceiver: #define RX_PIN 18 #define TX_PIN 17 // Interval: #define TRANSMIT_RATE_MS 1000 #define POLLING_RATE_MS 1000 #define ARDUINO_USB_CDC_ON_BOOT 1 static bool driver_installed = false; unsigned long previousMillis = 0; // will store last time a message was send void setup() { auto cfg = M5.config(); CoreS3.begin(cfg); Serial.begin(115200); // Initialize configuration structures using macro initializers twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT( (gpio_num_t)TX_PIN, (gpio_num_t)RX_PIN, TWAI_MODE_NORMAL); twai_timing_config_t t_config = TWAI_TIMING_CONFIG_500KBITS(); // Look in the api-reference for other // speed sets. twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL(); // Install TWAI driver if (twai_driver_install(&g_config, &t_config, &f_config) == ESP_OK) { Serial.println("Driver installed"); } else { Serial.println("Failed to install driver"); return; } // Start TWAI driver if (twai_start() == ESP_OK) { Serial.println("Driver started"); } else { Serial.println("Failed to start driver"); return; } // Reconfigure alerts to detect TX alerts and Bus-Off errors uint32_t alerts_to_enable = TWAI_ALERT_TX_IDLE | TWAI_ALERT_TX_SUCCESS | TWAI_ALERT_TX_FAILED | TWAI_ALERT_ERR_PASS | TWAI_ALERT_BUS_ERROR; if (twai_reconfigure_alerts(alerts_to_enable, NULL) == ESP_OK) { Serial.println("CAN Alerts reconfigured"); } else { Serial.println("Failed to reconfigure alerts"); return; } // TWAI driver is now successfully installed and started driver_installed = true; } static void send_message() { // Send message // Configure message to transmit twai_message_t message; message.identifier = 0x0F6; message.data_length_code = 4; for (int i = 0; i < 4; i++) { message.data[i] = 0; } // Queue message for transmission if (twai_transmit(&message, pdMS_TO_TICKS(1000)) == ESP_OK) { printf("Message queued for transmission\n"); } else { printf("Failed to queue message for transmission\n"); } } void loop() { if (!driver_installed) { delay(1000); return; } uint32_t alerts_triggered; twai_read_alerts(&alerts_triggered, pdMS_TO_TICKS(POLLING_RATE_MS)); twai_status_info_t twaistatus; twai_get_status_info(&twaistatus); if (alerts_triggered & TWAI_ALERT_ERR_PASS) { Serial.println("Alert: TWAI controller has become error passive."); } if (alerts_triggered & TWAI_ALERT_BUS_ERROR) { Serial.println( "Alert: A (Bit, Stuff, CRC, Form, ACK) error has occurred on the " "bus."); Serial.printf("Bus error count: %lu\n", twaistatus.bus_error_count); } if (alerts_triggered & TWAI_ALERT_TX_FAILED) { Serial.println("Alert: The Transmission failed."); Serial.printf("TX buffered: %lu\t", twaistatus.msgs_to_tx); Serial.printf("TX error: %lu\t", twaistatus.tx_error_counter); Serial.printf("TX failed: %lu\n", twaistatus.tx_failed_count); } if (alerts_triggered & TWAI_ALERT_TX_SUCCESS) { Serial.println("Alert: The Transmission was successful."); Serial.printf("TX buffered: %lu\t", twaistatus.msgs_to_tx); } unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= TRANSMIT_RATE_MS) { previousMillis = currentMillis; send_message(); } } -
@Omurice Bump Thread,
There are three threads on the PWRCAN Module, and all of the say the demo does NOT work. I tried to use TWAI based code but it doesn't seem to work either.
Is it possible to get a working demo on a CoreS3
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login