Sunday, 1 September 2013

Mixtile - Exynos 4412 Development Board

As most of you are aware there are plenty of ARM development boards to choose from, well here is a another one to add to the growing list. It's known as Mixtile (Chinese name: m too)  and is promoted as a low cost Quad Core board deploying Samung's Exynos 4412 (1.4GHz) processor accompanied with 1GB RAM, all for $79 (excluding shipping). It originates from China and surprisingly the schematics are freely available.

The board itself is large (12cm x 12cm) and I guess similarities would be drawn against Hardkernels older offerings namely ORDROID-U/X. The major differentiator is the plethora of on-board ports and I/O:

Sadly there's no SATA port but the 50 pin dual header (2.54mm)  supports I2C, SPI, ADC, PWM, Serial and I think an LCD interface (haven't verified these are working). The downside is that the I/O is probably 1.8v and sourcing a 3.3v/5v level shifter may not be easy. Furthermore what's unclear is how well these interfaces are supported in the kernel source. The 2.54mm pitch is ideal because the connectors are cheap and readily available. Quite a few of the peripheral ports (wifi, ethernet, SD cards, usb) are driven from 2 USB controllers, a SMC USB4640 and a LAN9514. It will be interesting to see if there are noticeable bottlenecks as the controllers are daisy chained. Audio support is provided by a WM8960, with the board providing a headphone jack and on board microphone. There are also solder pads for connecting a pair of speakers, the WM8960 datasheet indicates 1Watt output.

The board requires a 5v power supply and protection is provided by an on board fuse. By default the board boots from the micro sd slot, apparently it is possible to reconfigure the boot device through DIP switches although I couldn't find any documentation describing the settings. Although not obvious there are a number of LED's populated on both the front and back of the PCB. Once the board is powered 4 bright green LED light up indicating the 4 USB ports are powered. I have no idea of their relevance, however they are an irritation giving the level of brightness emitted. I also noticed some LEDs  on the underside of the PCB, again I can't see the purpose as that part of the board is not directly visible.



Another oddity is the location of the 4412 processor, its on the back of the PCB. Giving that the processor probably requires some level of cooling, it would indicate the PCB should be mounted using spacers/pillar so that air can flow to the underside of the PCB. Therefore it is advisable to have some pcb spacers handy if your planning to purchase. Fortunately I located some spare brass hex pillars that matched the mounting holes. I suspect the processor will also require some kind of passive cooling although there are no mounting holes or points to affix one.



To access the serial console you require a USB to TTL Serial Adapter which supports 1.8v these can be difficult to source and expensive.

Currently there is pre-view Android and Ubuntu (no h/w acceleration) images available for download, along with uboot and kernel source. I gave the ubuntu image a quick test, however to do so I needed to set the HDMI resolution to 720P, by default it is set to 1080P in the kernel.

As a quick workaround to set 720p I changed the following line in drivers/media/video/exynos/tv/hdmi_drv.c .

#define HDMI_DEFAULT_PRESET V4L2_DV_1080P60                                                                   

to
                    
#define HDMI_DEFAULT_PRESET V4L2_DV_720P60

To compile the kernel for ubuntu, you need Sourcery G++ Lite  I used  2010.09-50 v4.5.1. 

To compile the kernel:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- mixtile_garage_ubuntu_defconfig

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- modules INSTALL_MOD_PATH=output

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- modules_install INSTALL_MOD_PATH=output

To copy the kernel to the ubuntu SD card image (where <drive> is SD card device):

sudo dd if=arch/arm/boot/zImage of=/dev/<drive> bs=512 seek=6144; sync;

To copy the kernel modules, you would do something like this, where <mount path> is the path to SD card rootfs :

sudo cp -r output/lib/modules/3.0.15 /<mount path>/lib/module

The user and password for the ubuntu image is 'ubuntu'. The preview ubuntu image has a default Locale of Chinese, to change this edit /etc/default/locale. You also need to change the Language settings from within the Unity desktop. Select Settings->Language Support.

I did test a HDMI to VGA adapter at 720p and it ran fine against my monitor.

Given this is a fairly new board (albeit using an older processor), there seems to be little support available at present which can make it daunting and challenging at the same time.

