Autore Topic: UDOO board  (Letto 3276 volte)

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
UDOO board
« il: 16 Novembre 2013, 20:11:55 »
Con un mese di ritardo, finalmente mi è arrivata la UDOO!



Per chi non la conoscesse, è una scheda hardware che unisce un processore Freescale i.MX 6 a un Atmel SAM3X, quest'ultimo lo stesso usato nell'Arduino DUE, di cui la scheda è compatibile al livello di pinout e firmware. Su NSA ne avevamo parlato a suo tempo.

Copio le caratteristiche:
    Freescale i.MX 6 ARM Cortex-A9 CPU Dua/Quad core 1GHz
    Integrated graphics, each processor provides 3 separated accelerators for 2D, OpenGL® ES2.0 3D and OpenVG™
    Atmel SAM3X8E ARM Cortex-M3 CPU (same as Arduino Due)
    RAM DDR3 1GB
    76 fully available GPIO
    Arduino-compatible R3 1.0 pinout
    HDMI and LVDS + Touch (I2C signals)
    Ethernet RJ45 (10/100/1000 MBit)
    WiFi Module
    Mini USB and Mini USB OTG (micro with the final release)
    USB type A (x2) and USB connector (requires a specific wire)
    Analog Audio and Mic
    SATA (Only Quad-Core version)
    Camera connection
    Micro SD (boot device)
    Power Supply 12V and External Battery connector

Il modello che ho io è una UDOO Quad (= con processore quad core), che si riconosce anche dal più grosso dissipatore. Poichè avevo ordinato il "kit", insieme alla scheda nuda e cruda ho ricevuto anche un alimentatore (il solito mattoncino da muro; è un 12V 2A), un cavo HDMI da 2 metri (con tanto di logo UDOO sui terminali), un adattatore Bluetooth USB (anch'esso "griffato"), e due Micro-SD da 8 GB con precaricate le immagini di Ubuntu Linux e Android 4.2.2.


Prima esperienza

La scheda funziona :D. A parte le banalità, non ho avuto tempo di giocarci tantissimo e per lo più la ho solo provata attraverso la console seriale (perchè al momento non ho un monitor/TV con presa HDMI da usare).
La scheda dispone di una connessione micro-USB che, attraverso un bridge seriale-usb, si collega alla porta seriale di debug dell'i.MX 6, che è la porta dove U-BOOT mostra i suoi messaggi di avvio e dove Ubuntu piazza una console.

Risultati nbench che così Legacy è contento :D:

Codice: [Seleziona]
BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          497.92  :      12.77  :       4.19
STRING SORT         :          61.566  :      27.51  :       4.26
BITFIELD            :      1.7998e+08  :      30.87  :       6.45
FP EMULATION        :          66.227  :      31.78  :       7.33
FOURIER             :          6236.1  :       7.09  :       3.98
ASSIGNMENT          :          7.1316  :      27.14  :       7.04
IDEA                :          1512.7  :      23.14  :       6.87
HUFFMAN             :          802.66  :      22.26  :       7.11
NEURAL NET          :          8.2873  :      13.31  :       5.60
LU DECOMPOSITION    :          296.56  :      15.36  :      11.09
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 24.168
FLOATING-POINT INDEX: 11.320
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : 4 CPU
L2 Cache            :
OS                  : Linux 3.0.35
C compiler          : gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
libc                : libc-2.13.so
MEMORY INDEX        : 5.782
INTEGER INDEX       : 6.225
FLOATING-POINT INDEX: 6.278
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.

Il dissipatore durante l'uso si scalda, ma non scotta, è tiepido al tatto; ci si può tenere sopra la mano. Bisognerebbe vedere con qualcosa di intensivo quanto sale la temperatura.

Come detto, sulla scheda è presente anche un Atmel SAM3X8E, che è un microcontrollore con processore ARM Cortex-M3, lo stesso usato dall'Arduino DUE, che monta appunto il suo bootloader. Praticamente in tutto e per tutto la scheda è un "clone" Arduino DUE, però con collegato assieme l'i.MX e tutte le sue porte di espansione.
I due processori sono collegati tra di loro mediante sia una connessione seriale, sia un collegamento USB OTG. Entrambi questi collegamenti possono essere direzionati con dei jumper verso delle porte micro-USB in modo da avere la massima flessibilità di funzionamento; qui sono elencate le varie combinazioni possibili.


La scheda può anche far girare Android 4.2.2, ma non lo ho ancora provato. In più non ho ancora provato le capacità grafiche dell'i.MX (sempre a causa di non avere un monitor/TV adatto).


Quando farò altri esperimenti posterò qui; intanto se avete qualche prova da eseguire mettete un commento e sarò felice di provare. :D

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re:UDOO board
« Risposta #1 il: 16 Novembre 2013, 20:17:49 »
WANT!!!  ::) ::) ::)

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:UDOO board
« Risposta #2 il: 16 Novembre 2013, 22:25:35 »
per lo sviluppo del kernel invece puoi fare come sto facendo con questa board

