Itek — Usb Can Driver
Abstract —The proliferation of Controller Area Network (CAN) buses in automotive, industrial, and embedded systems demands flexible, low-cost interfaces. USB-to-CAN adapters based on ITE Tech chipsets offer a bridge between standard USB hosts and CAN networks. This paper details the architecture of a Linux kernel driver for an ITE USB CAN device, covering data encapsulation, protocol handling, real-time constraints, and the integration with the Linux SocketCAN stack. 1. Introduction Controller Area Network (CAN) is a robust, message-oriented protocol widely used in real-time systems. Traditional CAN interfaces often rely on PCIe or onboard peripherals, but USB-based adapters provide portability and ease of deployment. ITE Tech, Inc. produces USB-to-CAN controllers (e.g., IT9130 series) that implement a simple bulk/endpoint interface. However, without a proper driver, these devices remain opaque to the OS.
The device uses a simple command-response protocol: host sends a command block (e.g., transmit CAN frame, set bitrate) and receives status or incoming CAN frames via bulk IN. The driver is structured as a Linux kernel module, adhering to the USB driver model and SocketCAN framework. 3.1 Module Initialization static struct usb_device_id ite_usb_table[] = USB_DEVICE(0x048D, 0x9130) , ; MODULE_DEVICE_TABLE(usb, ite_usb_table); static struct usb_driver ite_usb_driver = .name = "ite_usb_can", .probe = ite_usb_probe, .disconnect = ite_usb_disconnect, .id_table = ite_usb_table, ; itek usb can driver
| Parameter | Value | |--------------------|-------------------------------| | Vendor ID | 0x048D (ITE Tech, Inc.) | | Product ID | 0x9130 (example) | | Endpoints | 1x Bulk IN, 1x Bulk OUT | | CAN Controller | Built-in SJA1000-like core | | Maximum bitrate | 1 Mbit/s | | Frame support | Standard (11-bit) & Extended (29-bit) | ITE Tech, Inc
| Byte | Field | Description | |------|-----------------|-----------------------------| | 0 | Command | 0x01 = TX frame, 0x02 = set bitrate | | 1 | DLC | Data length (0–8) | | 2-3 | CAN ID | 11/29-bit identifier (little-endian) | | 4-11 | Data | Up to 8 bytes | | 12 | Flags | Bit 0 = extended ID, Bit 1 = RTR | | 13-15| Reserved | | transmit CAN frame


