Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
stylenone

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:

  1. Provide a Linux demo project combining all the requirements in this project.

  2. Develop Linux CAN device driver for the i.MX RT CAN controller.

  3. Port CANSocket to the Linux i.MX RT BSP.

  4. Validate successful execution of the test suite from the SocketCAN package.

2.2. Detailed Non-Requirements

The following are the non-requirements for this project that may otherwise not be obvious:

  1. None

3. Design

3.1. Detailed Design

3.1.1.
Anchor
design-demo-project
design-demo-project
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.
Anchor
Design-Linux-CAN-Device-Driver
Design-Linux-CAN-Device-Driver
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.

...

  • Go to Networking support -> CAN bus subsystem support -> CAN Device Drivers

  • Enable Platform CAN drivers with Netlink support (CONFIG_CAN_DEV) and Support for Freescale FLEXCAN based chips (CONFIG_CAN_FLEXCAN)

3.1.3.
Anchor
Design-CANSocket
Design-CANSocket
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.
Anchor
Design-CANSocket-Test-Suite
Design-CANSocket-Test-Suite
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:

...

Login: CONTACT EMCRAFT

Password: CONTACT EMCRAFT

4.2.
Anchor
Downloadable-Files
Downloadable-Files
Downloadable Files

The following files are available from the secure download area:

...

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:

...

4.3.2. Software Setup

The following software setup is required:

  1. Download the files listed in Section: "Downloadable Files" to the top of the Linux i.MX RT installation.

  2. Install the BSP, as per the respective "Installing and activating cross development environment" document in the "Software" section on the Emcraft site.

  3. From the top of the Linux installation, activate the Linux cross-compile environment by running:

    Code Block
    $ . ./ACTIVATE.sh
  4. Install U-Boot to the target board.

  5. From the top of the BSP installation, go to the Linux kernel tree and install the kernel patch, eg:

    Code Block
    $ cd linux/
    $ patch -p1 < ../../linux-flexcan.patch
  6. From the top of the Linux installation, go to the projects sub-directory, and patch the rootfs project:

    Code Block
    $ cd projects/
    $ patch -p1 < ../../projects-flexcan.patch
  7. 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):

    1. Install can-utils package on the Linux PC (commands below are for a Fedora host):

      Code Block
      $ sudo yum install can-utils
      ...
      $ 
    2. Install and build can-tests on the Linux PC:

      Code Block
      $ cd ~
      $ git clone https://github.com/linux-can/can-tests.git
      $ cd can-tests
      $ make
      $ sudo DESTDIR=/usr PREFIX= make install
    3. Load the CAN kernel modules on the Linux PC:

      Code Block
      $ sudo modprobe can
      $ sudo modprobe can-raw 
      $ sudo modprobe slcan
  8. Connect the VSCOM USB-CAN adapter to the Linux PC and configure it as follows:

    1. Get the VSCOM USB-CAN serial device name (in the example below it is ttyUSB0):

      Code Block
      $ dmesg | tail
      [77641.738206] usbcore: registered new interface driver ftdi_sio
      [77641.739086] usbserial: USB Serial support registered for FTDI USB Serial Device
      [77641.747063] ftdi_sio 1-2:1.0: FTDI USB Serial Device converter detected
      [77641.747348] usb 1-2: Detected FT232R
      [77641.781982] usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB0
      [78603.073189] can: controller area network core
      [78603.073360] NET: Registered PF_CAN protocol family
      [78618.877319] can: raw protocol
      [78632.316446] CAN device driver interface
      [78632.334423] slcan: serial line CAN interface driver
    2. Configure the VSCOM USB-CAN adapter to run with a 1Mbps CAN-bus speed (the -s8 parameter in slcan_attach), enable the corresponding network interface:

      Code Block
      $ sudo slcan_attach -o -s8 /dev/ttyUSB0
      attached tty /dev/ttyUSB0 to netdevice can0
      $ sudo slcand -o -s8 -t hw -S 3000000 /dev/ttyUSB0
      $ sudo ifconfig can0 up
    3. If you have disconnected the VSCOM USB-CAN adapter from the Linux PC, before reconnecting it back run the following command:

      Code Block
      $ sudo killall slcand

4.4. Detailed Test Plan

4.4.1.
Anchor
TestPlan-Demo-Project
TestPlan-Demo-Project
Test Plan: Demo Project

Perform the following step-wise test procedure:

  1. Go to the projects/rootfs directory, build the loadable Linux image (rootfs.uImage) and copy it to the TFTP directory on the host:

    Code Block
    $ cd projects/rootfs
    $ make
  2. Boot the loadable Linux image (rootfs.uImage) to the target via TFTP and validate that it boots to the Linux shell:

    Code Block
    => run netboot
    ...               
    TFTP from server 192.168.1.96; our IP address is 192.168.1.86
    Filename 'imxrt/rootfs.uImage'.
    Load address: 0x80007fc0
    Loading: #################################################################
             #################################################################
    ...
    / # 

4.4.2.
Anchor
Test-Plan:-Linux-CAN-Driver
Test-Plan:-Linux-CAN-Driver
Test Plan: Linux CAN Driver

Perform the following step-wise test procedure:

  1. In the kernel bootstrap messages, validate that the CAN driver has been successfully installed and activated:

    Code Block
    / # dmesg | grep -i can
    CAN device driver interface
    can: controller area network core
    NET: Registered PF_CAN protocol family
    can: raw protocol
    can: broadcast manager protocol
    can: netlink gateway - max_hops=1
    / #

4.4.3.
Anchor
TestPlan-CANSocket
TestPlan-CANSocket
Test Plan: CANSocket

Perform the following step-wise test procedure:

  1. On the target, configure the CAN network:

    Code Block
    / # ip link set can0 type can bitrate 1000000
    / # ifconfig can0 up
  2. Test target to Linux PC transfers:

    • Run the capture utility on the Linux PC:

      Code Block
      $ candump can0
    • Send packets from the target to the host:

      Code Block
      / # cansend can0 12345678#99.AA.BB.CC.DD.EE.FF.00
      / # cansend can0 12345678#99.AA.BB.CC.DD.EE.FF.01
      / # cansend can0 12345678#99.AA.BB.CC.DD.EE.FF.02
      / # cansend can0 12345678#99.AA.BB.CC.DD.EE.FF.03
    • Validate that the packets have been captured on the Linux PC:

      Code Block
        can0  12345678   [8]  99 AA BB CC DD EE FF 00
        can0  12345678   [8]  99 AA BB CC DD EE FF 01
        can0  12345678   [8]  99 AA BB CC DD EE FF 02
        can0  12345678   [8]  99 AA BB CC DD EE FF 03
    • On the host, stop the capture utility by pressing Ctrl-C:

      Code Block
      ^C
      $
  3. Test Linux PC to target transfers:

    • Run the capture utility on the target:

      Code Block
      / # candump can0
    • Send packets from the Linux PC to the target:

      Code Block
      $ cansend can0 123abcde#11.22.33.44.56.78.90.01
      $ cansend can0 123abcde#11.22.33.44.56.78.90.03
      $ cansend can0 123abcde#11.22.33.44.56.78.90.05
      $ cansend can0 123abcde#11.22.33.44.56.78.90.07
    • Validate that the packets have been captured on the target:

      Code Block
        can0  123ABCDE   [8]  11 22 33 44 56 78 90 01
        can0  123ABCDE   [8]  11 22 33 44 56 78 90 03
        can0  123ABCDE   [8]  11 22 33 44 56 78 90 05
        can0  123ABCDE   [8]  11 22 33 44 56 78 90 07
    • On the target, stop the capture utility by pressing Ctrl-C:

      Code Block
      ^C
      / #

4.4.4.
Anchor
TestPlan-CANSocket-Test-Suite
TestPlan-CANSocket-Test-Suite
Test Plan: CANSocket Test Suite

Perform the following step-wise test procedure:

...