QNX SDP 8.0 BSP release for Nitrogen8M Plus SMARC QNX SDP 8.0 BSP release for Nitrogen8M Plus SMARC We are proud to present our latest QNX SDP 8.0 BSP for our Nitrogen8M Plus SMARC board. For the impatient You can download the BSP below: BSP_ezurio-nitrogen8mp-smarc_br-hw-rel_be-800-v1.0.zip If you wish to test a pre-built binary before checking the BSP source code, here it is: BSP_ezurio-nitrogen8mp-smarc_br-hw-rel_be-800-v1.0.img.gz This latter can be programmed in different ways: One can follow our programming eMMC guide One can use Balena Etcher to program its SD card or USB drive Linux users can also program it to SD Card or USB Stick using zcat and dd: ~$ zcat BSP_ezurio-nitrogen8mp-smarc_br-hw-rel_be-800-v1.0.img.gz | sudo dd of=/dev/sdX bs=1M We also recommend reading our QNX Getting Started Guide article to learn about building/debugging QNX apps. Although this article has been written for QNX6.6, the info still applies for QNX8.0. Nitrogen8M Plus SMARC BSP features This section will detail all the currently supported features of the BSP. Display support The BSP supports both LVDS and HDMI output which can be tested using the OpenGL-ES gears demo application. Here is an example for HDMI: # gles2-gears -display=3 300 frames in 5.004 seconds = 59.952 FPS During that test, your display should look like below: If you want to use the LVDS output, you need either our BD070LIC3 or BD101LIC3 LVDS display: # gles2-gears -display=2 297 frames in 5.002 seconds = 59.376 FPS Network support Both gigabit Ethernet ports (ETH0 & ETH1) are supported: ETH0 interface is called dwceqos0 # ifconfig dwceqos0 dwceqos0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:19:b8:0f:9e:61 inet6 fe80::7c0a:314e:58d8:a4b1%dwceqos0 prefixlen 64 scopeid 0x6 inet6 2001:861:3201:3d10:c072:3c27:b956:f984 prefixlen 64 autoconf inet 192.168.1.154 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=1<PERFORMNUD> # ping google.com PING6(56=40+8+8 bytes) 2001:861:3201:3d10:c072:3c27:b956:f984 --> 2a00:1450:4007:819::200e 16 bytes from 2a00:1450:4007:819::200e, icmp_seq=0 hlim=118 time=4.237 ms 16 bytes from 2a00:1450:4007:819::200e, icmp_seq=1 hlim=118 time=3.656 ms 16 bytes from 2a00:1450:4007:819::200e, icmp_seq=2 hlim=118 time=2.254 ms --- google.com ping6 statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/std-dev = 2.254/3.383/4.237/0.832 ms ETH1 interface is called ffec0 # ifconfig ffec0 ffec0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:19:b8:0f:9e:60 inet6 fe80::1c9f:814d:e6a4:f964%ffec0 prefixlen 64 scopeid 0x5 inet 169.254.18.16 netmask 0xffff0000 broadcast 169.254.255.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=1<PERFORMNUD> SD / eMMC support Both SD card (on carrier board) and eMMC (on module) are supported: # ls /dev/sd* /dev/emmc* /dev/emmc0 /dev/emmc2 /dev/emmc6 /dev/emmc0t12 /dev/emmc3 /dev/emmc7 /dev/emmc0t179 /dev/emmc4 /dev/sd0 /dev/emmc1 /dev/emmc5 /dev/sd0t131 # mount -t dos -o exe=all /dev/emmc0t12 /emmc-fat/ # ls -l /emmc-fat/ total 13368 -rwxrwxrwx 1 root root 275 2024-10-15 16:34 boot.scr -rwxrwxrwx 1 root root 49411 2024-10-17 14:38 imx-dtb -rwxrwxrwx 1 root root 13639372 2024-10-17 15:07 qnx-ifs The QNX6 partition is mounted automatically at bootup: # mount /dev/emmc0t179 on / type qnx6 ifs on / type ifs /dev/shmem on /dev/shmem type shmem USB Host support All the USB Host ports of the Nitrogen8M Plus SMARC device are supported. # ls /dev/umass0* /dev/umass0 /dev/umass0t131 # mount -t dos -o exe=all /dev/umass0t131 /mnt # ls /mnt/ song.wav GPIO / UART / I2C / SPI support The BSP does support all the standard embedded IPs such as UART / I2C / SPI / GPIO of the i.MX 8M Plus. Here is a list of the exposed IPs: # ls /dev/ser* /dev/ser1 /dev/ser2 /dev/ser3 # ls /dev/i2c* /dev/i2c2 /dev/i2c3 /dev/i2c4 /dev/i2c6 # ls /dev/io-spi/ spi1 spi2 All the above nodes can be accessed from your application using QNX API: UART API I2C API SPI API The GPIO node however should be used via the gpio-test binary: # use gpio-test gpio-test - Utility for the GPIO Resource Manager Usage: gpio-test -b bank -p pin [options] Note: - This utility does *not* configure the IOMUXC. The IOMUXC pin muxing may need to be configured separately. Options: -b bank Set the GPIO bank number -p pin Set the GPIO pin number being accessed -i Configure the specified GPIO pin as an input -o state Configure the specified GPIO pin as output and set its state -w state Set the output state of the specified GPIO pin -N path Specify the location of the GPIO resource manger to attach to The default path is /dev/gpio CAN support The BSP includes the CAN driver for the i.MX 8MP that can be used with canctl: # canctl -u1,rx0 -i Message queue size: 100 Wait queue size: 16 Mode: IO Bitrate: 250000 Baud Bitrate prescaler: 20 Sync jump width: 1 Time segment 1: 8 Time segment 2: 2 TX mailboxes: 32 RX mailboxes: 32 Loopback: NONE Autobus: OFF Silent mode: OFF # canctl -u1,rx0 -M GET_MID = 0x100C0000 # canctl -u1,rx0 -M GET_MID = 0x100C0000 # canctl -u1,rx0 -r READ_CANMSG_EXT 1: mid = 0x100C0000 timestamp = 0xC25A dat len = 4 dat = de ad be ef .... # echo test > /dev/can1/tx32 IPL bootloader Our BSP currently works if U-Boot is your main bootloader. U-Boot offers many features like boot from network, USB, display splash screen etc… However, U-Boot is GPL licensed, which can be inconvenient for some customers. That is why we offer IPL support, for modules with 2GB or 4GB of LPDDR4, which allows to boot from either SD or eMMC. You can flash it using fastboot: fastboot flash bootloader images/ipl-nitrogen8mp-smarc.imx Then the boot log should look like the following: Boot device: eMMC chip NOTICE: BL31: v2.6(release):lf-5.15.32-2.0.0-rc1-0-g47baad824-dirty NOTICE: BL31: Built : 11:27:11, May 24 2022 Welcome to QNX OS Initial Program Loader for Ezurio Nitrogen8MP SMARC ATF commit: 47baad8 Command: Press 'D' for serial download, using the 'sendnto' utility Press 'M' for SDMMC download, IFS filename MUST be 'QNX-IFS'. Press 'E' for eMMC download, IFS filename MUST be 'QNX-IFS'. eMMC download... load image done. Found image @ 0x48000fa0 Loading FDT @ 0x40100000 Jumping to startup @ 0x40801800 board_smp_num_cpu: 4 cores board_smp_num_cpu: 4 cores board_smp_num_cpu: 4 cores Welcome to QNX 8.0.0 on Ezurio_Nitrogen8MP_SMARC ! QNX Momentics IDE integration This BSP can be imported by the QNX Momentics IDE: Then the BSP can be modified and built as needed: Finally, the IDE brings many tools that can be used to profile the system while it is running: DDR variants This BSP can be built for Nitrogen8MP SMARC platforms with either 2GB or 4GB of LPDDR4. By default, the build considers 2GB of LPDDR4, in order to change to 4GB you need to set an environment variable to build the BSP: $ source /opt/qnx800/qnxsdp-env.sh $ DDR_SIZE=4096 make Or if you use the IDE, you can add a build variable in the project properties as shown below: