Skip to content

Commit 276eb96

Browse files
committed
Fix:Hangup issue when sending. sandeepmistry/arduino-CAN#118
1 parent 6d6d54b commit 276eb96

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

ESP32SJA1000.cpp

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,42 @@ void ESP32SJA1000Class::end()
164164

165165
int ESP32SJA1000Class::endPacket()
166166
{
167-
if (!CANControllerClass::endPacket()) {
167+
static bool f_senderr = false; // 前回のendPacketで送信が完了したか否か
168+
bool f_endPacket = CANControllerClass::endPacket(); // 送信パケットがセットされてからendPacketが呼び出されたかどうか
169+
170+
//前回 送信が完了しなかったとき
171+
if(f_senderr)
172+
{
173+
// 送信パケットが新たにセットされずに再送処理を実施する場合
174+
if(!f_endPacket)
175+
{
176+
// 再送処理
177+
if ((readRegister(REG_SR) & 0x08) != 0x08)
178+
{
179+
// 2回目以降でもダメならエラー判定
180+
return -2;
181+
}
182+
else
183+
{
184+
// 2回目以降でOKなら復帰判定
185+
f_senderr = true;
186+
return 1;
187+
}
188+
}
189+
else
190+
{
191+
// 新たに送信パケットがセットされた場合はifを抜けて送信シーケンスをはじめからやり直す
192+
f_senderr = true;
193+
}
194+
}
195+
196+
if (!f_endPacket) {
168197
return 0;
169198
}
170199

171-
// wait for TX buffer to free
172-
while ((readRegister(REG_SR) & 0x04) != 0x04) {
173-
yield();
200+
if ((readRegister(REG_SR) & 0x04) != 0x04) {
201+
// TX buffer not free
202+
return -1;
174203
}
175204

176205
int dataReg;
@@ -203,13 +232,14 @@ int ESP32SJA1000Class::endPacket()
203232
modifyRegister(REG_CMR, 0x1f, 0x01);
204233
}
205234

206-
// wait for TX complete
207-
while ((readRegister(REG_SR) & 0x08) != 0x08) {
235+
if ((readRegister(REG_SR) & 0x08) != 0x08) {
208236
if (readRegister(REG_ECC) == 0xd9) {
209237
modifyRegister(REG_CMR, 0x1f, 0x02); // error, abort
210-
return 0;
238+
return -2;
211239
}
212-
yield();
240+
f_senderr = true;
241+
// Transmitting data
242+
return -2;
213243
}
214244

215245
return 1;

MCP2515.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ int MCP2515Class::begin(long baudRate)
9191
uint8_t cnf[3];
9292
} CNF_MAPPER[] = {
9393
{ (long)8E6, (long)1000E3, { 0x00, 0x80, 0x00 } },
94-
{ (long)8E6, (long)666666, { 0xC0, 0xB8, 0x01 } },
9594
{ (long)8E6, (long)500E3, { 0x00, 0x90, 0x02 } },
9695
{ (long)8E6, (long)250E3, { 0x00, 0xb1, 0x05 } },
9796
{ (long)8E6, (long)200E3, { 0x00, 0xb4, 0x06 } },
@@ -105,7 +104,6 @@ int MCP2515Class::begin(long baudRate)
105104
{ (long)8E6, (long)5E3, { 0x1f, 0xbf, 0x07 } },
106105

107106
{ (long)16E6, (long)1000E3, { 0x00, 0xd0, 0x82 } },
108-
{ (long)16E6, (long)666666, { 0xC0, 0xF8, 0x81 } },
109107
{ (long)16E6, (long)500E3, { 0x00, 0xf0, 0x86 } },
110108
{ (long)16E6, (long)250E3, { 0x41, 0xf1, 0x85 } },
111109
{ (long)16E6, (long)200E3, { 0x01, 0xfa, 0x87 } },

0 commit comments

Comments
 (0)