Core2 CAN-bus problem...
-
Hi,
I want to do CAN communication using Core 2 and CAN Bus Unit (CA-IS3050G).
I tried using the M5Stack example as a base, but it didn't work.
It worked on Stick C +.
Please let me know if you have any problems that I do not know. -
Hello @hide4849
the CAN bus unit uses a serial connection which by default is available on M5Stack Groove Port B. However M5Core2 (w/o M5GO battery bottom 2) only has a Port A which by default is used for I2C.
So you either can try to reconfigure M5Core2 Port A from I2C to serial or stack an M5GO battery bottom 2 to your M5Core2 which then gives you Port B (and C).
Thanks
Felix -
Hi, @felmue
I remapped with this code but it didn't work.
CAN_cfg.tx_pin_id = 32;
CAN_cfg.rx_pin_id = 33;Is there any more other place to reconfigure?
Thanks your reply.
hide4849 -
Hello @hide4849
you also need to make sure external I2C (using 32 and 33) does not get initialized, e.g. fourth parameter of
M5.begin()should to befalse(which is the default).Thanks
Felix -
Hi, @felmue
I checked my code and it is false.
M5.begin(true,false,true,false);It doesn't work even if all are false...
M5.begin(false,false,false,false);It is the same even if all are true
M5.begin(true,true,true,true);Thanks your reply.
hide4849 -
Hello @hide4849
sorry, I am out of ideas and I don't have the CAN-bus unit so I cannot test myself.
Good luck!
Felix -
Anyone get any further on this? Tried the code below, which compiles and downloads, however I don't get any CANbus signals coming through. Not sure what else to check?
#include <M5Core2.h>
#include "CAN_config.h"
#include "ESP32CAN.h"CAN_device_t CAN_cfg; // CAN Config
unsigned long previousMillis = 0; // will store last time a CAN Message was send
const int interval = 1000; // interval at which send CAN Messages (milliseconds)
const int rx_queue_size = 10; // Receive Queue sizeuint8_t count = 0;
void setup() {
M5.begin(false,false,true,false); //(LCDEnable, SDEnable, SerialEnable, I2CEnable)
CAN_cfg.speed = CAN_SPEED_250KBPS;
CAN_cfg.tx_pin_id = GPIO_NUM_32;
CAN_cfg.rx_pin_id = GPIO_NUM_33;
CAN_cfg.rx_queue = xQueueCreate(rx_queue_size, sizeof(CAN_frame_t));
ESP32Can.CANInit();
}void loop() {
CAN_frame_t rx_frame;
unsigned long currentMillis = millis();// Receive next CAN frame from queue
if (xQueueReceive(CAN_cfg.rx_queue, &rx_frame, 3 * portTICK_PERIOD_MS) == pdTRUE) {if (rx_frame.FIR.B.RTR == CAN_RTR) { Serial.printf("RTR from 0x%08X, DLC %d\r\n", rx_frame.MsgID, rx_frame.FIR.B.DLC); } else { Serial.printf("from 0x%08X, DLC %d, Data \r\n", rx_frame.MsgID, rx_frame.FIR.B.DLC); for (int i = 0; i < rx_frame.FIR.B.DLC; i++) { Serial.printf("0x%02X ", rx_frame.data.u8[i]); } Serial.println("\n"); }}
} -
I have the same problem. With Core or Core2 the CAN Unit is not working. I tried Port B and C (with Bottom/Bottom2). It even blocks CAN communication at my test setup (2 ESP32 development modules with additional SN65HVD230). If I use the same code with an Atom it works. Also the Atom CAN (basically the same as the CAN Unit) works with no problem. I also tried the sample code from m5Stack, doesn't work...
The CAN Unit is not the problem. If I hook up a logic analyzer at the connection between Core and CAN Unit the data is fine.
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