Codice: [Seleziona]
tftpboot 0x80060000 gentoo-tl-WR703N.img
go 0x80060000

Quelli li sono comandi di u-boot? Come funziona il tftp? Metto un server sul PC di sviluppo e la scheda lo trova con una richiesta in broadcast sulla rete?

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:UDOO board
« Risposta #3 il: 17 Novembre 2013, 00:57:26 »
Capito; devo mettermi su un sistemino di test decente, sopratutto riprendermi uno switch gigabit che avevo usato da qualcosa parte ma che son sicuro ora non è più necessario e usarlo per espandere la rete locale nelle vicinanze del banco di lavoro.

Chicca per te, l'env dell'u-boot di default:

Codice: [Seleziona]
U-Boot 2009.08-svn41 (Sep 16 2013 - 18:28:30)

CPU: Freescale i.MX6 family TO1.2 at 792 MHz
Thermal sensor with ratio = 180
Temperature:   35 C, calibration data 0x5724e569
mx6q pll1: 792MHz
mx6q pll2: 528MHz
mx6q pll3: 480MHz
mx6q pll8: 50MHz
ipg clock     : 66000000Hz
ipg per clock : 66000000Hz
uart clock    : 80000000Hz
cspi clock    : 60000000Hz
ahb clock     : 132000000Hz
axi clock   : 264000000Hz
emi_slow clock: 132000000Hz
ddr clock     : 528000000Hz
usdhc1 clock  : 198000000Hz
usdhc2 clock  : 198000000Hz
usdhc3 clock  : 198000000Hz
usdhc4 clock  : 198000000Hz
nfc clock     : 24000000Hz
Board: i.MX6Q-UDOO: unknown-board Board: 0x63012 [POR]
Boot Device: NOR
I2C:   ready
DRAM:   1 GB
MMC:   FSL_USDHC: 0,FSL_USDHC: 1,FSL_USDHC: 2,FSL_USDHC: 3
In:    serial
Out:   serial
Err:   serial
Net:   got MAC address from IIM: 00:c0:08:88:18:ba
FEC0 [PRIME]
Hit any key to stop autoboot:  0
MX6Q UDOO U-Boot > printenv
bootdelay=3
baudrate=115200
ipaddr=192.168.1.103
serverip=192.168.1.101
netmask=255.255.255.0
loadaddr=0x10800000
rd_loadaddr=(0x10800000 + 0x300000)
netdev=eth0
ethprime=FEC0
uboot=u-boot.bin
kernel=uImage
nfsroot=/opt/eldk/arm
bootargs_base=setenv bootargs console=ttymxc0,115200
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
bootcmd_net=run bootargs_base bootargs_nfs; tftpboot ${loadaddr} ${kernel}; bootm
bootargs_mmc=setenv bootargs ${bootargs} ip=dhcp root=/dev/mmcblk0p1 rootwait
bootcmd_mmc=run bootargs_base bootargs_mmc; mmc dev 3; mmc read ${loadaddr} 0x800 0x2000; bootm
ethact=FEC0
videomode=video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24
bootargs=console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fixrtc rootflags=barrier=1 mem=768M arm_freq=996 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24
boot_dev=mmc dev 2; ext2load mmc 2:1 10800000 /boot/uImage
memory=mem=768M
bootdev=mmc dev 2; ext2load mmc 2:1
root=root=/dev/mmcblk0p1
option=rootwait rw fixrtc rootflags=barrier=1
setvideomode=setenv videomode video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24
lvdsres1=
lvdsres2=
cpu_freq=arm_freq=996
run_from_nfs=0
setbootargs_nfs=setenv bootargs console=ttymxc1,115200 root=/dev/nfs nfsroot=${ip_server}:${nfs_path} nolock,wsize=4096,rsize=4096 ip=${ip_local} ${memory} ${cpu_freq} ${videomode}
setbootargs=setenv bootargs console=ttymxc1,115200 ${root} ${option} ${memory} ${cpu_freq} ${videomode}
setbootdev=setenv boot_dev ${bootdev} 10800000 /boot/uImage
bootcmd=run setvideomode; if test "${run_from_nfs}" = "0"; then run setbootargs; else run setbootargs_nfs; fi; run setbootdev; run boot_dev; bootm 10800000
stdin=serial
stdout=serial
stderr=serial

