normaldotcom / canable-fw

Firmware for the CANable USB to CAN adapter
http://canable.io/
Other
184 stars 72 forks source link

Add ACK/NACK bytes for SLCAN #9

Open wiboticalex opened 5 years ago

wiboticalex commented 5 years ago

This fixes issue #8 and allows the adapter to work with UAVCAN.

The problem with the original ACK/NACK implementation seemed to be that if the CANable was in the middle of sending data over USB in the main loop and we got an interrupt, the interrupt would stomp over the in progress transfer causing bad things to happen. Moving all USB transfers into the main loop by storing the data in a buffer in interrupt context and polling when that buffer has something to send fixes this issue.

chemicstry commented 5 years ago

Beware that this firmware still has major frame loss issues. Fetching a long list of UAVCAN parameters fails atleast 25% of the time and with heavy bus load it is more like 90% failure. I tried fixing it by implementing fifo can rx buffer through interrupts but it did not solve the issue, maybe packets are lost during usb transmit. Either way this firmware is unusable with uavcan at current state.

The alternative https://github.com/HubertD/candleLight_fw firmware works perfectly, but it is linux socketcan only.