🤖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

    Scheduled Pinned Locked Moved Cores
    2 Posts 2 Posters 2.2k Views
    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 Offline
      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();
          }
      }
      
      
      R 1 Reply Last reply Reply Quote 1
      • R Offline
        ruairih2cs @Omurice
        last edited by

        @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

        1 Reply Last reply Reply Quote 0

        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
        • First post
          Last post