🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    CoreS3 + PWRCAN 13.2 Module working demo required

    Cores
    1
    1
    213
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      Omurice
      last edited by

      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();
          }
      }
      
      
      1 Reply Last reply Reply Quote 1
      • First post
        Last post