Environment size: 1720/8188 bytes
MX6Q UDOO U-Boot >

Devo vedere come fare un semplice hello-world...

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:UDOO board
« Risposta #4 il: 17 Novembre 2013, 15:43:30 »
goloso, nota come uboot "vero" ha un sacco di altre opzioni, prova a vedere se hai anche il comando "go" o se hai solo "bootm" (se dai "help" vedi i comandi disponibili)

C'è sia go che bootm; in effetti c'è tutta una serie di robe qua :D:

Codice: [Seleziona]
MX6Q UDOO U-Boot > help
?       - alias for 'help'
autoscr - DEPRECATED - use "source" command instead
base    - print or set address offset
bdinfo  - print Board Info structure
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
booti   - booti   - boot android bootimg from memory

bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
clk     - Clock sub system
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
destroyenv- destroy enviroment variables stored in medium
dhcp    - boot image via network using DHCP/TFTP protocol
download_mode- download_mode - enter i.MX serial/usb download mode
echo    - echo args to console
erase   - erase FLASH memory
exit    - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
fastboot- fastboot- use USB Fastboot protocol

fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
flinfo  - print FLASH memory information
go      - start application at address 'addr'
help    - print online help
i2c     - I2C sub-system
iminfo  - print header information for application image
imxotp  - One-Time Programable sub-system
imxtract- extract a part of a multi-image
itest   - return true/false on integer compare
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
md      - memory display
mii     - MII utility commands
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub system
mmcinfo - display MMC info
mtest   - simple RAM read/write test
mw      - memory write (fill)
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
regul   - Regulator sub system
reset   - Perform RESET of the CPU
rtc     - RTC reader sub-system
run     - run commands in an environment variable
sata    - SATA sub system
saveenv - save environment variables to persistent storage
setenv  - set environment variables
sf      - SPI flash sub-system
showvar - print local hushshell variables
sleep   - delay execution for some time
source  - run script from memory
sspi    - SPI utility commands
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
udooconfig- Interactive setup for UDOO configuration.
version - print monitor version
MX6Q UDOO U-Boot >

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:UDOO board
« Risposta #5 il: 10 Dicembre 2013, 13:27:46 »
news ?