16 comments:

  1. just copy the built kernel zImage to SD card device by using command "sudo dd if=arch/arm/boot/zImage of=/dev/ bs=512 seek=6144; sync;" is good enough to start the system up ?

    ReplyDelete
    Replies
    1. Hi, first you have to 'dd' the extracted ubuntu image:

      sudo dd if=ubuntu.img of=/dev/ bs=1M;sys;

      then copy over the new zimage:

      sudo dd if=arch/arm/boot/zImage of=/dev/ bs=512 seek=6144; sync

      Delete
  2. Hi,

    I am interested also on this board.
    Can you share more information about the shipping method used (are you from Europe?) and how long it took to arrive? Do they use a trackable method?

    I'm trying to order this board but Mixtile do not answer questions.
    Thank you very much in advance.

    ReplyDelete
    Replies
    1. Hi,

      My board was brought in china (although I'm in the uk). So I can't tell what shipping method Mixtile would use or delivery time-scales.

      Delete
  3. Hi,Thank you for your good page. I have tried to compile the given kernel with cross compile, but i get this error :Error: selected processor does not support ARM mode 'smc 0'when compiling cpu.exynos4.oCould you tell me what to do?and how can i compile the kernel on this arm itself not on my pc. what are the configs?Thank you very much in advance.

    ReplyDelete
  4. Hi,

    Looks like you are compiling with the wrong tool chain. Which source tree are you trying to compile?

    ReplyDelete
  5. Hi,
    First of all thanks for compact and good data you provided here.
    I used the kernel source provided by mixtile and it compiled OK. what I need is to boot to the text mode. I don't need graphics right now and I just need all of the CPU.
    I searched a lot and everybody is modifying Grub to boot into Text Mode. We don't have grub here so I tried a suggestion in this link:
    http://superuser.com/questions/310978/starting-ubuntu-without-the-gui
    by doing: apt-get remove --purge x11-common && apt-get autoremove
    it stopped to load graphics but it seems that it removed a lot of thing and now I have problem connecting to wireless networks. Is there any simpler way to do this?

    ReplyDelete
    Replies
    1. Hi,

      Grub is normally not used on ARM, instead the kernel is loaded through uboot.

      To stop the desktop (GUI) auto starting , you can disable it by doing something like this:

      echo "manual" | sudo tee -a /etc/init/lightdm.override

      Delete
  6. This comment has been removed by the author.

    ReplyDelete
  7. Hi. I tried everything you provided here and it work perfect.
    Problem I have right now is with u-boot. I need to change the baudrate of serial communication but when I set it with "setenv" command it hanged. I read somewhere that may be the parameters are hard codded. Can you put some information about compiling u-boot too?
    Also, where can I find BSP of this boad?
    Thanks a lot.

    ReplyDelete
    Replies
    1. Hi, sorry for the late response. Normally the baud rate is configured within the uboot source code. The uboot source can be downloaded from here http://www.mixtile.com/downloads/garage/u-boot-4412.tar.gz. You can change the CONFIG_BAUDRATE value in mixtile4x12.h and recompile.

      Delete
    2. Thanks. I downloaded that tar ball and I'll give it a try.
      Another question though, is there something like menuconfig for this too? or we can just build it with a simple "make" command!

      Delete
    3. Instead of menuconfig, you have to configure the board to build first:

      make mixtile4x12_config

      then make:

      make

      Delete
    4. Hi. sorry to ask a lot of questions. I've been struggling on this couple of days but I couldn't start the board running. I ran the "make" and images are ready. I used fastboot (it took a lot of my time) and after fusing image it doesn't boot anymore.
      Is there any simpler way (like the one you provided here for replacing kernel image) to replace the u-boot image? I tried coping like what you said in this page with "seek=1" (0x200 address for u-boot) but it didn't work either.
      By the way, I see that u-boot says it's using a BSP (Board Support Package). Do you know where can I find the BSP file?
      Thanks a lot.

      Delete
  8. Apologies for bringing up this old post.

    Can you upload to your Github account the changes made to u-Boot source in order to execute the boot.scr script?

    Thank you very much in advance.

    ReplyDelete
    Replies
    1. Hi,

      Unfortunately I can't find the source code.

      Delete