Wednesday, November 18, 2015

WiFi STA mode working with NEO udoo

There are still a issue with this procedure.

Here is S99Wifi init script to kick off loading wifi

modprobe wlcore
modprobe wl18xx
modprobe wlcore_sdio
sleep 2m

ifconfig wlan0 up
wpa_supplicant -B  -i wlan0 -c /etc/wpa_supplicant.conf
udhcpc -i wlan0


The issue is:
[    2.532538] cfg80211: Calling CRDA to update world regulatory domain
[    2.637945] wlcore: Time Sync: gpio requested
[    2.648371] wl18xx_driver wl18xx.0.auto: Direct firmware load failed with error -2
[    2.655956] wl18xx_driver wl18xx.0.auto: Falling back to user helper

The TI WiLink needs a wl18xx-conf.bin i.e. /lib/firmware/ti-connectivity/wl18xx-conf.bin
This is configuration file, need to see how yocoto does this or Debian.

Right now it works for STA mode.  Next is to configure AP and STA.




Tuesday, November 17, 2015

Neo for quad-copter flight controller

Neo board from udoo.org

The goal is to use neo board for a flight controller.  The neo is running Debian on the ARM Cortex A9 and mqx (RTOS) on the ARM Cortex M4.  Debian has a lot of bloat and goal is to use some image processing on the A9.  So, the first step is to get a minimal Linux build, i.e buildroot.

Minimal Linux;

 more ./meminfo
MemTotal:         499344 kB
MemFree:          352780 kB
MemAvailable:     350884 kB
Buffers:             752 kB
Cached:             1048 kB

Debian Linux:

MemTotal:         499376 kB
MemFree:          123968 kB
MemAvailable:     230188 kB



Created a basic configuration script and board info for buildroot.  Success!  buildroot compiles, u-boot, Linux and creates a file system.  Here is the output:

U-Boot 2014.04-gedd0741 (Nov 15 2015 - 23:17:26)

