arduino-CAN
arduino-CAN copied to clipboard
Reduce the number of bytes over SPI for MCP2515Class::parsePacket() by up to 2.8x
-
Use the RX STATUS command instead of READ(CANINTF) to check availability of data to read. This reduces SPI usage for a simple "is data available" check from 3 bytes to 2.
-
Use the READ RX BUFFER command to read the RXFn* registers as well as the received data. This requires doing only a single CS pull, and only N+6 bytes transferred over SPI. READ RX BUFFER also takes care of resetting the RXnIF flag.
If my math is right, the old code needed N+6 readRegister() calls for a standard frame, and N+9 readRegister() calls for an extended frame, plus one modifyRegister() call to reset the RXnIF flag. Each readRegister() call requires a CS pull and transferring 3 bytes over SPI.
For N = 8,
- we now send 16 bytes over SPI vs 45 for a standard frame (>2.8x reduction!)
- we now do just 2 CS pulls vs 16 for a standard frame (8x reduction!)
Came up with an even better idea, force-pushed an update into the branch so you can avoid looking at the less optimal intermediate solution.