Omega2+ |
If you are as big a fan of the Omega2 as I am I'm guessing you want to do as much with the platform as possible. Recently I've been looking to get a low cost Linux system on a CANbus, to sniff on some traffic. What are the options for adding a CAN interface to your Omega2, either when you are designing a solution or looking to easily add it to an existing system?
eLinux has a great guide on a number of CANbus adapters that I'd recommend to anyone looking to integrate CAN into their system.
Interface | Typical use case | Available on Omega2 / Omega2S |
serial (via SLCAN) | Design-in/Add-on | Simple protocol but not considered reliable, efficient or fast by Linux CAN developers. |
SPI | Design-in | Not usable, the Omega2 (MT7688 cpu) is only half duplex SPI |
Software SPI | Design-in | Higher cpu load than hardware SPI |
USB | Design-in/Add-on | Available (Omega2 has one USB host port) |
Note that all of the design-in options could be used for prototyping with extra effort. This would consist of:
- Finding the SPI lines for your micro
- Some way to connect the SPI lines to your CAN controller, like a breakout or devel board
- Wiring the SPI lines to the SPI lines of the CAN controller
slcan / serial
The slcan protocol, documented at http://www.can232.com/docs/can232_v3.pdf, is a simple command set for wrapping CAN functionality over a serial connection.
Limitations of slcan are:
- Controllers with slcan protocol support, such as the SJA1000T, are 10+ years old and no CAN-FD support is anticipated
- Serial ports can operate up to 2MBit over short distances. CAN-FD can support 5MBit+.
- slcan does not currently support CAN-FD features and afaict there are no CAN-FD slcan devices.
SPI
Many CAN controllers, such as the popular MCP251x series of controllers, interface via SPI. A number of these controllers, such as the MCP2517FD support CAN-FD.
SPI may also be more suitable from a system design standpoint as it is a bus. It's possible to connect a number of devices to a SPI bus using per-device chip select signals. Compare this to the single USB host port on the Omega2 / Omega2S. If the USB CAN device isn't your only usb device
you'll have to add a USB hub to have more than one USB device connected to your Omega2 at the same time.
SPI sounds like a reasonable interface until you find out that Mediatek MT7688 processor used in the Omega2 has a design error that causes full duplex SPI to be inoperative. The Linux drivers for the common MCP251x controller appear to be designed for full duplex SPI functionality. In addition, in my brief review of the MCP251x data sheets, it appears that full duplex SPI is required for proper functionality.
Bitbanged / software SPI
The Linux kernel contains drivers that support GPIO, or bit banged, SPI. A driver called 'spi-gpio-custom' was created and added to OpenWRT, the base distribution used in the Omega2, to expose this software based SPI interface.
Downsides to software gpio drivers are high cpu usage under high SPI bus loads. Secondarily is the potential that the bus load and system load will result in data being dropped if the CANbus load results in SPI loads that the processor can't keep up with.
Downsides to software gpio drivers are high cpu usage under high SPI bus loads. Secondarily is the potential that the bus load and system load will result in data being dropped if the CANbus load results in SPI loads that the processor can't keep up with.
USB
Usb is hands down the easiest approach. Typically it is as difficult as plugging the adapter in. I highly recommend the canable adapter due to its low cost and solid performance.
The Omega2 has a single USB interface. This means that you'll need a USB hub if you would like to use a USB CAN adapter AND have one or more USB ports available. These aren't too costly but adding a USB hub is for sure more costly than if the Omega2 had a working full duplex SPI available (see above).
Comments
Post a Comment