CPU:   Freescale i.MX6SX rev1.2 at 792 MHz
CPU:   Temperature 36 C, calibration data: 0x5924f869
Reset cause: POR
Board: MX6SX UDOO NEO
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Found PFUZE300! deviceid 0x30, revid 0x11
Net:   CPU Net Initialization Failed
No ethernet found.
Normal Boot
Hit any key to stop autoboot:  0
mmc0 is current device
reading uEnv.txt
426 bytes read in 9 ms (45.9 KiB/s)
Running bootscript from mmc ...
** File not found /var/opt/m4/m4last.fw **
reading /m4startup.fw
** Unable to read file /m4startup.fw **
## Starting auxiliary core at 0x84000000 ...
reading /zImage
4398312 bytes read in 211 ms (19.9 MiB/s)
Booting from mmc ...
reading dts/imx6sx-udoo-neo-basicks-hdmi-m4.dtb
39446 bytes read in 23 ms (1.6 MiB/s)
Kernel image @ 0x80800000 [ 0x000000 - 0x431ce8 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300ca15
sono entrato in ldo_mode_set
setto i valori
valore di vddarm 19
switch to ldo_bypass mode!

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.14.28-g9e7d486-dirty (tcmichals@tcmichals-Studio-540) (gcc version 4.9.3 (Buildroot 2015.11-git-00713-g4c55bc1-dirty) ) 5
[    0.000000] CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: UDOO Neo Basic Kickstarter (based on iMX.6 SoloX)
[    0.000000] Reserved memory: reserved region for node 'm4@0x84000000': base 0x84000000, size 8 MiB
[    0.000000] cma: CMA: reserved 320 MiB at 8c000000
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 8 pages/cpu @8bb3d000 s9152 r8192 d15424 u32768
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 128000
[    0.000000] Kernel command line: console=ttymxc0,115200 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw mem=512M uart_from_osc clk_ignore_unused cpu0
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 171404K/516096K available (5054K kernel code, 332K rwdata, 5656K rodata, 260K init, 384K bss, 344692K reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xa0800000 - 0xff000000   (1512 MB)
[    0.000000]     lowmem  : 0x80000000 - 0xa0000000   ( 512 MB)
[    0.000000]     pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
[    0.000000]     modules : 0x7f000000 - 0x7fe00000   (  14 MB)
[    0.000000]       .text : 0x80008000 - 0x80a7dbcc   (10711 kB)
[    0.000000]       .init : 0x80a7e000 - 0x80abf3c0   ( 261 kB)
[    0.000000]       .data : 0x80ac0000 - 0x80b13330   ( 333 kB)
[    0.000000]        .bss : 0x80b1333c - 0x80b73664   ( 385 kB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000]  RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=1.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] L310 cache controller enabled
[    0.000000] l2x0: 16 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x32030000, Cache size: 256 kB
[    0.000000] Switching to timer-based delay loop
[    0.000007] sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 1431655765682ns
[    0.000631] clocksource_of_init: no matching clocksources found
[    0.000776] Console: colour dummy device 80x30
[    0.000797] Calibrating delay loop (skipped), value calculated using timer frequency.. 6.00 BogoMIPS (lpj=30000)
[    0.000811] pid_max: default: 32768 minimum: 301
[    0.000932] Security Framework initialized
[    0.000999] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.001012] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.006390] device-tree: Duplicate name in /soc/aips-bus@02200000/spba-bus@02200000/lcdif@02220000, renamed to "display#1"
[    0.007636] Initializing cgroup subsys devices
[    0.007652] Initializing cgroup subsys freezer
[    0.007694] CPU: Testing write buffer coherency: ok
[    0.007970] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.008007] Setting up static identity map for 0x804d0070 - 0x804d00c8
[    0.041970] Brought up 1 CPUs
[    0.041983] SMP: Total of 1 processors activated.
[    0.041993] CPU: All CPU(s) started in SVC mode.
[    0.042571] devtmpfs: initialized
[    0.045927] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.046258] pinctrl core: initialized pinctrl subsystem
[    0.046597] regulator-dummy: no parameters
[    0.062446] NET: Registered protocol family 16
[    0.069988] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.070695] Use WDOG1 as reset source
[    0.078897] syscon 20c8000.anatop: regmap [mem 0x020c8000-0x020c8fff] registered
[    0.079204] vdd1p1: 800 <--> 1375 mV at 1100 mV
[    0.079557] vdd3p0: 2800 <--> 3150 mV at 3000 mV
[    0.079889] vdd2p5: 2100 <--> 2875 mV at 2500 mV
[    0.080235] cpu: 725 <--> 1450 mV
[    0.080649] vddpcie-phy: 725 <--> 1450 mV
[    0.081002] vddsoc: 725 <--> 1450 mV
[    0.082867] syscon 20e4000.iomuxc-gpr: regmap [mem 0x020e4000-0x020e7fff] registered
[    0.085247] syscon 21bc000.ocotp-ctrl: regmap [mem 0x021bc000-0x021bffff] registered
[    0.085670] syscon 21ac000.romcp: regmap [mem 0x021ac000-0x021affff] registered
[    0.090652] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.090664] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.091656] imx6sx-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver
[    0.092519] 20dc000.gpc supply pu not found, using dummy regulator
[    0.093265] MU is ready for cross core communication!
[    0.099438] bio: create slab <bio-0> at 0
[    0.100514] vref-3v3: 3300 mV
[    0.100779] PSU-5V0: 5000 mV
[    0.101035] usb_otg1_vbus: 5000 mV
[    0.101299] usb_otg2_vbus: 5000 mV
[    0.101558] wlan-en-regulator: 1800 mV
[    0.102386] SCSI subsystem initialized
[    0.102686] usbphy_nop1.12 supply vcc not found, using dummy regulator
[    0.103972] i2c i2c-0: IMX I2C adapter registered
[    0.104681] i2c i2c-1: IMX I2C adapter registered
[    0.105398] i2c i2c-2: IMX I2C adapter registered
[    0.105826] i2c i2c-3: IMX I2C adapter registered
[    0.105933] Linux video capture interface: v2.00
[    0.105997] pps_core: LinuxPPS API ver. 1 registered
[    0.106007] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.106030] PTP clock support registered
[    0.106547] Advanced Linux Sound Architecture Driver Initialized.
[    0.107548] Loading modules backported from Linux version v4.1.7-0-g0c5c1f1
[    0.107559] Backport integrated by backports.git v4.1.1-1-0-g8286954
[    0.107750] Switched to clocksource mxc_timer1
[    0.118052] NET: Registered protocol family 2
[    0.118855] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.118907] TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
[    0.118974] TCP: Hash tables configured (established 4096 bind 4096)
[    0.119033] TCP: reno registered
[    0.119049] UDP hash table entries: 256 (order: 1, 8192 bytes)
[    0.119074] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
[    0.119312] NET: Registered protocol family 1
[    0.119656] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
[    0.121220] Bus freq driver module loaded
[    0.121956] futex hash table entries: 256 (order: 2, 16384 bytes)
[    0.131305] VFS: Disk quotas dquot_6.5.2
[    0.131574] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.133382] msgmni has been set to 974
[    0.137146] io scheduler noop registered
[    0.137159] io scheduler deadline registered
[    0.137202] io scheduler cfq registered (default)
[    0.137672] imx-weim 21b8000.weim: Driver registered.
[    0.139341] MIPI DSI driver module loaded
[    0.268597] tda19988 2-0034: Sucessfully initialised chip revision 301
[    0.279469] mxsfb 2220000.lcdif: failed to find mxc display driver
[    0.279989] DISPLAY: Power-on latency exceeded, new value 482000 ns
[    0.281428] DISPLAY: Power-off latency exceeded, new value 23666 ns
[    0.297377] Console: switching to colour frame buffer device 160x45
[    0.341529] tda19988 2-0034: Matching CEA mode is 4 for fb mode 1280x720-60
[    0.393404] DISPLAY: Power-off latency exceeded, new value 24333 ns
[    0.395104] mxsfb 2220000.lcdif: initialized
[    0.397994] imx-sdma 20ec000.sdma: no iram assigned, using external mem
[    0.398294] imx-sdma 20ec000.sdma: no event needs to be remapped
[    0.398525] imx-sdma 20ec000.sdma: loaded firmware 3.1
[    0.401396] imx-sdma 20ec000.sdma: initialized
[    0.403057] pfuze100-regulator 0-0008: Full layer: 1, Metal layer: 1
[    0.403631] pfuze100-regulator 0-0008: FAB: 0, FIN: 0
[    0.403645] pfuze100-regulator 0-0008: pfuze3000 found.
[    0.405074] SW1A: 700 <--> 1475 mV at 1175 mV
[    0.406428] SW1B: 700 <--> 1475 mV at 1175 mV
[    0.407200] SW2: 1500 <--> 1850 mV at 1800 mV
[    0.407970] SW3: 900 <--> 1650 mV at 1350 mV
[    0.408763] SWBST: 5000 <--> 5150 mV at 5000 mV
[    0.409529] VSNVS: 1000 <--> 3000 mV at 3000 mV
[    0.409709] VREFDDR: 750 mV
[    0.410459] VLDO1: 1800 <--> 3300 mV at 1800 mV
[    0.411225] VLDO2: 800 <--> 1550 mV at 1500 mV
[    0.411984] VCCSD: 2850 <--> 3300 mV at 3150 mV
[    0.412750] V33: 2850 <--> 3300 mV at 3150 mV
[    0.413511] VLDO3: 1800 <--> 3300 mV at 1800 mV
[    0.414721] VLDO4: 1800 <--> 3300 mV at 1800 mV
[    0.415043] Serial: IMX driver
[    0.415366] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 58, base_baud = 1500000) is a IMX
[    1.222008] console [ttymxc0] enabled
[    1.226515] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 60, base_baud = 1500000) is a IMX
[    1.235586] serial: Freescale lpuart driver
[    1.241166] imx sema4 driver is registered.
[    1.245754] Install mcc tty driver!
[    1.249353]
[    1.249353] A9 mcc prepares run, MCC version is 002.000
[    1.256127] IMX MCC TTY driver module loaded
[    1.260506] [drm] Initialized drm 1.1.0 20060810
[    1.265548] [drm] Initialized vivante 1.0.0 20120216 on minor 0
[    1.275730] loop: module loaded
[    1.281772] mousedev: PS/2 mouse device common for all mice
[    1.288297] input: 20cc000.snvs-pwrkey as /devices/soc0/soc.0/2000000.aips-bus/20cc000.snvs-pwrkey/input/input0
[    1.298724] snvs_pwrkey 20cc000.snvs-pwrkey: i.MX snvs powerkey probed
[    1.306046] i2c /dev entries driver
[    1.310405] IR NEC protocol handler initialized
[    1.314949] IR RC5(x) protocol handler initialized
[    1.319784] IR RC6 protocol handler initialized
[    1.324322] IR JVC protocol handler initialized
[    1.328874] IR Sony protocol handler initialized
[    1.333497] IR RC5 (streamzap) protocol handler initialized
[    1.339089] IR SANYO protocol handler initialized
[    1.343799] IR MCE Keyboard/mouse protocol handler initialized
[    1.350996] imx2-wdt 20bc000.wdog: IMX2+ Watchdog Timer enabled. timeout=60s (nowayout=0)
[    1.359524] sdhci: Secure Digital Host Controller Interface driver
[    1.365714] sdhci: Copyright(c) Pierre Ossman
[    1.370108] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.376775] mmc0: no vqmmc regulator found
[    1.380940] mmc0: no vmmc regulator found
[    1.427779] mmc0: SDHCI controller on 2194000.usdhc [2194000.usdhc] using ADMA
[    1.437528] sdhci-esdhc-imx 2198000.usdhc: could not get ultra high speed state, work on normal mode
[    1.451215] mmc2: no vqmmc regulator found
[    1.496107] mmc0: host does not support reading read-only switch. assuming write-enable.
[    1.513945] mmc0: new high speed SDHC card at address aaaa
[    1.519930] mmcblk0: mmc0:aaaa SL32G 29.7 GiB
[    1.529986]  mmcblk0: p1 p2
[    1.577809] mmc2: SDHCI controller on 2198000.usdhc [2198000.usdhc] using ADMA
[    1.585466] galcore: clk_get 2d core clock failed, disable 2d/vg!
[    1.594703] Galcore version 5.0.11.25762
[    1.618174] sdhci-esdhc-imx 2198000.usdhc: card claims to support voltages below defined range
[    1.660120] mmc2: queuing unknown CIS tuple 0x91 (3 bytes)
[    1.679048] mmc2: new high speed SDIO card at address 0001
[    1.842102] fsl-asrc 2034000.asrc: driver registered
[    1.852824] imx-tda19988 sound.24: tda19988-codec <-> 202c000.ssi mapping ok
[    1.860853] nf_conntrack version 0.5.0 (7798 buckets, 31192 max)
[    1.867586] ip_tables: (C) 2000-2006 Netfilter Core Team
[    1.873017] TCP: cubic registered
[    1.876347] NET: Registered protocol family 17
[    1.880932] Key type dns_resolver registered
[    1.885942] cpu cpu0: dev_pm_opp_get_opp_count: device OPP not found (-19)
[    1.907799] failed to register cpuidle driver
[    1.912198] A9-M4 sema4 num 6, A9-M4 magic number 0x12345678 - 0xfeb1b14b.
[    1.919693] VLDO2: disabling
[    1.923036] SWBST: disabling
[    1.925939] usb_otg2_vbus: disabling
[    1.929718] usb_otg1_vbus: disabling
[    1.933340] PSU-5V0: disabling
[    1.936430] vref-3v3: disabling
[    1.939947] regulator-dummy: disabling
[    1.944301] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    1.959938] clk: Not disabling unused clocks
[    1.964242] ALSA device list:
[    1.967224]   #0: imx-audio-tda19988
[    2.132758] EXT4-fs (mmcblk0p2): recovery complete
[    2.142938] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    2.151190] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    2.161421] devtmpfs: mounted
[    2.164930] Freeing unused kernel memory: 260K (80a7e000 - 80abf000)
[    2.262641] EXT4-fs (mmcblk0p2): re-mounted. Opts: errors=remount-ro,data=ordered
Starting logging: OK
Initializing random number generator... [    2.384638] random: dd urandom read with 38 bits of entropy available
done.
Waiting for network interfaces to appear ok
Starting network...

Welcome to Buildroot
buildroot login: [   35.314378] random: nonblocking pool is initialized









QuadCopter status

Built a 250mm quadcopter using a Teensy 3.1, magnetometer, accelerometer/gyro break , and afro 12 amp esc.  The flight firmware is baseflight.  Currently only have two modes working horizon and heads free.




The transmitter/receiver is a hobbyking HK16A v2.


I'm current working on the next version using a Neo as a flight controller from udoo.org.  The neo as several great features:

  • ARM Cortex M4
  • ARM Cortex A9
  • NTSC input, decodes a NTSC (fpv)
  • on board Wifi
  • CSI parallel input for another camera
  • SDCard.
So, the goal is to port baseflight to the M4 and keep Linux on the A9.  More on this in the next post.