Supporting CAN in i.MX RT uClinux BSP
1. Overview
This project develops Linux CAN device driver in the Linux BSP for the i.MX RT processor.
2. Requirements
2.1. Detailed Requirements
The following are the requirements for this project:
Provide a Linux demo project combining all the requirements in this project.
Rationale: Needed to let Customer integrate results of this project into target embedded application.
Implementation: Section: "Design: Demo project".
Test: Section: "Test Plan: Demo Project".
Develop Linux CAN device driver for the i.MX RT CAN controller.
Rationale: Explicit Customer requirement.
Implementation: Section: "Design: Linux CAN Device Driver".
Test: Section: "Test Plan: Linux CAN Driver".
Port CANSocket to the Linux i.MX RT BSP.
Rationale: Explicit Customer requirement.
Implementation: Section: "Design: CANSocket".
Test: Section: "Test Plan: CANSocket".
Validate successful execution of the test suite from the SocketCAN package.
Rationale: Explicit Customer requirement.
Implementation: Section: "Design: CANSocket Test Suite".
Test: Section: "Test Plan: CANSocket Test Suite".
2.2. Detailed Non-Requirements
The following are the non-requirements for this project that may otherwise not be obvious:
None
3. Design
3.1. Detailed Design
3.1.1. Design: Demo project
This project will enable the required CAN functionality in Linux configuration ("embedded project") called rootfs
, which resides in a projects/rootfs
directory, relative to the top of the Linux i.MX RT installation.
3.1.2. Design: Linux CAN Device Driver
The internal i.MX clocks necessary for the CAN interface will be enabled in the kernel. The i.MX RT flexcan
interface network driver linux/drivers/net/can/flexcan.c
will be enabled, and the respective changes will be added to the kernel .dts
file.
The flexcan
functionality will be enabled in the Linux kernel configuration as follows:
Go to
Networking support
->CAN bus subsystem support
->CAN Device Drivers
Enable
Platform CAN drivers with Netlink support
(CONFIG_CAN_DEV
) andSupport for Freescale FLEXCAN based chips
(CONFIG_CAN_FLEXCAN
)
3.1.3. Design: CANSocket
The CAN socket API, described in details in linux/Documentation/networking/can.txt
, will be enabled using the Raw CAN Protocol (raw access with CAN-ID filtering)
and Broadcast Manager CAN Protocol (with content filtering)
configuration options in the Networking support
-> CAN bus subsystem support
configuration menu.
3.1.4. Design: CANSocket Test Suite
The can-utils
and can-tests
packages will be used for verification of the functionality implemented in this project.
3.2. Effect on Related Products
This project makes the following updates in the related products:
None
3.3. Changes to User Documentation
This project updates the following user documents:
None
3.4. Alternative Design
The following alternative design approaches were considered by this project but then discarded for some reason:
None
4. Test Plan
4.1. Secure Download Area
The downloadable materials developed by this project are available from a secure Web page on the Emcraft Systems web site. Specifically, proceed to the following URL to download the software materials:
For the i.MX RT1024 BSP release:
The page is protected as follows:
Login: CONTACT EMCRAFT
Password: CONTACT EMCRAFT
For the i.MX RT1050 BSP (release 3.0.4):
The page is protected as follows:
Login: CONTACT EMCRAFT
Password: CONTACT EMCRAFT
For the i.MX RT1050 BSP (release 3.1.0):
The page is protected as follows:
Login: CONTACT EMCRAFT
Password: CONTACT EMCRAFT
For the i.MX RT1060 BSP (release 3.1.0):
The page is protected as follows:
Login: CONTACT EMCRAFT
Password: CONTACT EMCRAFT
For the i.MX RT1170 BSP release:
The page is protected as follows:
Login: CONTACT EMCRAFT
Password: CONTACT EMCRAFT
4.2. Downloadable Files
The following files are available from the secure download area:
linux-flexcan.patch
- patch to the Linux kernel sources;projects-flexcan.patch
- patch to therootfs
project;rootfs.uImage
- prebuilt bootable Linux image;
Refer to the below sections for the instructions on how to install and use these files.
4.3. Test Set-Up
4.3.1. Hardware Setup
The following hardware setup is required for the i.MX RT1024 boards:
The i.MX RT1024 EVK board, with the serial console attached as per https://emcraft.com/imxrt1024-evk-board/connecting-serial-console-to-imxrt1024-evk .
A Linux PC with the
VSCOM USB-CAN
USB to CAN Adapter http://www.vscom.de/vscom-usb-can.html plugged into a USB port on the PC, and the following connections to the i.MX RT1024 EVK board:DB9.2
of USB-CAN connected toCANL
J10.3 on the i.MX RT EVK board.DB9.7
of USB-CAN connected toCANH
J10.1 on the i.MX RT EVK board.DB9.3
of USB-CAN connected toGND
J10.2 on the i.MX RT EVK board.
for the i.MX RT1050 boards:
The i.MX RT1050 EVKB board, with the serial console attached as per Connecting Serial Console to the NXP i.MX RT10XX EVK Board
A Linux PC with the
VSCOM USB-CAN
USB to CAN Adapter http://www.vscom.de/vscom-usb-can.html plugged into a USB port on the PC, and the following connections to the i.MX RT1050 EVKB board:DB9.2
of USB-CAN connected toCANL
J11.3 on the i.MX RT EVK board.DB9.7
of USB-CAN connected toCANH
J11.1 on the i.MX RT EVK board.DB9.3
of USB-CAN connected toGND
J11.2 on the i.MX RT EVK board.
for the i.MX RT1060 boards:
The i.MX RT1060 EVKB board, with the serial console attached as per Connecting Serial Console to the NXP i.MX RT10XX EVK Board .
A Linux PC with the
VSCOM USB-CAN
USB to CAN Adapter http://www.vscom.de/vscom-usb-can.html plugged into a USB port on the PC, and the following connections to the i.MX RT1060 EVKB board:DB9.2
of USB-CAN connected toCANL
J42.3 on the i.MX RT EVK board.DB9.7
of USB-CAN connected toCANH
J42.1 on the i.MX RT EVK board.DB9.3
of USB-CAN connected toGND
J42.2 on the i.MX RT EVK board.
for the i.MX RT1170 boards:
The i.MX RT1170 EVK board, with the serial console attached as per https://emcraft.com/imxrt1170-evk-board/connecting-serial-console-to-imxrt1170-evk .
A Linux PC with the
VSCOM USB-CAN
USB to CAN Adapter http://www.vscom.de/vscom-usb-can.html plugged into a USB port on the PC, and the following connections to the i.MX RT1170 EVK board:DB9.2
of USB-CAN connected toCANL
J47.3 on the i.MX RT EVK board.DB9.7
of USB-CAN connected toCANH
J47.1 on the i.MX RT EVK board.DB9.3
of USB-CAN connected toGND
J47.2 on the i.MX RT EVK board.
4.3.2. Software Setup
The following software setup is required:
Download the files listed in Section: "Downloadable Files" to the top of the Linux i.MX RT installation.
Install the BSP, as per the respective "Installing and activating cross development environment" document in the "Software" section on the Emcraft site.
From the top of the Linux installation, activate the Linux cross-compile environment by running:
$ . ./ACTIVATE.sh
Install U-Boot to the target board.
for the IMXRT10XX-EVK boards as per Installing U-Boot to the NXP i.MX RT10XX EVK Board
for the IMXRT1170-EVK boards as per https://emcraft.com/imxrt1170-evk-board/installing-uboot-to-imxrt1170-evk-board
From the top of the BSP installation, go to the Linux kernel tree and install the kernel patch, eg:
$ cd linux/ $ patch -p1 < ../../linux-flexcan.patch
From the top of the Linux installation, go to the
projects
sub-directory, and patch therootfs
project:$ cd projects/ $ patch -p1 < ../../projects-flexcan.patch
On the Linux PC intended for execution of the CANsocket test suite, ensure that the following software is installed (Emcraft used Linux PC running the
Fedora 16
(3.1.0-7.fc16.i686.PAE) installation; the other Linux distributives should work too, but may require some additional steps like compilation and installation of the CAN framework kernel modules):Install
can-utils
package on the Linux PC (commands below are for a Fedora host):Install and build
can-tests
on the Linux PC:Load the CAN kernel modules on the Linux PC:
Connect the VSCOM USB-CAN adapter to the Linux PC and configure it as follows:
Get the VSCOM USB-CAN serial device name (in the example below it is
ttyUSB0
):Configure the VSCOM USB-CAN adapter to run with a 1Mbps CAN-bus speed (the
-s8
parameter inslcan_attach
), enable the corresponding network interface:If you have disconnected the VSCOM USB-CAN adapter from the Linux PC, before reconnecting it back run the following command:
4.4. Detailed Test Plan
4.4.1. Test Plan: Demo Project
Perform the following step-wise test procedure:
Go to the
projects/rootfs
directory, build the loadable Linux image (rootfs.uImage
) and copy it to the TFTP directory on the host:Boot the loadable Linux image (
rootfs.uImage
) to the target via TFTP and validate that it boots to the Linux shell:
4.4.2. Test Plan: Linux CAN Driver
Perform the following step-wise test procedure:
In the kernel bootstrap messages, validate that the CAN driver has been successfully installed and activated:
4.4.3. Test Plan: CANSocket
Perform the following step-wise test procedure:
On the target, configure the CAN network:
Test target to Linux PC transfers:
Run the capture utility on the Linux PC:
Send packets from the target to the host:
Validate that the packets have been captured on the Linux PC:
On the host, stop the capture utility by pressing
Ctrl-C
:
Test Linux PC to target transfers:
Run the capture utility on the target:
Send packets from the Linux PC to the target:
Validate that the packets have been captured on the target:
On the target, stop the capture utility by pressing
Ctrl-C
:
4.4.4. Test Plan: CANSocket Test Suite
Perform the following step-wise test procedure:
Run the
tst-raw
Linux PC to target test:On the target:
On the Linux PC:
Observe the test data on the target, then press
Ctrl-C
and complete the test:
Run the
tst-raw
target to Linux PC test:On the Linux PC:
On the target:
Observe test data on the Linux PC, then press
Ctrl-C
and complete the test:
Run the
tst-packet
Linux PC to target test:On the target:
On the Linux PC send a packet, then press
Ctrl-C
and complete the test:Observe the test packet on the target, then press
Ctrl-C
and complete the test:
Run the
tst-packet
target to Linux PC test:On the Linux PC:
On the target, send a packet, then press
Ctrl-C
and complete the test:Observe the test packet on the Linux PC, then press
Ctrl-C
and complete the test:
Run the
tst-filter
test on the target:Run the
tst-rcv-own-msgs
test on the target: