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:
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 ADC device driver for the i.MX RT1170 ADC controller.
Rationale: Explicit Customer requirement.
Implementation: Section: "Design: Linux ADC Device Driver".
Test: Section: "Test Plan: Linux ADC Driver".
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
XtypeAcorresponding channel insysfsisX * 2;for physical channel
XtypeBcorresponding channel insysfsisX * 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 therootfsproject;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:
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.shFrom the top of the BSP installation, go to the Linux kernel tree and install the kernel patch, eg:
$ cd linux/ $ patch -p1 < ../../linux-adc.patchFrom the top of the Linux installation, go to the
projectssub-directory, and patch therootfsproject:$ cd projects/ $ patch -p1 < ../../projects-adc.patchBuild the
rootfsproject:$ cd projects/rootfs $ make