Hi there - on an upcoming project I will need to use a CAN controller. I have previously used the Microchip MCP2515. What other CAN controllers are there out there? All I know of is the NXP SJA1000. Any opinions on advantages of one over the other? Thanks!
By far the biggest advantage to be had is to use a CAN controller integrated with a microcontroller, not as a separate chip. Stand-alone CAN controllers will take considerable resources just to connect them to the micro: read/write message box control and data registers, route interrupts, do access control and all that. CAN itself is just two wires taken care of by the CAN controller. A lot simpler.
I agree, for the most part. Though really the MCP2515 did not take all that many cycles when I used it. It generates an interrupt when a message is received. The ISR starts the DMA reading in the message. The DMA generates an interrupt when it finishes.
I've also been told that that simply is not an option, as all of our code is written for a very specific line of chips. I have to go with an external CAN controller.
On the other hand, with an external CAN controller, you can choose which controller you use, while with an integrated controller, you are stuck with the features provided by the mico-controller.
For example, I would not use MicroChip MCP2515 or Intel 82527 as a CanOpen master, but the NXP SJA1000 in PeliCan mode would be acceptable due to the 64 message Rx FIFO, when you might potentially receive hundreds of frames in a row, after sending the SYNC frame.
In security related applications, the MCP2515 one-shot mode is useful (and possibly also the transmit priority features), since you would not want any delayed (perhaps hours in a line break situation) commands to be transmitted.