Ho installato tutti i vari tool sul PC fisso per lo sviluppo, controllato che la pipeline Clang+as gcc+ld gcc funzionasse, e ho fatto un programmino d'esempio.
Ora devo riuscire a caricarlo sulla scheda; via ethernet ancora non ho provato perchè prima mi mancava uno switch (poi son andato a recuperare uno mio in un posto visto che non era più usato), e provare a caricare direttamente un binario dalla chiavetta non ha funzionato*.

Quindi praticamente devo capire bene come fare un'immagine che posso caricare con u-boot o per lo meno un binario liscissimo che posso mettere in memoria e eseguire al momento. E' che sono a casa solo praticamente il venerdì sera e sabato, tutti gli altri giorni sono nell'appartamento vicino all'università, e non ho molto spazio dove mettere i miei congegni di test. :-\


* L'immagine la carica, però quando dò il go si blocca lì e devo fare un reset. Ci sono varie cose che credo complottino nel non riuscire: una è che la toolchain non mi vuole generare un binario liscio ma solo elf, poi che non so se il programma che ho scritto è sbagliato, oppure sbaglio a saltare nel codice dell'immagine (si, ho cercato l'entry point dell'elf con objdump).
Il fatto che sia sbagliato il programma e non scriva all'indirizzo della UART può essere, ma ho usato gli indirizzi che compaiono del manuale del processore (5000 e passa pagine :o), e in più ho provato a mandare dati a tutte e 5 le UART, qualcuna sarà collegata alla seriale di debug!

** Mi è venuta un'illuminazione proprio mentre scrivevo questo: non ho considerato di dire all'assembler/linker qual'è l'indirizzo a cui carico il binario, quindi eventuali indirizzi assoluti sono tutti riferiti a indirizzi sbagliati!
Se è così guarda...  :-X

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re:UDOO board
« Risposta #6 il: 10 Dicembre 2013, 23:51:05 »
dovresti farti un progetto con tanto di direttive di link, il che significa anche come e dove mettere le varie session (.data. rodata. text .vectors .debug etc), come compilare, se, session by session, alignment a byte, word, long, eventuali stuff dei buchi che lascia in giro il linker e tante altre faccende, tutte queste cose se non le curi possono alzare excpetion o dare malfunzionamenti anche strani da capire
Si ma era un programmino tanto per fare, non volevo star li a setuppare tutto un cosone di sviluppo per vedere 1,2,3 sulla seriale...

Citazione
per la seriale bah, occhio che tante macchine 16C5XX hanno delle rogne poco poco per nulla chiare se utilizzate in polling, p.e. la uart 16C550 integrata nel modulo Atheros AR98xx vuole che siano cancellati dei bit prima di poter essere operativa, non e' scritto in modo esplicito e se non lo fai non funziona (scoperto usando il jtag)

occhio anche ai casini di endianess e di alignment, e questa ultima nel modulino Atheros AR98xx significa che se la 16C550 ha un registro a byte, spaiato a word, e tu ci accedi a word si incazza un attimo per motivi suoi, sono cavolate ma fanno la differenza, e occhio che su PPC si puo' incazzare anche il bus sollevando un bus error se la periferica non gradisce per nulla la faccenda. Ovviamente, giusto per rendere la cosa ancora + golosa, tutto ciò non e' nemmeno la regola, infatti su alcuni DSP TI classe 320, bruttissime bestie a 16bit, vale esattamente il contrario, ovvero se la seriale e' char tu la devi accedere a word, altrimenti si incazza il bus =P

E vabbè, cosa c'entra il PPC, questo è un ARM! :P
No cmq il manuale è chiaro nell'accesso, 32 bit little endian di cui solo gli 8 bassi son considerati come dato.

Poi adesso non ricordo bene, e già a quel tempo avevo dato una letta sommaria per avere gli indirizzi, ma immaginavo che, se u-boot due momenti prima la stava usando, la UART appropriata sarebbe stata già inizializzata.

Ti faccio sapere quando farò ulteriori prove. ;)

Tags: