I have a project coming up which will involve 5 - 10 CAN nodes, implemented in ARM9 microcontrollers. The CAN bus will run a 1Mbit, using 11 bit identifiers. About half the nodes will be in the same physical box, the others will be in various sensor / user interface boxes connected via short lengths of cable. There is also an embedded Windows PC in the main box, which we want to use to snoop on the CAN transactions to drive a mimic display, etc. There's also the possibility of doing all the MCU firmware upgrades via CAN.
So, what's the least-effort way of interfacing a 1Mbit CAN bus to a Windows PC? This has to be a chip-level solution; plug-in cards are no good for space reasons. PC host interfaces available are:
- USB 2.0
- PCI Express
- LPC
Now the difficult bit : I'm a hardware engineer, I don't write code (unless you count VHDL). We have people who write bare-metal C for MCUs, and other people who write Visual Studio .NET for PCs, but nothing in between. Our last attempt to write a driver using the Windows DDK, for a fairly simple peripheral implemented in an FPGA, took months and months to get working properly. Hence an off-the-shelf driver is pretty much a must.
Two options I've looked at so far using the ubiquitous SJA1000 controller:
- USB interface via FT2232H in MCU Host Bus Emulation Mode This looks attractive to begin with, all the PC-side code is at the application level. All the comments I've read say that this won't keep up with a 1Mbit CAN bus, mainly due to the limited interrupt support in the FT2232.
- LPC interface using address decoding, SERIRQ and other glue logic in a CPLD I already have LPC interface code in VHDL which works well in an existing product (but polled I/O only, using DLPORTIO), the difficult bit is the Windows device driver. Are there any off-the-shelf drivers available which might fit the bill? Commercial or open-source, I don't mind.
Or if anyone has any better suggestions for how to do this, I'm all ears.
TIA