[Ovmsdev] CAN drivers: fix & harmonize frame transmission failure handling

Michael Balzer dexter at expeedo.de
Fri Jan 8 00:02:01 HKT 2021


please pull & test the new "can-txfail-fix" branch. It's up to date and 
includes the BMW i3 code already.

I need to get feedback from users of both can1 (esp32can) & can2/3/4 
(mcp2515), as changes had to be made to both drivers.

I'll quote from my commit:

Design goals:
- any TX can either fail or succeed, the result state is terminal
- the respective TX callback is called exactly once
- transmissions fail on reaching the error-passive bus state
   and on message/bus errors while in error-passive state
- a failed TX will be aborted (no retries after bus recovery),
   i.e. will be retried at most 128 times (in error-active phase)
- reduce excessive CAN error logging
- reduce excessive interrupt load with switched-off buses

This results in the application being able to reliably detect a
switched-off vehicle bus by the TX callback's success indicator.
It also results in frames no longer being held in the TX buffer
or added to the TX queue when the bus is switched off. The
application can now rely on getting a clean bus state on every
reconnect, without any queued old frames to be sent automatically.

Secondary benefit from aborting the transmission is, the module
doesn't need to handle the load from the continuously triggered
CAN error interrupts by retransmission attempts in error-passive

Reason for this was a) Steve's question on aborting transmissions / 
flushing the queue and b) my new car now also switching off the bus, 
with the annoying effect of a frozen can1 every 2-3 days, needing to 
reboot the module. I'm not sure yet if the freeze issue is solved, but I 
haven't had it since running these changes on my module.

The other issue of the transceivers resending frames queued long ago may 
have caused all sorts of strange & unrepeatable issues. I remember the 
VW crew having problems that fell into this category.

I've verified the new MCP2515 implementation only on my workbench (with 
an Arduino as the CAN tester), so real life tests are necessary.


Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20210107/96587e6f/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 203 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20210107/96587e6f/attachment.sig>

More information about the OvmsDev mailing list