SJA1000 CAN controller


I would like to connect SJA1000 (NXP) CAN bus controller to the BB-xM
using expansion connector. There is a driver in linux kernel for this
controller but it can be used with PCI, ISA etc. buses only. So the
question is how can I connect SJA1000 to the BB? Is there any way to
map GPIO or MMC pins from BB extension connector to some kind of
parallel port or ISA in kernel? Or may be the easiest way is to
implement my "driver-wrapper" very similar to sja1000_isa.c and set
read_reg/write_reg pointers to my functions where I can read/write CAN
data from/to SJA1000 using bit banging (yep, dodgy solution detected)?

Another option is MCP2515 chip, but I really want to use SJA1000.


To get max performance out of it, you’d need to put it on the GPMC bus which would allow you to map the chip in to the memory map using a CS pin. This is how SMSC’s LAN9221 is used on some DM3730 boards such as the OMAP3 evm. However, a quick glance at the schematic shows that none of the GPMC lines are even wired up on the BeagleBoard.

Your other solution would be to do bit banging, and in that case I think you’d be severely crippled as compared to using the MCP2515 over SPI.

Do you need to use the the BeagleBoard? The CraneBoard has an onboard CAN controller (it’s actually on the AM3517 chip), if you don’t need things like the DSP or PowerVR graphics accelerator it may be the way to go.

  • Kyle

Hi Kyle,

Thanks for your response. I don't need 3D Graphics but I do need DSP
so I got stuck with BB. And it seems that SJA1000 is not the best
choice for BB. I'll try both solutions - SJA1000 with bit banging and