diff --git a/README.md b/README.md index 5723c97..cf4b798 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ An Arduino library for sending and receiving data using CAN bus. | INT | 2 | -`CS` and `INT` pins can be changed by using `CAN.setPins(cs, irq)`. `INT` pin is optional, it is only needed for receive callback mode. If `INT` pin is used, it **must** be interrupt capable via [`attachInterrupt(...)`](https://www.arduino.cc/en/Reference/AttachInterrupt). +`CS` and `INT` pins can be changed by using `CAN.setPins(cs, irq)`. `INT` pin is optional, it is only needed for receive callback mode. If `INT` pin is used, it **must** be interrupt capable via [`attachInterrupt(...)`](https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/). **NOTE**: Logic level converters must be used for boards which operate at 3.3V. diff --git a/examples/CANReceiver/CANReceiver.ino b/examples/CANReceiver/CANReceiver.ino index fca49e4..d2f5db8 100644 --- a/examples/CANReceiver/CANReceiver.ino +++ b/examples/CANReceiver/CANReceiver.ino @@ -20,7 +20,7 @@ void loop() { // try to parse packet int packetSize = CAN.parsePacket(); - if (packetSize) { + if (packetSize || CAN.packetId() != -1) { // received a packet Serial.print("Received "); diff --git a/src/ESP32SJA1000.cpp b/src/ESP32SJA1000.cpp index 3c56fba..309e030 100644 --- a/src/ESP32SJA1000.cpp +++ b/src/ESP32SJA1000.cpp @@ -304,12 +304,12 @@ int ESP32SJA1000Class::filterExtended(long id, long mask) writeRegister(REG_ACRn(0), id >> 21); writeRegister(REG_ACRn(1), id >> 13); writeRegister(REG_ACRn(2), id >> 5); - writeRegister(REG_ACRn(3), id << 5); + writeRegister(REG_ACRn(3), id << 3); writeRegister(REG_AMRn(0), mask >> 21); writeRegister(REG_AMRn(1), mask >> 13); writeRegister(REG_AMRn(2), mask >> 5); - writeRegister(REG_AMRn(3), (mask << 5) | 0x1f); + writeRegister(REG_AMRn(3), (mask << 3) | 0x1f); modifyRegister(REG_MOD, 0x17, 0x00); // normal diff --git a/src/MCP2515.cpp b/src/MCP2515.cpp index aa46051..36c160d 100644 --- a/src/MCP2515.cpp +++ b/src/MCP2515.cpp @@ -91,6 +91,7 @@ int MCP2515Class::begin(long baudRate) uint8_t cnf[3]; } CNF_MAPPER[] = { { (long)8E6, (long)1000E3, { 0x00, 0x80, 0x00 } }, + { (long)8E6, (long)666666, { 0xC0, 0xB8, 0x01 } }, { (long)8E6, (long)500E3, { 0x00, 0x90, 0x02 } }, { (long)8E6, (long)250E3, { 0x00, 0xb1, 0x05 } }, { (long)8E6, (long)200E3, { 0x00, 0xb4, 0x06 } }, @@ -104,6 +105,7 @@ int MCP2515Class::begin(long baudRate) { (long)8E6, (long)5E3, { 0x1f, 0xbf, 0x07 } }, { (long)16E6, (long)1000E3, { 0x00, 0xd0, 0x82 } }, + { (long)16E6, (long)666666, { 0xC0, 0xF8, 0x81 } }, { (long)16E6, (long)500E3, { 0x00, 0xf0, 0x86 } }, { (long)16E6, (long)250E3, { 0x41, 0xf1, 0x85 } }, { (long)16E6, (long)200E3, { 0x01, 0xfa, 0x87 } }, @@ -353,8 +355,8 @@ int MCP2515Class::filterExtended(long id, long mask) int MCP2515Class::observe() { - writeRegister(REG_CANCTRL, 0x80); - if (readRegister(REG_CANCTRL) != 0x80) { + writeRegister(REG_CANCTRL, 0x60); + if (readRegister(REG_CANCTRL) != 0x60) { return 0; } @@ -442,7 +444,7 @@ void MCP2515Class::handleInterrupt() return; } - while (parsePacket()) { + while (parsePacket() || _rxId != -1) { _onReceive(available()); } }