NPi i.MX6ULL Support

This is a work in progress. It currently boots off MicroSD cards and not eMMC

CircleCI Hex version

This is the base Nerves System configuration for the NPi i.MX6ULL.

NPi i.MX6ULL


<sup>[Image credit](#digikey)</sup>
FeatureDescription
CPU800 MHz ARM Cortex-A7
Memory512 MB DRAM
Storage8 GB eMMC Flash and MicroSD
Linux kernel5.10 w/ RCN patches
IEx terminalUART ttymxc0
GPIO, I2C, SPIYes - Elixir Circuits
DisplayYes, but not supported yet
ADCYes
PWMYes, but no Elixir support
UARTttymxc0
CameraNone
EthernetTwo 100 Mbps (eth0 and eth1)
WiFiRequires USB WiFi dongle/driver
RTCYes w/ battery
HW Watchdogi.MX6 watchdog enabled on boot. Be sure to enable heart in your vm.args or the device will reboot

WARNING: 32 GB and larger MicroSD cards don't work!

Using

This port currently only runs off a MicroSD card. It has not been updated to support eMMC usage. If you're interested, please see #1. Because of this, you'll need to modify the boot select switches to SD boot (It's 01001001, but see legend on PCB)

The most common way of using this Nerves System is create a project with mix nerves.new and add npi_imx6ull references where needed and in a similar way to the default systems like bbb, etc. Then export MIX_TARGET=npi_imx6ull. See the Getting started guide for more information.

If you need custom modifications to this system for your device, clone this repository and update as described in Making custom systems.

Console access

The console is configured to output to the 4-pin white header near the power connectors. A 3.3V FTDI cable is needed to access the output.

In theory, the console could be routed to the display. The display hasn't been enabled. See #2.

If you would like console access via the LCD, you will need to enable LCD support in the Linux kernel, and change erlinit.conf to output to tty1.

Networking

The board has two 100 Mbps Ethernet interfaces. Here's an example :vintage_net configuration that enables both of them:

config :vintage_net,
  config: [
    {"eth0",
     %{
       type: VintageNetEthernet,
       ipv4: %{method: :dhcp}
     }},
    {"eth1",
     %{
       type: VintageNetEthernet,
       ipv4: %{method: :dhcp}
     }}
  ]

The USB C connector provides a virtual Ethernet connection making it possible to both power and connect to the board using one cable. This is enabled in :vintage_net by adding a "usb0" entry to the network config:

config :vintage_net,
  config: [
    {"usb0", %{type: VintageNetDirect}}
  ]

You can combine the two configs and have three network interfaces or add a USB WiFi dongle for a fourth one. If adding a WiFi dongle, though, you'll need to enable the kernel drivers and add the firmware for it to a custom image.

Linux and U-Boot versions

The NPi i.MX6ULL vary by kernel version and patch set. Nerves tracks those maintained by Robert Nelson at eewiki.net

Nerves also integrates the NPi i.MX6ULL's U-boot patches but modifies them to support the Nerves U-Boot environment variables.

Image credit: This image is from Digikey.