Mise en oeuvre de la carte UDOO NEO

Introduction

Lancé en 2015 et financé via Kickstarter, UDOO NEO est un ordinateur monocarte Android/Linux. La particularité de UDOO NEO est son processeur hétérogène NXP® i.MX 6SoloX qui intègre sur la même puce : un ARM® Cortex-A9 cadencé à 1 GHz et un microcontroleur Cortex-M4 (compatible Arduino UNO) cadencé à 200 MHz.

Liens :

UDOO NEO se décline en trois modèles :

  • FULL : 1GB RAM, WI-FI, BLUETOOTH 4.0 LE, FAST ETHERNET et un capteur 9-AXIS MOTION SENSORS
  • EXTENDED : 1GB RAM, WI-FI et BLUETOOTH 4.0 LE et un capteur 9-AXIS MOTION SENSORS
  • BASIC : 512MB RAM, FAST ETHERNET

La carte testée ici est la UDOO NEO EXTENDED (WI-FI et BLUETOOTH) :

Vous pouvez l’acheter sur www.conrad.fr. Par contre, je déconseille de commander sur le site www.mouser.fr avec lequel j’ai rencontré des problèmes.

Caractéristiques techniques

  • NXP® i.MX 6SoloX ARM Cortex-A9 + Cortex-M4
  • 512MB (Basic) ou 1GB (Extended et Full)
  • Micro HDMI
  • 1 x USB 2.0
  • 1 x USB OTG (micro-AB connector)
  • Fast ethernet RJ45 10/100Mbps (Basic et Full)
  • Wi-Fi 802.11 b/g/n et Bluetooth 4.0 Low Energy (Extended et Full)
  • 3 x UART ports
  • 2 x CAN Bus interfaces
  • 8 x PWM signals
  • 3 x I2C interface
  • 1 x SPI interface
  • 3-Axis Accelerometer (Extended et Full)
  • 3-Axis Magnetometer (Extended et Full)
  • 3-Axis Digital Gyroscope (Extended et Full)
  • 32 extended GPIOs (A9 dedicated)
  • 22 Arduino GPIOs (M4 dedicated)
  • 89 mm x 59 mm
  • 5V DC Micro USB
  • 6-15 V DC Power Jack
  • Compatible Arduino
  • Android 6 Lollipop & Linux Ubuntu (14.04 LTS)

Installation OS Ubuntu

Le site UDOO NEO fournit plusieurs images de systèmes d’exploitation à installer sur une carte Micro SD :

J’ai installé la version UDOObuntu 2.3.0 (Ubuntu 14.04 LTS)

$ sudo dd bs=1M if=<img_file_path>/udoobuntu-udoo-neo-desktop_2.3.0.img of=/dev/<sd_name>
$ sudo sync
  1. Installer la carte Micro SD et démarrer la NEO.

  2. Utiliser un navigateur et entrez l’URL : http://192.168.7.2/

Remarque : Pour les distributions Ubuntu, le compte créé est udooer pour le login et le mot de passe (et ubuntu pour le compte root).

  1. Démarrer le terminal :
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.5 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.5 LTS"
VERSION_ID="14.04"

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 10 (v7l)
BogoMIPS        : 3.00
Features        : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32
...
Hardware        : Freescale i.MX6 SoloX (Device Tree)

$ cat /proc/meminfo
MemTotal:        1018424 kB
MemFree:          486232 kB
MemAvailable:     735404 kB
...

$ free -h
             total       used       free     shared    buffers     cached
Mem:          994M       519M       474M        11M        58M       129M

$ df -lhT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4       15G  2.4G   12G  17% /
devtmpfs       devtmpfs  338M  4.0K  338M   1% /dev
/dev/mmcblk0p1 vfat       32M   25M  8.0M  76% /boot

$ sudo fdisk -l
Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes
4 heads, 16 sectors/track, 486192 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbbff3a74
        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            2048       67583       32768    e  W95 FAT16 (LBA)
/dev/mmcblk0p2           67584    31116287    15524352   83  Linux

$ ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:100 (100.0 B)  TX bytes:100 (100.0 B)

usb0      Link encap:Ethernet  HWaddr 4e:71:9e:aa:bb:cc
          inet addr:192.168.7.2  Bcast:192.168.7.3  Mask:255.255.255.252
          inet6 addr: fe80::4c71:9eff:feaa:bbcc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3282 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3732 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:199256 (199.2 KB)  TX bytes:3041844 (3.0 MB)

