Supporting ADC in i.MX RT uClinux BSP

Supporting ADC in i.MX RT uClinux BSP

1. Overview

The following is a high-level overview of the problem being resolved by this project:

This project develops Linux ADC device driver in the Linux BSP for the i.MX RT1170 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 ADC device driver for the i.MX RT1170 ADC controller.

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 ADC functionality in the Linux configuration ("embedded project") called rootfs, which resides in a projects/rootfs directory, relative to the top of the Linux i.MX RT1170 installation.

3.1.2.
Design: Linux ADC Device Driver

The clock driver for IMXRT1170 SoC will be updated to support the ADC clock gates.

There is the existing imx8qxp-adc driver in the Linux sources, which provides support for the ADC controller of the IMX8QXP and some other SoCs from the i.MX family. The i.MXRT1170 SoC has a similar ADC controller. However, the imx8qxp-adc driver does not provide support for all available set of ADC channels. The driver will be updated to support all ADC channels set of the IMXRT1170 SoC. Support for the IMXRT1170 ADC will be enabled via the DTS kernel file, using the nxp,imx8qxp-adc compatibility string.

New num_channels node will be introduced which points out on how many ADC channels are supported by the driver. To support channels B, the channels-b-support node will be introduced and used.

Raw (unscaled) voltage measurement from channel Y of the ADC X device can be obtained from the /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw.

If support for channel B is enabled, then correspondence between the physical ADC channel and the channel number in sysfs will define by the following formula:

  • for physical channel X type A corresponding channel in sysfs is X * 2;

  • for physical channel X type B corresponding channel in sysfs is X * 2 + 1;

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 RT1170 BSP:

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-adc.patch - patch to the Linux kernel sources;

  • projects-adc.patch - patch to the rootfs project;

  • rootfs.uImage - prebuilt bootable Linux image;

4.3. Test Set-Up

4.3.1. Hardware Setup

The following hardware setup is required for the i.MX RT 1170 board:

  • The i.MXRT1170 EVK board.

  • On the IMXRT1170-EVKB board the ADC2 channels are not accessible from Arduino headers. To make the 0A or 0B channel of ADC2 be accessible the following rework of the board are needed:

    • Remove (unsolder) R2002 and R2003

    • Solder 0-Ohm resistors to R2011 and R2009

    • Use J76 pin 5 (DC_I2S1_RX_BCLK) to connect to ADC2_CH0B/GPIO_AD_19

    • Use J76 pin 9 (DC_I2S1_RX_SYNC) to connect to ADC2_CH0A/GPIO_AD_18

The following hardware setup is required for the Avnet MaaXBoard-RT board:

  • The Avnet MaaXBoard-RT board.

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:

    $ . ACTIVATE.sh
  4. From the top of the BSP installation, go to the Linux kernel tree and install the kernel patch, eg:

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

    $ cd projects/ $ patch -p1 < ../../projects-adc.patch
  6. Build the rootfs project:

    $ cd projects/rootfs $ make