i.MX6

The current development board is the Boundarydevices Nitrogen board with i.MX6 Quad plus CPU. This page describes how to set it up for development.

Package contents

  • 5V 4A DC power supply (100-230V AC in)
  • a DC power cable: C13 (computer)-mains (USA version)
  • main board
  • antenna, attached to board (LSR TiWi-BLE 450-0064)
  • double-serial cable, attached to board
  • button battery, attached to board
  • 4GB microSD card, attached to board

Additional hardware

Getting these will make life easier:

  • USB <-> serial converter - ~15EUR. Reccommended: Digitus USB2.0. Not recommended: anything below 5EUR - 1 fried USB controller so far.
  • microSD card <-> USB reader
  • HDMI cable
  • monitor with HDMI input (HDMI<->DVI adapter with DVI input to monitor works too)
  • mains cable or adapter from US mains matching your socket
  • Optional: USB keyboard and mouse

Board itself

Hardware Manual

Most important interfaces:

  • microSD (SDXC) slot
  • HDMI 1.4a
  • 3 serial ports
  • 2 USB host ports
  • Ethernet port

Create bootable microSD card

Using your microSD <-> USB reader, mount the microSD card and take note of the device (with lsblk or df). Then unmount it. For this walkthrough, the device is /dev/sdd:

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sdd      8:48   1   3.7G  0 disk
├─sdd1   8:49   1   181M  0 part /media/user/f36d95a4-dbd2-4ddc-a4fd-ae6fa119bf6e
└─sdd2   8:50   1   2.6G  0 part /media/user/94942ee2-a338-48b3-a27a-9c295405ce4e
$ sudo umount /dev/sdd1
$ sudo umount /dev/sdd2

In some temp directory, download the latest image: https://storage.puri.sm/librem5/binaries/unstable/latest/imx6.img.xz Unpack the image and dd the image to the device:

$ wget https://storage.puri.sm/librem5/binaries/unstable/latest/imx6.img.xz
$ xzcat imx6.img.xz | pv | sudo dd of=/dev/sdd bs=4M

Depending on your system, the dd can take a while so grab a cup of coffee and be patient.

Working with the i.MX6 Nitrogen board

If this will be your first boot on the iMX6 board, then you will need a u-boot upgrade.

After the u-boot upgrade, your u-boot version should be: U-Boot 2017.07-28563-g04d7ed8078 (Dec 24 2017 - 20:46:50 +0100)

If however you have already performed the u-boot upgrade in the past, then skip this section

Now that we have the bootable drive on the microSD card, remove it from your microSD<->USB reader and insert it into the development board.

Also connect: * an ethernet cable * the HDMI cable to your monitor * your keyboard and mouse * your DB9 serial <-> USB. Plug the USB end into your workstation/laptop. Before giving the board power, open a serial connection on your workstation/laptop: screen /dev/ttyUSB0 115200. To quit your screen session at anytime: Ctrl + a, then :quit * power cable to outlet

As soon as you give the board power, you start to see some output on your serial tty connection:

CPU:   Freescale i.MX6QP rev1.0 at 792 MHz^M
Reset cause: POR^M
Board: nitrogen6_max^M
I2C:   ready^M
DRAM:  3.8 GiB^M
MMC:   FSL_SDHC: 0, FSL_SDHC: 1^M
SF: Detected sst25vf016b with page size 256 Bytes, erase size 4 KiB, total 2 MiB^M
Display: hdmi:1280x720M@60 (1280x720)^M
In:    serial^M
Out:   serial^M
Err:   serial^M
Net:   Micrel ksz9021 at 6^M
FEC [PRIME], usb_ether^M
Hit any key to stop autoboot:  3
...

If your u-boot has already been upgraded, then let the autoboot continue. The system will be booted and you should get a login prompt:

Debian GNU/Linux buster/sid pureos ttymxc1
pureos login:

The credentials are root/root and purism/purism.

u-boot upgrade

If you need the u-boot upgrade (first boot), then hit any key to stop autoboot now. If you missed your time window because you only have 3 short seconds, that’s ok. There is a green button on your board to reset it (no need to restart your serial console session). Once you interrupt the countdown to autoboot, run upgradeu and wait for a couple of minutes:

Hit any key to stop autoboot:  0
=> run upgradeu

Once the upgrade has completed, power cycle the board and watch it boot to a login prompt.

Display

If you have your monitor connected via HDMI to the board, you’ll see that the desktop environment comes up by default. If the system puts the display to sleep, activate your keyboard (connected to the system) to wake up the display and click the green button to log back in.

Troubleshooting

6x_bootscript not found

If you have upgraded your u-boot already and still can’t seem to boot the system, check to see if you get the following output logged to your serial connection::

...
6x_bootscript not found

serial console at 115200, 8N1

details at http://boundarydevices.com/6q_bootscript
AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
flags: ncq stag pm led clo only pmp pio slum part
No port device detected!
timeout irqstat=10000
timeout irqstat=10000
switch to partitions #0, OK
mmc1(part 0) is current device
expose MMC 1 over USB
UMS: LUN 0, dev 1, hwpart 0, sector 0x0, count 0x720000
/

Try removing the microSD card and reseating it. Press the green button on the board to reset it and try again.

Unbricking

In case you really messed up and the system won’t boot anymore, follow the boundary devices guide to unbricking your system: https://boundarydevices.com/unbricking-nitrogen6x-sabre-lite-i-mx6-board/