Wednesday, December 23, 2015

Ethernet driver for mcc/rpmsg status

mccethernet is loading on Ubuntu 15.10.:

ifconfig
eth0      Link encap:Ethernet  HWaddr 00:21:70:5a:c0:7d  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

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:722 errors:0 dropped:0 overruns:0 frame:0
          TX packets:722 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:88472 (88.4 KB)  TX bytes:88472 (88.4 KB)

mcc0      Link encap:Ethernet  HWaddr 00:00:00:00:00:01  
          UP BROADCAST RUNNING MULTICAST  MTU:1024  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 00:c0:a8:c3:56:15  
          inet addr:192.168.9.6  Bcast:192.168.9.255  Mask:255.255.255.0
          inet6 addr: fe80::2c0:a8ff:fec3:5615/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8630 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7939 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4416731 (4.4 MB)  TX bytes:1681525 (1.6 MB)

Background on driver development for mccethernet, mccmulti, and mcctty:

I start by creating a basic driver that can be loaded by my desktop PC, which is running 15.10 Ubuntu.  This way I can load/debug/ etc faster then recompiling the kernel or loading the Udoo Neo.  Also, the Ubuntu is using 4.x and neo is using a 3.4.x and there are some API differences that have to be accounted for in the mccethernet.c 

For example: in 3.4.x alloc_netdev only needs 3 arguments where alloc_netdev in 4.x needs 4 arguments. 
Linux kernel has some macros to help you out:
    
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)        
mccethernet_dev = alloc_netdev(sizeof(struct mcc_ethernet_device), "mcc0", mcc_setup);
#else
mccethernet_dev = alloc_netdev(sizeof(struct mcc_ethernet_device), "mcc0", NET_NAME_UNKNOWN, mcc_setup);

#endif 

mccmulti driver was a little harder to since it is using MCC api calls; the first pass was to stub MCC calls.


For the mccethernet it is using basic file operations on m4mcc1 on the mccmulti user interface.  Code can be found here.


Monday, December 21, 2015

Progress on TCP/IP via MCC

Have chosen LwIP as the TCP/IP stack for the M4.  LwIP runs on a number of different processors and it has a rich application stack; HTTP, Auto IP, IPv6, etc.

Created a MQX interface following the porting guide and several examples.  Created a loop back interface and able to create sockets.  Working on a modification to the lwIP select function to allow passing a semaphore and a condition variable.    This allows one thread to wait on TCP/UDP sockets and messages from a queue using the passed in semaphore; this helps with multithreading issues with LwIP.

Tasks pending:
- MCC driver for lwIP; it's a simple thread pending on read MCC function; write will be passed via the TCP/IP thread.  MTU size is 1024; based on the MCC buffer size.  Here is the code:
- Ethernet/MCC driver for Linux: pass packets from MCC to Linux TCP/IP stack
- TTY MCC interface.


The reason for doing this:

  1. Applications on the M4 side need a configuration file or script for startup:
    1. Can use TFTP
      1. Setup a TFTP server on the Linux side, M4 can get or write files
    2. Syslog
      1. Create a syslog forwarder on M4, now message so up in Linux log
    3. One MCC port can transport several different messages to several different apps without any forwarder or mux.  TCP/IP uses port numbers for each app. 

Here is a link to a basic drawing of MCC TCP/IP:


Saturday, December 12, 2015

Udoo.org Neo progress Imx6sx Solo

Completed a Linux kernel driver mccmulti; this driver provides 3 dev interfaces:

  • /dev/m4mcc0
    • This has two mcc ports (1) A9 and (1) M4 The goal is to create another driver a ttyMCC0 to allow terminal apps, minicom, screen etc access to the MCC interface.  i.e command line interface etc.
  • /dev/m4mcc1
    • This is the same as above, but on different mcc ports. 
  • /dev/m4mcc2
    • This is the same as above, but on different mcc ports. 
    • The goal is to create another driver, a ethernet HW driver to use the MCC interface for IP.  The M4 needs a IP stack, might use lwIP, Current NXP does not provide the IP stack for the IMX6sx.
Also, created a user space app using epoll to test the mccmulti kernel driver.  This way, it is possible to create an app, with non-blocking IO and use async-io type of programming.

Once the IP stack is working, then will start porting Baseflight.  Just got my NTSC camera, so need to test that also.


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.



Sunday, May 17, 2015

Using the EMW3162 without the breakout board

If you have bought a EMW3162 without a breakout board here is a break down of accessing the boot loader and WIFI.

A great tool to have is a converter board that allows the EMW3162 to be attached to a breadboard.  It is very helpful to have one, I'm in the the process of trying to bring one to Tindie.  Please post if you would like one.



First accessing the boot loader:

- GND pin 16
- VCC pin 30
Power cycle.  Connect a TTL USB to serial converter (115200, 8N1)
You get the following output:

 |               EMW316x Common Bootloader   (Version 4.0.1_WDG)  |             
                                                                               
+ command ----------------+ function ----_-----------------------+             
                                                                               
| 1:FWUPDATE <-a>    | update the firmware from UART using Ymodem|             
                                                                               
| 2:FWERASE          | erase the current firmware and settings   |             
                                                                               
| 3:BOOT             | excute the current firmware               |             
                                                                               
| 4:REBOOT           | Reboot                                    |             
                                                                               
| ?:HELP             | displays this help                        |             
                                                                               
+--------------------+-------------------------------------------+             
                                                                               
|                           By William Xu from MXCHIP M2M Team   |             
                                                                               
+----------------------------------------------------------------+             
                                                                               
                                                                               
                                                                               
MXCHIP>