I need to implement the CAN protocol to communicate between two LPC2148s. Now I am planning to use SPI for communication between a microcontroller and a CAN controller and then the CAN protocol for communication between two nodes.

Why do we need CAN transceivers? What does a CAN controller and a CAN transceiver do individually? Or in short, how does data from one node to another node flow?

I know this may be long answer, but I am not finding any resource on the Internet which can tell me all about communication from one node to another through SPI-CAN.


The CAN controller handles the actual CAN traffic, including bus arbitration, synchronization, CRC calculation etc etc. It is the brain of the communication, so to speak.

The CAN transceiver only handles the physical signal levels: voltage levels and the translation to/from differential signals. It also contains a lot of protection circuits against transients, ESD, brown-outs, short-circuits etc. These are very rugged circuits that can take quite a beating.

As a simplification, we can think of the CAN transceiver as layer 1 of the OSI model and the controller as layer 2.

That being said, using external CAN controllers is mostly a thing of the past, unless you have very specific requirements. For the past 20 years or so, the CAN controller is most often integrated in the MCU. The benefits of this are many: less error-prone, easier to work with, faster real-time access, cheaper, less board space needed.

So do yourself a big favour and forget about your LPC2148, but instead pick a MCU with CAN controller on-chip. NXP for example, have plenty of those to pick from, like LPC11C or Kinetis. As a bonus, you get an upgrade from legacy ARM7 to Cortex M.

  • \$\begingroup\$ thanks a lot for your clear explanation. i am already having LPC2148 so i am going to implement CAN controller with this.It would be very much helpful if you can provide me some resource like spi-can interfacing . \$\endgroup\$ – Pavan Kumar Oct 18 '18 at 8:53
  • 1
    \$\begingroup\$ @PavanKumar You'll have to study the datasheet of the specific controller. There is no standard for it. It will be painful and needlessly complicated because you insist on using a legacy solution. And of course, also more expensive, since an external CAN controller alone will cost more than a whole MCU with one built-in. \$\endgroup\$ – Lundin Oct 18 '18 at 9:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.