wlan0     Link encap:Ethernet  HWaddr 5c:31:3e:28:50:93
          inet addr:192.168.52.11  Bcast:192.168.52.255  Mask:255.255.255.0
          inet6 addr: 2a01:cb1c:91c:b500:5e31:3eff:fe28:5093/64 Scope:Global
          inet6 addr: fe80::5e31:3eff:fe28:5093/64 Scope:Link
          inet6 addr: 2a01:cb1c:91c:b500:a00a:8054:c751:6e2f/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:60 errors:0 dropped:0 overruns:0 frame:0
          TX packets:100 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6632 (6.6 KB)  TX bytes:17531 (17.5 KB)

$ ps x
  PID TTY      STAT   TIME COMMAND
 1267 ?        Ss     0:00 init --user
 1319 ?        Ss     0:00 dbus-daemon --fork --session --address=unix:abstract=/tmp/dbus-hfeQ4osziV
 1328 ?        Ss     0:00 upstart-event-bridge
 1334 ?        Sl     0:00 gnome-keyring-daemon --start --components pkcs11,secrets
 1342 ?        S      0:00 upstart-dbus-bridge --daemon --system --user --bus-name system
 1343 ?        S      0:00 upstart-dbus-bridge --daemon --session --user --bus-name session
 1344 ?        S      0:00 upstart-file-bridge --daemon --user
 1355 ?        Ssl    0:01 /usr/bin/lxsession -s Lubuntu -e LXDE
 1359 ?        Sl     0:00 /usr/lib/gvfs/gvfsd
 1364 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
 1374 ?        Sl     0:08 openbox --config-file /home/udooer/.config/openbox/lubuntu-rc.xml
 1376 ?        Sl     0:03 lxpanel --profile Lubuntu
 1386 ?        Sl     0:09 pcmanfm --desktop --profile lubuntu
 1396 ?        Ss     0:00 /usr/bin/ssh-agent -s
 1406 ?        Sl     0:00 /usr/lib/arm-linux-gnueabihf/indicator-power/indicator-power-service
 1410 ?        Sl     0:03 nm-applet
 1419 ?        Sl     0:00 /usr/lib/arm-linux-gnueabihf/indicator-bluetooth/indicator-bluetooth-service
 1444 ?        Ssl    0:00 /usr/lib/arm-linux-gnueabihf/menu-cache/menu-cached
 1473 ?        Sl     0:00 /usr/lib/gvfs/gvfs-udisks2-volume-monitor
 1498 ?        Sl     0:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
 1555 ?        S      0:00 /bin/dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3
 1561 ?        Sl     0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
 1583 ?        Sl     0:00 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session
 1600 ?        Sl     0:00 /usr/lib/gvfs/gvfs-mtp-volume-monitor
 1641 ?        Sl     0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
 2418 ?        S      0:00 /usr/lib/arm-linux-gnueabihf/gconf/gconfd-2
 2422 ?        Sl     0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.7 /org/gtk/gvfs/exec_spaw/0
 2753 ?        Sl     0:00 lxterminal
 2754 ?        S      0:00 gnome-pty-helper
 2755 pts/0    Ss+    0:00 /bin/bash
 2873 pts/7    S      0:00 -bash

$ g++ -v
Target: arm-linux-gnueabihf
...
gcc version 4.8.4 (Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.4)

$ netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:57125           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:5151            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:57120           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:5152            0.0.0.0:*               LISTEN     
tcp6       0      0 :::5900                 :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN

Remarque : les serveurs VNC (5900), SSH (22) et HTTP (80) sont démarrés.

Normalement, le noyau M4 Arduino est activé au démarrage :

# Get the M4 Arduino core status
$ sudo udoom4ctl status
true

$ cat /boot/uEnv.txt
#save this file with unix-like newlines! (\n, 0x0A)

video_output=hdmi
m4_enabled=true

Sinon, il est possible de le contrôler à partir de la ligne de commande :

# Disable the M4 Arduino core
$ sudo udoom4ctl disable

# Enable the M4 Arduino core
$ sudo udoom4ctl enable

Détection

Sans la carte Micro SD :

