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 :
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.
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
Installer la carte Micro SD et démarrer la NEO.
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).
$ 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
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
...
Remarque : l’IDE Arduino est déjà installé sur la version Ubuntu 14.04 de la NEO.
Lien : Arduino M4 Processor
Télécharger la dernière version de l’IDE sur le site : www.arduino.cc
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
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 1Serial
: 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
.
Utiliser un client VNC :
$ 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)
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.
Lien : Communication Cortex-A9 et Cortex-M4
Des exemples pour plusieurs langages (C, Java, PHP, Python) sont fournis : serial_libraries_examples
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 :
Sources :
Source Cortex-M4 : arduino_serial_example_bidirectional.ino
Source Cortex-A9 : qt5-neo.zip
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 :
How To Install Gapps On UDOO Running Android
Le WaRP 7 intègre à la fois un processeur (ARM Cortex-A7) et un micro-contrôleur (ARM Cortex-M4).
Liens :
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
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 :