> For the complete documentation index, see [llms.txt](https://dev.solid-run.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.solid-run.com/nxp/imx8/sbc-platform/hummingboard-imx8-sbc-quick-start-guide/hummingboard-iiot-imx8m-plus-som-quick-start-guide.md).

# HummingBoard IIOT & i.MX8M Plus SOM Quick Start Guide

![IIOT Sideways.png](/files/xXCiRcsV8AifPdDtNjGG)

## Introduction

The following quick start guide provides background information about the HummingBoard IIOT.

The guide will give a technical overview about the product and by the end of it you should be able to boot an operating system and begin testing your application.

## Revision and Notes

| **Date**    | **Owner**    | **Revision** | **Notes**                                                         |
| ----------- | ------------ | ------------ | ----------------------------------------------------------------- |
| 21 Jan 2024 | Yazan Shhady | 1.0          | Initial release                                                   |
| 03 Dec 2024 | Yazan Shhady | 1.1          | Add instructions to program eMMC                                  |
| 31 Dec 2024 | Yazan Shhady | 1.2          | Provide more detailed instructions for programming MAC addresses. |

## Hardware Setup

#### Product specifications

| **Model**        | <p><br><br>#### HummingBoard IIOT</p>                                                                                                                                                                                     |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SOM Model        | NXP i.MX8M Plus Dual / Quad core Arm Cortex A53 up to 1.8GHz (with Arm M7 GPP)                                                                                                                                            |
| Memory & Storage | <p>Up to 4GB LPDDR4<br>eMMC<br>MicroSD</p>                                                                                                                                                                                |
| Network          | <p>2 x Ethernet RJ45 10/100/1000<br>1 x 802.11 a/b/g/n/ac WiFi and Bluetooth (2.4/5 GHz)</p>                                                                                                                              |
| Connectivity     | <p>1 x USB3.0 (OTG)<br>2 x USB3.0 ( Host)<br>M.2 B-Key LTE modem (eSIM, NanoSim)<br>M.2 M-Key - NVMe or AI accelerator<br>Additional addon cards are supported\*<br>SIM card slot</p>                                     |
| Media            | <p>LVDS<br>MIPI-DSI<br>2x MIPI-CSI 4 lanes (1 MIPI-CSI on the SoM, 2 on the carrier)</p>                                                                                                                                  |
| I/O              | <p>1 x Reset button<br>1 x ON/OFF button<br>1 x Configurable push button<br>1 x RGB LED<br>2 x CAN-FD<br>2x RS232 or 2x RS485, or RS232 + RS485 (SW Configuration)<br>1 x I/O Digital Input<br>1 x I/O Digital output</p> |
| Misc             | <p>TPM2.0<br>RTC<br>EEPROM</p>                                                                                                                                                                                            |
| OS Support       | Linux                                                                                                                                                                                                                     |
| Environment      | <p>Commercial: 0°C to 70°C<br>Industrial: -40°C to 85°C</p>                                                                                                                                                               |
| Dimensions       | <p>PCBA: 140 x 90mm<br>Enclosure :</p>                                                                                                                                                                                    |
| Power            | <p>7V – 28V wide range<br>PoE sink support 802.3af Class 0</p>                                                                                                                                                            |
| Enclosure        | Optional extruded aluminum (IP32) enclosure                                                                                                                                                                               |
|                  | [Buy Now](https://shop.solid-run.com/?s=%22HummingBoard+Pulse%22\&post_type=product&_ga=2.156269240.2016484779.1641802897-2012112798.1622706355)                                                                          |

{% hint style="info" %}
Supported with i.MX8M-PLUS SOM. For more detailed information about our SOM-i.MX8M series please visit this user manual : [i.MX8M Plus SOM Hardware User Manual](/nxp/imx8/com-som/imx8m-plus-som-hardware-user-manual.md) .
{% endhint %}

#### Block Diagram

The following figure describes the i.MX8M Pro Block Diagram.

![image-20250115-103843.png](/files/1MBvVBbno8XgLnnrsvkb)

#### Visual features overview

Please see below the features overview of the connector side of the HummingBoard IIOT.

![HummingBoard  i.MX8M IIOT Layout 2024.png](/files/Dxvc0p7Xg3GqwaDdldhS)

Print side connector overview of the HummingBoard IIOT.

![image-20240929-120103.png](/files/kPTd6aI9sseDrYcepBsI)

![image-20241215-110714.png](/files/hGeSVVgxUbRuZHVOPCb0)

**Power Input Polarity \[J1]:**

* **Connector Type**: Green two-terminal connector \[J1].
* **Voltage Range**: 7V to 32V.
* **Polarity**:
  * **+ (Positive)**: Left terminal (as marked in the image).
  * **- (Negative)**: Right terminal (as marked in the image).

{% hint style="info" %}
Plug for connector **J1** : 2 Position Terminal Block Plug, Female Sockets 0.138" (3.50mm).
{% endhint %}

**J5004** {2x RS485, 2x CAN-FD, 2x RS232, DIG\_IN, DIG\_OUT}

![image-20241013-104553.png](/files/I3P20iGBe2MCcprMVTOm)

![image-20241121-134703.png](/files/g8abeBT2tysNV9qjh7YL)

{% hint style="info" %}
Plug for connector **J5004** : 20 Position Terminal Block Plug, Female Sockets 0.138" (3.50mm) like [this](https://www.digikey.com/en/products/detail/phoenix-contact/1738885/3606115).
{% endhint %}

## Software Setup

#### Cable setup and prerequisites

Here is what you will need to power up and use the board:

* Linux or Windows PC
* HummingBoard IIOT with SOM
* 12V Power adapter (HummingBoard IIOT has wide range input of 7V-28V), alternatively you can use a PoE injector to power on the device.
* Type-C to USB for console, the HummingBoard IIOT has an onboard FTDI chip.
* IP router or IP switch

## Boot Select

![image-20240901-112851.png](/files/7SOOs903pskPsDwPgFeo)

Before powering up the board for the first time it is recommended to select the boot media using onboard DIP switch **S5**:

| **Switch**         | <p><strong>1</strong><br>(MD0)</p> | <p><strong>2</strong><br>(MD1)</p> | <p><strong>3</strong><br>(MD2)</p> | <p><strong>4</strong><br>(MD3)</p> | <p><strong>5</strong><br>(VDD\_1.8V)</p> | <p><strong>6</strong><br>(VDD\_3.3V)</p> |
| ------------------ | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------------- | ---------------------------------------- |
| **uSD**            | **ON**                             | **ON**                             | OFF                                | OFF                                | **ON**                                   | OFF                                      |
| **eMMC**           | OFF                                | **ON**                             | OFF                                | OFF                                | **ON**                                   | OFF                                      |
| **USB OTG**        | **ON**                             | OFF                                | OFF                                | OFF                                | **ON**                                   | OFF                                      |
| **Internal Fuses** | OFF                                | OFF                                | OFF                                | OFF                                | **ON**                                   | OFF                                      |

{% hint style="info" %}
**MDx** = BOOT\_MODEx, **VDD\_BOOT** = 1.8V **or** 3.3V (Select S5\[5] **or** S5\[6]) .\
**Note** that **MD1** and **MD0** have been swapped between PCB version 1.1 and PCB version 1.0.
{% endhint %}

## Booting from SD card

## Boot Select

Here is the correct DIP switch position for SD boot:

![image-20240901-120609.png](/files/Di1aEXeig7Wt6DZJ72tj)

{% hint style="info" %}
Note: The black rectangle represents the switch position.
{% endhint %}

Once you set the switches, you can apply the following for booting from an SD card.

1. **Downloading the Debian image**

Download the Debian image by running the following command on your Linux/Windows PC:

```
wget https://solid-run-images.sos-de-fra-1.exo.io/IMX8/imx8mp_build/lf-6.6.52-2.2.0/2025-12-10_68e87c8/debian-bootimg-68e87c8.img.xz
```

* For more Debian releases, please visit [Debian Release for i.MX8](https://images.solid-run.com/IMX8/imx8mp_build).

2. **Writing the image to the SD card**

Use the following commands for writing the image to an SD card:

```
xz -dc debian-bootimg-68e87c8.img.xz | sudo dd of=/dev/sdX bs=4k conv=fdatasync status=progress
```

* For more information, please visit [Flashing an SD Card](/other-articles/flashing-an-sd-card.md) .

{% hint style="info" %}
Note: Plug a micro SD into your Linux PC, the following assumes that the micro SD is added as /dev/sdX and all it’s partitions are unmounted.
{% endhint %}

3. **SD card insertion**

Please Insert the SD card into your device.

4. **Power connection**

Connect your power adaptor to the DC jack, and then connect the adaptor to mains supply.

5. **Serial Connection**

Please insert the micro USB into your device, then you can refer to [Serial Connection](/other-articles/serial-connection.md) for installing necessary serial connection software in Linux/Windows.

Once you installed the necessary serial connection software, you should be able to see the following:

![](/files/HCnKay5yrv1chZCVZO4X)

* In order to be able to log in , please insert “**root**” as a username and password as follows:

![](/files/DqQFIJyjGw9ycMja4cL8)

### **Final stages**

The following stages need to be done in order to finalise the imaging:

1. Run `fdisk /dev/mmcblk1` if using SD and `fdisk /dev/mmcblk2`if using eMMC.
2. Recreate the rootfs partition (mostly the second partition) by deleting it and then creating a new partition that starts at the next sector after the first one and extends to the end of the drive (or less depending on your needs).
3. Write the new partition, when prompt about ‘Do you want to remove the signature?’ then answer with Yes.
4. Run `resize2fs /dev/mmcblk1p2` if using SD Card and `resize2fs /dev/mmcblk2p2`if using eMMC.
5. In this stage the root partition should be big enough to start populating it; but first update the RTC clock.
6. Connect the RJ45 to your network with internet access (and DHCP server); and then run `dhclient`.
7. Update the RTC clock by running `ntpdate pool.ntp.org` and then `hwclock -w`.
8. Run apt-update commands below and then populate the root filesystem as you wish.

```
apt-get update && apt-get upgrade -y
```

Here is an example of the same process in the HB-IIOT device until step 4 (include):

![image-20241203-154508.png](/files/FUR4FAw5Dhfm3DOdGJrZ)

![image-20241203-154758.png](/files/lNmupuytinXxKP80gfYN)

![image-20241203-154958.png](/files/ZICkczq3FruHOxmd5epd)

In the end you should see with “lsblk” that the partition size is in the required size.

## Programming eMMC

Boot Linux from uSD and follow the Instructions bellow to Program the eMMC

1. **Programming the Bootloader on eMMC Boot Partition:**

```
# Download the bootloader binary (u-boot-mmc:2:1.bin) from https://images.solid-run.com/IMX8/imx8mp_build:
wget http://solid-run-images.sos-de-fra-1.exo.io/IMX8/imx8mp_build/build_date_20241110-rev_9d040a0/u-boot-mmc:2:1-9d040a0.bin
# Disable write protection:
echo 0 > /sys/class/block/mmcblk2boot0/force_ro
# Write the bootloader to the boot partition:
dd if=u-boot-mmc:2:1-9d040a0.bin of=/dev/mmcblk2boot0 conv=sync
# Re-enable write protection:
echo 1 > /sys/class/block/mmcblk2boot0/force_ro
# Enable the eMMC boot partition:
mmc bootpart enable 1 1 /dev/mmcblk2
```

2. **Programming the Debian Image on the eMMC Main Partition:**

```
# Download the Debian Image from https://images.solid-run.com/IMX8/imx8mp_build:
wget http://solid-run-images.sos-de-fra-1.exo.io/IMX8/imx8mp_build/build_date_20240806-rev_449b768/imx8mp-sdhc-debian-449b768.img.xz
# Write the Yocto image to the eMMC main partition:
xz -dc imx8mp-sdhc-debian-449b768.img.xz | dd of=/dev/mmcblk2 bs=4k conv=fdatasync
```

3. Set the boot select to boot from eMMC as documented [here](/nxp/imx8/sbc-platform/imx8m-other-articles/hummingboard-pulse-ripple-mate-and-pro-boot-select.md#boot-select) and do reset to boot from eMMC.

## More Features

#### Internet

Connect an Ethernet cable to your HummingBoard Pulse (for internet access during boot-up).\
Models HummingBoard with WiFi, can be connected via [WiFi](/nxp/imx8/sbc-platform/cubox-m-quick-start-guide.md#wifi) or wired Ethernet.

* Please check you Ethernet connection.
* Use the following commands in order to keep your system up-to-date:

```
apt-get update 
apt-get upgrade 
reboot
```

* For more detailed information, please refer to [i.MX8M Debian](https://github.com/SolidRun/documentation/blob/bsp/imx8/debian-11_sr8.md) .

**WiFi**

* You can connect to WiFi using any application, such as : [connmanctl](https://manpages.debian.org/testing/connman/connmanctl.1.en.html) or [wpa\_spplicant](https://wiki.archlinux.org/title/wpa_supplicant).

An example for connecting to WiFi using wpa\_supplicant:

1. To bring a WiFi interface up, run the following :

```
ifconfig wlan0 up 
```

{% hint style="info" %}
To discover your wireless network interface name, see [Network Interfaces](https://wiki.archlinux.org/title/Network_configuration#network_interfaces).
{% endhint %}

2. Install the wpa\_supplicant package:

```
apt-get install wpasupplicant 
```

3. Edit network interfaces file :

At the bottom of the file, add the following lines to allow wlan as a network connection:

```
cat <<EOF > /etc/network/interfaces.d/wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

EOF
```

4. Create a configuration file with the relevant ssid:

```
cat <<EOF > /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

network={
    ssid="MYSSID"
    psk="passphrase" 
}

EOF
```

{% hint style="info" %}
Check your personal ssids by running : ‘iw dev wlan0 scan’
{% endhint %}

5. Make sure it works:

Restart your device and it should connect to the wireless network. If it doesn't, repeat above steps or get help from an adult.

* For more information about using wpa\_supplicant , you can refer to [wpa\_supplicant](https://www.linuxbabe.com/command-line/ubuntu-server-16-04-wifi-wpa-supplicant) or [wpa\_supplicant](https://blog.nelhage.com/2008/08/using-wpa_supplicant-on-debianubuntu/).

#### Bluetooth

1. For showing all Bluetooth devices, run the following:

```
apt-get install bluez
hciconfig -a
```

2. Choose a device, and turn it on:

```
 hciconfig hci0 up
```

3. Set up the Bluetooth name:

```
hciconfig hci0 name 'SolidRun_Ble'
```

4. Make your Bluetooth detectable by other devices:

```
hciconfig hci0 piscan
```

5. If you want to connect to other devices:

* Start by scanning for other Bluetooth devices:

```
hcitool scan
```

* Choose a MAC address and connect :

```
rfcomm connect 0  $MAC 10 & 
```

* You can check the communication between the devices by writing :

```
l2ping -c 4  $MAC
```

#### Cellular Modem

The cellular modem is a more fully featured extension of which contains a cellular module with additional hardware interfaces and a SIM card slot.

You can connect your cellular modem to the mPCIe, and insert a SIM card.

* For some cellular modules to be connected, please refer to [Cellular Modules](/nxp/imx6/sbc-platform/imx6-other-articles/cellular-modules.md) .

#### SPI

For testing you serial peripheral interface - SPI, please see this documentation [SPI from Linux with spidev](/nxp/imx8/sbc-platform/imx8m-other-articles/spi-from-linux-with-spidev.md).

**GUI On Debian**

There is an option with the **Debian** image, up to the user, to work with a GUI like Weston, GNOME and etc.\
For applying this option do the following steps:

First, connect your device to a screen using the working output (HDMI / uHDMI).

For working with **Weston** GUI:

1. Install the Weston package.

```
$ sudo apt install weston
```

2. Make a directory for the output of the Weston GUI.

```
$ mkdir /your/directory/location
```

3. Give permissions to this directory.

```
 $ chmod 0700 /your/directory/location
```

4. Set the XDG\_RUNTIME\_DIR env param to your directory.

```
$ export XDG_RUNTIME_DIR=/your/directory/location
```

5. Start weston from the **PHYSICAL TERMINAL** (not remote or serial session):

```
$ weston
```

For working with **GNOME** GUI on top of Xorg:

1. Install Xorg.

```
$ sudo apt install xorg
```

2. Install your desired gnome.

```
$ sudo apt install gnome-session
```

NOTE: ‘gnome-session’ is an example of gnome that we can work with, you can replace the ‘session' with another GNOME extention. 3. Start your GNOME GUI.

```
$ sudo systemctl start gdm
```

* For logging in you need a user on your device to log into it. You can create one before step 3 by this command (replace the ‘username’ with name that you want) :

```
$ sudo adduser username
```

* You can jump between GUIs that you install (like gnome-session) by the setting button that locates in the down right corner of the home screen.

#### Basler Camera

For getting started with the Camera Module on your board, please see this documentation [Basler Camera Quick Start Guide](/nxp/imx8/sbc-platform/hummingboard-imx8-sbc-quick-start-guide/hummingboard-pulse-imx8m-plus-som-quick-start-guide/hummingboard-pulse-ripple-pro-imx8m-plus-basler-camera-quick-start-guide.md).

## TLV EEPROM Support

Starting from April 01. 2022, the EEPROMs on Carriers, i.MX8M Plus SoMs are being programmed with identifying information such as the product name and SKUs to allow for programmatic identification of hardware. Check our [iMXMP EEPROM documentation](/nxp/imx8/sbc-platform/imx8m-other-articles/imx8mp-eeprom-programming-tlv.md) for additional information.

## MAC Address

There are two options for storing MAC addresses on the i.MX8MP platform:

1. **Store the MAC address in OTP eFuses**

* This is a **non-reversible action**, as the eFuse is permanently programmed.

2. **Store the MAC address in EEPROM using TLV format** (Recommended)

* This method allows flexibility and is the preferred approach.
* [Guidelines](/nxp/imx8/sbc-platform/imx8m-other-articles/imx8mp-eeprom-programming-tlv.md#progammring-mac-address) for Programming a MAC Address in TLV Format

**Default Configuration**

* By default, the MAC address is stored in the SOM's TLV EEPROM.
* All SOMs are pre-flashed with SolidRun's default MAC address range in the TLV EEPROM.

**Custom MAC Address Option**

* There is an option to provide a custom MAC address range.
* SolidRun can program the custom MAC addresses into the TLV EEPROM upon request.

## List Of Supported OS

| **OS**                           |                                                                                    |
| -------------------------------- | ---------------------------------------------------------------------------------- |
| ![](/files/ImHWJmfF4P3oYZioMt5Z) | [Debian](https://github.com/SolidRun/documentation/blob/bsp/imx8/debian-11_sr8.md) |
| ![](/files/PlmAE45Q3UFzqgv7QbHP) | [Yocto](https://github.com/SolidRun/meta-solidrun-arm-imx8/tree/zeus-imx8mp)       |
| ![](/files/njazv9ZRULsuUuzHC3CU) | [Buildroot](https://github.com/SolidRun/imx8mp_build)                              |

## Build from source

* [i.MX8M Software](/nxp/imx8/sbc-platform/imx8m-plus-mini-nano-software.md)

## Documentation

|   | File | Modified |
| - | ---- | -------- |

No files shared here yet.

* Drag and drop to upload or \[browse for files]

Upload file

File description

[Buy a Sample Now](https://shop.solid-run.com/?s=%22HummingBoard+Pulse%22\&post_type=product&_ga=2.156269240.2016484779.1641802897-2012112798.1622706355)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dev.solid-run.com/nxp/imx8/sbc-platform/hummingboard-imx8-sbc-quick-start-guide/hummingboard-iiot-imx8m-plus-som-quick-start-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
