From 6172386d539b1904caaff1561108d26f303fb80a Mon Sep 17 00:00:00 2001 From: Ahmed Sheimy Date: Wed, 7 Sep 2022 10:23:00 +0400 Subject: [PATCH 1/2] Update ESP32SJA1000.cpp for esp32 chips with version V3 you need to change writeRegister(REG_IER, 0xef); // enable all interrupts like this --- src/ESP32SJA1000.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ESP32SJA1000.cpp b/src/ESP32SJA1000.cpp index 3c56fba..76ee52f 100644 --- a/src/ESP32SJA1000.cpp +++ b/src/ESP32SJA1000.cpp @@ -121,7 +121,7 @@ int ESP32SJA1000Class::begin(long baudRate) } modifyRegister(REG_BTR1, 0x80, 0x80); // SAM = 1 - writeRegister(REG_IER, 0xff); // enable all interrupts + writeRegister(REG_IER, 0xef); // enable all interrupts // set filter to allow anything writeRegister(REG_ACRn(0), 0x00); From 5d0e391f6da34c93c8a42fb6087ad698e72710d0 Mon Sep 17 00:00:00 2001 From: Ahmed Sheimy Date: Thu, 3 Nov 2022 08:40:54 +0400 Subject: [PATCH 2/2] Update ESP32SJA1000.cpp --- src/ESP32SJA1000.cpp | 87 ++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/src/ESP32SJA1000.cpp b/src/ESP32SJA1000.cpp index 76ee52f..44b5055 100644 --- a/src/ESP32SJA1000.cpp +++ b/src/ESP32SJA1000.cpp @@ -164,55 +164,62 @@ void ESP32SJA1000Class::end() int ESP32SJA1000Class::endPacket() { - if (!CANControllerClass::endPacket()) { - return 0; - } +if (!CANControllerClass::endPacket()) { +return 0; +} +const uint8_t TIMEOUTVALUE = 50; +uint8_t uiTimeOut = 0; - // wait for TX buffer to free - while ((readRegister(REG_SR) & 0x04) != 0x04) { - yield(); - } +// wait for TX buffer to free +while (((readRegister(REG_SR) & 0x04) != 0x04) && (uiTimeOut < TIMEOUTVALUE)) { +yield(); +uiTimeOut++; +} +if(uiTimeOut == TIMEOUTVALUE) return -1; /* get tx buff time out */ +uiTimeOut = 0; - int dataReg; +int dataReg; - if (_txExtended) { - writeRegister(REG_EFF, 0x80 | (_txRtr ? 0x40 : 0x00) | (0x0f & _txLength)); - writeRegister(REG_EFF + 1, _txId >> 21); - writeRegister(REG_EFF + 2, _txId >> 13); - writeRegister(REG_EFF + 3, _txId >> 5); - writeRegister(REG_EFF + 4, _txId << 3); +if (_txExtended) { +writeRegister(REG_EFF, 0x80 | (_txRtr ? 0x40 : 0x00) | (0x0f & _txLength)); +writeRegister(REG_EFF + 1, _txId >> 21); +writeRegister(REG_EFF + 2, _txId >> 13); +writeRegister(REG_EFF + 3, _txId >> 5); +writeRegister(REG_EFF + 4, _txId << 3); - dataReg = REG_EFF + 5; - } else { - writeRegister(REG_SFF, (_txRtr ? 0x40 : 0x00) | (0x0f & _txLength)); - writeRegister(REG_SFF + 1, _txId >> 3); - writeRegister(REG_SFF + 2, _txId << 5); +dataReg = REG_EFF + 5; +} else { +writeRegister(REG_SFF, (_txRtr ? 0x40 : 0x00) | (0x0f & _txLength)); +writeRegister(REG_SFF + 1, _txId >> 3); +writeRegister(REG_SFF + 2, _txId << 5); - dataReg = REG_SFF + 3; - } +dataReg = REG_SFF + 3; +} - for (int i = 0; i < _txLength; i++) { - writeRegister(dataReg + i, _txData[i]); - } +for (int i = 0; i < _txLength; i++) { +writeRegister(dataReg + i, _txData[i]); +} - if ( _loopback) { - // self reception request - modifyRegister(REG_CMR, 0x1f, 0x10); - } else { - // transmit request - modifyRegister(REG_CMR, 0x1f, 0x01); - } +if ( _loopback) { +// self reception request +modifyRegister(REG_CMR, 0x1f, 0x10); +} else { +// transmit request +modifyRegister(REG_CMR, 0x1f, 0x01); +} - // wait for TX complete - while ((readRegister(REG_SR) & 0x08) != 0x08) { - if (readRegister(REG_ECC) == 0xd9) { - modifyRegister(REG_CMR, 0x1f, 0x02); // error, abort - return 0; - } - yield(); - } +// wait for TX complete +while (((readRegister(REG_SR) & 0x08) != 0x08) && (uiTimeOut < TIMEOUTVALUE)) { +if (readRegister(REG_ECC) == 0xd9) { +modifyRegister(REG_CMR, 0x1f, 0x02); // error, abort +return 0; +} +yield(); +uiTimeOut++; +} +if(uiTimeOut == TIMEOUTVALUE) return -2; /* send msg timeout */ - return 1; +return 1; } int ESP32SJA1000Class::parsePacket()