$ dmesg
...
usb 3-13: new high-speed USB device number 11 using xhci_hcd
usb 3-13: New USB device found, idVendor=15a2, idProduct=0071
usb 3-13: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 3-13: Product: SE Blank PELE
usb 3-13: Manufacturer: Freescale SemiConductor Inc 
hid-generic 0003:15A2:0071.0005: hiddev0,hidraw3: USB HID v1.10 Device [Freescale SemiConductor Inc  SE Blank PELE] on usb-0000:00:14.0-13/input0

$ lsusb
...
Bus 003 Device 011: ID 15a2:0071 Freescale Semiconductor, Inc.

Avec la carte Micro SD Ubuntu 14.04 :

$ dmesg
...
usb 3-13: new high-speed USB device number 13 using xhci_hcd
usb 3-13: New USB device found, idVendor=1d6b, idProduct=0104
usb 3-13: New USB device strings: Mfr=3, Product=4, SerialNumber=5
usb 3-13: Product: Multifunction Composite Gadget
usb 3-13: Manufacturer: SECO-AIDILABiProduct=UDOONEO
usb 3-13: SerialNumber: DF6699592A2BC1D4
cdc_acm 3-13:1.2: This device cannot do calls on its own. It is not a modem.
cdc_acm 3-13:1.2: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
usbcore: registered new interface driver cdc_ether
rndis_host 3-13:1.0 usb0: register 'rndis_host' at usb-0000:00:14.0-13, RNDIS device, 4e:71:9d:aa:bb:cc
usbcore: registered new interface driver rndis_host
usbcore: registered new interface driver rndis_wlan
scsi 9:0:0:0: Direct-Access     Linux    File-Stor Gadget 0314 PQ: 0 ANSI: 2
sd 9:0:0:0: Attached scsi generic sg9 type 0
sd 9:0:0:0: [sdi] 65536 512-byte logical blocks: (33.5 MB/32.0 MiB)
sd 9:0:0:0: [sdi] Write Protect is off
sd 9:0:0:0: [sdi] Mode Sense: 0f 00 00 00
sd 9:0:0:0: [sdi] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sd 9:0:0:0: [sdi] Attached SCSI removable disk

$ lsusb
...
Bus 003 Device 013: ID 1d6b:0104 Linux Foundation Multifunction Composite Gadget

ifconfig
...
usb0      Link encap:Ethernet  HWaddr 4e:71:9d:aa:bb:cc  
          inet adr:192.168.7.1  Bcast:192.168.7.3  Masque:255.255.255.252
          adr inet6: fe80::4c71:9dff:feaa:bbcc/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
...

Installation IDE Arduino

Remarque : l’IDE Arduino est déjà installé sur la version Ubuntu 14.04 de la NEO.

Lien : Arduino M4 Processor

  1. Télécharger la dernière version de l’IDE sur le site : www.arduino.cc

  2. Démarrer l’IDE puis dans Fichier -> Préférences, ajouter le lien ci-dessous dans URL de gestionnaire de cartes supplémentaires :

https://udooboard.github.io/arduino-board-package/package_udoo_index.json

  1. Aller dans Outils -> Type de carte -> Gestionnaire de carte et rechercher UDOO NEO (iMX6 SoloX) by UDOO Team et Installer
  1. Maintenant dans Outils -> Type de carte : UDOO NEO (Cortex M4)

Laisser Outils -> Ports unselected

Sur UDOO Neo, le programme (sketch) est conservé sur la carte SD. Lorsque la carte est sous tension, celui-ci est chargé à partir du fichier /var/opt/m4/m4last.fw et exécuté sur le noyau M4.

Dans UDOO Neo, il y a deux ports série différents :

  • Serial0 : port série UART disponible sur les broches externes 0 et 1
  • Serial : port série interne “connecté” au coeur A9, accessible via /dev/ttyMCC

Remarque : MCC (Multi-Core Communication) est un protocole qui émule un port série entre les deux cœurs. Le pilote utilise une mémoire partagée dans la DDR qu’il utilise pour la communication via le fichier spécial /dev/ttyMCC.

Tests

VNC

Utiliser un client VNC :

SSH

$ ssh -X udooer@192.168.52.11
udooer@udooneo:~/$ echo $SSH_CONNECTION
192.168.52.2 47771 192.168.52.11 22
udooer@udooneo:~/$ id
uid=1000(udooer) gid=1000(udooer) groups=1000(udooer),4(adm),20(dialout),27(sudo),29(audio),30(dip),44(video),46(plugdev),105(fuse)

Cortex-M4

Branchement d’une LED sur la broche 11 et d’un cable TTL/serie sur les broches 0 (Rx) et 1 (Tx) :

int led = 11;

void setup() {
  Serial0.begin(115200); // broches 0 et 1
  delay(100);
  Serial0.println("start");
  pinMode(led, OUTPUT);
}


void loop() {
  Serial0.println("high");
  digitalWrite(led, HIGH);
  delay(1000);

  Serial0.println("low");
  digitalWrite(led, LOW);
  delay(1000);
}

Pour flasher le noyau M4, il faut la connexion USB directe (USB OTG Gadget) et le serveur UDOO FOTA sur la NEO :

$ dpkg -l | grep udoofota
ii  udoofota-serial      1.2-1  armhf        UDOO Firmware Over the Air Uploader -- Serial
ii  udoofota-server      1.2-1  armhf        UDOO Firmware Over the Air Uploader -- Server

Attention : le moniteur série n’est pas disponible à partir du PC.

Ce qui donne lors de l’upload :

Le croquis utilise 104348 octets (19%) de l'espace de stockage de programmes. Le maximum est de 524288 octets.
Address:     192.168.7.2 
Port:        5152 
UDOONeo 111224 bytes sent
UDOONeo M4 Sketch is running

Remarque : Sur UDOO Neo, le programme (sketch) est conservé sur la carte SD. Lorsque la carte est sous tension, celui-ci est chargé à partir du fichier /var/opt/m4/m4last.fw et exécuté sur le noyau M4.

$ ls -l /var/opt/m4/
total 120
drwxrwxr-x 2 root dialout   4096 Jul 13 15:41 ./
drwxr-xr-x 3 root root      4096 Jun 28 13:08 ../
-rw-rw-r-- 1 root dialout 111224 Jul 13 15:41 m4last.fw

Remarque : évidemment, il est aussi possible d’utiliser l’IDE Arduino installé sur la NEO.

Cortex-A9 et Cortex-M4

Lien : Communication Cortex-A9 et Cortex-M4

Des exemples pour plusieurs langages (C, Java, PHP, Python) sont fournis : serial_libraries_examples

Qt

Pour faire jouer les dépendances, on va installer directement qtcreator :

$ sudo apt-get install qtcreator
$ sudo apt-get install libqt5serialport5 libqt5serialport5-dev
$ sudo apt-get install libqt5sql5-mysql
$ sudo apt-get install libudev-dev

$ qmake -v
QMake version 3.0
Using Qt version 5.2.1 in /usr/lib/arm-linux-gnueabihf

Brochage :

  • Led Rouge : broche 11
  • Led Verte : broche 12
  • Led Bleue : broche 13

Sources :

Installation OS Android

Le site UDOO NEO fournit plusieurs images de systèmes d’exploitation à installer sur une carte Micro SD :

J’ai installé la version Android 6.0.1

$ sudo dd bs=1M if=<img_file_path>/UDOONEO-Android-6.0.1-beta2.img of=/dev/<sd_name>
$ sudo sync

Installer la carte Micro SD et démarrer la NEO.

La version Android 6.0.1 intègre des applications pré-installées comme SuperSU, ADBWireless, CyanogenMod Terminal, CyanogenMod CMFileManger, TWRP Recovery, et le support NTFS.

Liens :

Android Settings

How To Install Gapps On UDOO Running Android

Voir aussi

  • WaRP 7

Le WaRP 7 intègre à la fois un processeur (ARM Cortex-A7) et un micro-contrôleur (ARM Cortex-M4).

Liens :

www.nxp.com

WARP7-FLYER-V2.pdf

fr.farnell.com

Articles :

Le relais 2x5v dans l’iot ou lart de piloter en BLE les peripheriques de la WaRP 7 - Partie 1

Le relais 2x5v dans l’iot ou lart de piloter en BLE les peripheriques de la WaRP 7 - Partie 2

i.MX7 : « Communication interprocesseur, donnons vie au Cortex M4 »

Mise en œuvre du protocole Modbus sur WaRP7 via Qt5

Open Silicium n°20

GNU Linux Magazine n°200

  • UDOO X86

UDOO X86 est une carte regroupant une architecture x86 64 bits Quad Core d’Intel® (Pentium, Celeron ou Atom) et une plateforme compatible Arduino ™101 (Intel Quark SE core 32 bits 32 MHz).

Liens :

www.udoo.org

udoo_x86_datasheet.pdf

Retour au sommaire