Home > Android, Freescale i.MX, Linux, Programming > Freescale i.MX6 Resources: Development Boards, Documentation, Source Code and Tools

Freescale i.MX6 Resources: Development Boards, Documentation, Source Code and Tools

November 18th, 2012 Leave a comment Go to comments

Reader “Mark” recently left a comment saying the NDA on Freescale i.MX6 resources was lifted and documentation and source code were now available for the platform. So it’s time for me to look into it, and provide an overview of Freescale i.MX6 features, list available development platforms, and have a closer look at the documentation, source code and tools for the platform.

Freescale i.MX6 Processors

In 2011, Freescale initially announced 3 processors in the i.MX6 series for consumer, industrial and automotive markets, but added 2 lite SoC in 2012, and there are now 5 members in the family:

  • Freescale i.MX6SoloLite – Single Cortex A9 processor up to 1 GHz with 256KB L2 Cache, 32-bit DDR3 and LPDDR2 memory support, and 2D graphics accelerator (Vivante GC355 + GC320)
  • Freescale i.MX6Solo – Single Cortex A9 core up to 1 GHz with 512KB L2 Cache, 32-bit DDR3 and LPDDR2 memory support, and 2D & 3D graphics accelerator (Vivante GC880 + GC320)
  • Freescale i.MX6DualLite – Dual Cortex A9 up to 1 GHz with 512KB L2 Cache, 32-bit DDR3 and LPDDR2 memory support, and 2D & 3D graphics accelerator (Vivante GC880 + GC320)
  • Freescale i.MX6Dual – Dual Cortex A9 up to 1.2 GHz with 1MB L2 Cache, 64-bit DDR3 and LPDDR2 memory support, SATA-II, and 2D & 3D graphics accelerator (Vivante GC2000 + GC355 + GC320)
  • Freescale i.MX6Quad – Quad Cortex A9 up to 1.2 GHz with 1MB L2 Cache, 64-bit DDR3 and LPDDR2 memory support, SATA-II, and 2D & 3D graphics accelerator (Vivante GC2000 + GC355 + GC320)
i.MX6 Lite Series

Freescale i.MX6 Series

Everything I’ve written above is actually nothing new as this was mentioned in the press releases and Freescale i.MX6 page for a while. What might be new is the internal structure of the processors.

Freescale i.MX6 Dual/Quad Block Diagram (Click to Enlarge)

If you want to get more overview about Freescale i.MX6 SoC features, I invite you to visit the 2 links at the beginning of this section. If you want to look into details continue reading and we’ll get to the documentation soon.

Freescale i.MX6 Development Boards

In this blog, I mainly cover low cost development boards and gadgets, and we have already several boards which are available now or soon will be:

Low Cost Quad-core Cortex A9 Board

Freescale iMX6q Sabre Lite Development Board

Another low cost alternative would be to use the upcoming Hiapad Hi-802 mini PC ($89) based on Freescale i.MX6Quad and providing easy access to debug ports. Obviously this option offers less flexibility and features than the first 2 boards.

Freescale also provides some full-featured (and somewhat expensive) development platforms for different applications:

  • i.MX 6SoloLite Evaluation Kit ($399 to $499) – Evaluation kit based on i.MX6SoloLite to develop e-Reader products. $399 is for the board only, and $499 includes an E-Ink Panel with the board.
  • SABRE Board and Platform for Smart Devices ($399 and $999) – The SABRE board (MCIMX6Q-SDB) is powered by i.MX6Quad with 1GB RAM, 8GB eMMC, 2xLVDS, HDMI and LCD video outputs,, 2x SD card sockets, Gb Ethernet, SATA connector and more. The SABRE Platform is based on the SABRE board and comes with a 10.1″ LVDS display with integrated P-cap sensing.
  • SABRE for Automotive Infotainment ($799) – There are actually 2 platforms: one using i.MX6Quad(1GHz) and the other i.MX6DualLite (800 MHz). Both plaforms come with 2GB  DDR3 RAM, 32 MB NOR flash, a NAND flash socket, LVDS & HDMI interfaces, Ethernet, SD card socket, and more. The Quad version also comes with a SATA port.

SABRE Board

All development platforms should be be able to support Android, Linux and Windows Embedded operating systems.

Freescale i.MX6 Documentation

BIG FAT WARNING! If you’ve been working on Chinese (and/or Taiwanese) SoCs for too long, you may be in for a shock (and may end up missing reverse-engineering the datasheet from the source code) as Freescale has released lots of document publicly (I won’t be able to list them all here) and the documentation appears to very thorough. For example, Freescale i.MX6 Reference Manual is 5739 pages long!

You can find all documents on Freescale i.MX6 Documentation page, and the most interesting (to me) are:

I’ve flicked through the technical documentation and it seems really good. I’ve discovered that i.MX6Quad can boot from SPI, I2C and EIM (External Interface Module) interfaces, NAND flash, SD/MMC, SATA or USB depending on the board configuration, which looks pretty darn interesting, especially for USB and SATA boot.

I’ve also looked at Linux and Android documentation (obviously), but I’m a bit puzzled as it asks you to use Ubuntu 9.04 (Jaunty) for the build environment (LTIB), and provide links to a git repo where the kernel has not been updated for 8 months and u-boot for 4 months… But as you’ll see below we won’t need to use those as you’ll discover below. Most of the software documentation on Freescale refers to the SABRE for Smart Devices and Automotive Infotainment, so if you are using one of the low cost board may be better off checking out the vendor software documentation.

[Update: There are lots of how-tos for i.MX6 processors on imx community page]

Elements14 has documentation for the SABRE Lite Board (which it sells for $179) including a user manual describing the hardware and showing how to get started with the software (TimeLink Linux BSP), and schematics. Boundary Devices has excellent instructions on their blog, and if you have a Freescale i.MX6 device to develop on, I recommend you subscribe to their blog.

Freescale released schematics and PCB layout files for the SABRE SD and AI platforms (Cf. Printed Circuit Boards and Schematics-Schematics section on i.MX6 page). If you are more interested in SABRE Lite hardware, Boundary Devices released the following files:

Freescale i.MX6 Linux and Android BSP & Source Code

Freescale i.MX6 Source Code

Beside linking to an outdated git repository, Freescale also provides download link to Linux Kernel 3.0.35, Android 4.0.4 and Multimedia Codecs source code:

Building the Linux Kernel and U-Boot for Freescale i.MX6 SABRE Lite board

Let’s try to build u-boot and the kernel for Freescale .iMX6 uing ltib in Ubuntu 12.04 64-bit.

After downloading L3.0.35_12.09.01_ER_SOURCE, extract it, and install the LTIB package as a normal user (not as root), in a location such as /home/user/:

tar zxvf L3.0.35_12.09.01_GA_source.tar.gz
./L3.0.35_12.09.01_GA_source/install
cd ltib

Install some dependencies (this may vary depending upon your current installation and OS):

sudo apt-get install zlib1g zlib1g-dev m4 bison tcl ncurses-dev liblzo2-dev uuid-dev librpm-dev rpm curl

Since I’m using a 64-bit build machine, I also had to install the following:

sudo apt-get install ia32-libs libc6-dev-i386 lib32z1

After spending some time trying to figure out problems, I realized Ubuntu 12.04 is not currently supported in LTIB and you need a patch, which you can apply as follows in ltib directory:

curl -L https://community.freescale.com/servlet/JiveServlet/downloadBody/93455-102-3-2835/patch-ltib-ubuntu12.04.sh | bash

Finally, you may need to edit the sudoers file (sudo visudo) to allow the current user to run rpm as root without password, and add the following line:

user ALL = NOPASSWD: /usr/bin/rpm, /opt/freescale/ltib/usr/bin/rpm

Start to build LTIB and cross your fingers:

./ltib -m config

At this point, it will install the host support packages (it will take a while) and eventually a menu will popup.

Set the platform to “Freescale iMX reference boards” (as if you had a choice), exit and save the changes. At the next menu, select platform type as “imx6q” and package profile. Exit and save the new configuration. Please note that only the profiles of Min profile, FSL gnome release packages, and mfg firmware profile pass build tests. I chose the default “Min” profile.

You can use the ./ltib -m selectype command to change the profile after the first selection.

To build U-Boot for i.MX6 SABRE Lite board, select “Choose your board for U-Boot” as “mx6q_sabrelibre”. This option is only for U-Boot, as the current default kernel configuration builds a single image that works for all i.MX6 boards except i.MX 6SoloLite boards. Close the configuration screen and save the changes. You can now build the kernel and U-Boot by running the following command:

./ltib

The build failed to build busybox. To fix it, I had to edit rootfs/usr/lib/libc.so and change one line to:

GROUP ( libc.so.6 libc_nonshared.a  AS_NEEDED ( ld-linux.so.3 ) )

Same thing for rootfs/usr/lib/libpthread.so:

GROUP ( libpthread.so.0 libpthread_nonshared.a )

Then type ./ltib again. When this procedure is completed, the kernel image and the U-Boot images are located at: rootfs/boot/:

ls -l rootfs/boot/
total 23668
lrwxrwxrwx 1 root root        6 Nov 18 12:36 bootable_kernel -> uImage
-rw-r--r-- 1 root root    68241 Nov 18 12:35 linux.config
-rw-r--r-- 1 root root  1615837 Nov 18 12:35 System.map
-rwxr-xr-x 1 root root   739072 Nov 18 11:42 u-boot
-rwxr-xr-x 1 root root   178936 Nov 18 11:42 u-boot.bin
-rw-r--r-- 1 root root  3760504 Nov 18 12:35 uImage
-rwxr-xr-x 1 root root 14034174 Nov 18 12:35 vmlinux
-rwxr-xr-x 1 root root  3760440 Nov 18 12:35 zImage

Freescale i.MX6 Android, Linux, Ubuntu… Binary Images/Files

There are also some binary demo files for Android and Linux and closed source files (e.g. codecs):

Beside the Ubuntu root file system, Arch Linux for ARM is also said to be working on Nitrogen6X board.

There are also demo images specific to SABRE Smart Devices and Automotive Infotainment platforms. For a complete list of available files, visit Freescale i.MX6 Software & Tools page.

Boundary devices posted a binary LTIB image for i.MX6 Sabre Lite and Nitrogen6X boards as well as a short getting started guide. It might be worth having a look, although this has been done in August. Linaro has instructions to run Ubuntu 11.10 (Oneric) on the board, but it dates a bit and images have disappeared.

Finally, you could also use Timesys LinuxLink Linux BSP for SABRE Lite and Nitrogen6X boards. LinuxLink is a web based system that allows you to build custom Linux distributions for your board. I gave an overview of this web-based build system in a previous post “Timesys Unveils LinuxLink BSP/SDK for MityARM-3359 SoM (TI AM335x)“.

Freescale i.MX6 Development Tools

Again, you can check Freescale i.MX6 Software & Tools page for a list of software and hardware tools, but there appears to be 3 main software tools:

  • LTIB – This is the default build system for Freescale i.MX series processors, and it widely referred to in the documentation.
  • MfgTool – Tool for downloading OS images to the i.MX6. It can be downloaded separately, but is also part of IMX6_R13.4_ANDROID_SOURCE_CODE.
  • IMX_CST_TOOL – Freescale Code Signing Tool for the High Assurance Boot library. Provides software code signing support designed for use with i.MX processors that integrate the HAB library in the internal boot ROM.

If you develop on hardware based on Freescale i.MX6, you’ll have to use the first 2 tools. To be honest, I’m not exactly sure what the third tool does, but it seems required for security purpose at boot time. You need to be approved manually by Freescale before being able to download IMX_CST_TOOL.[Update: I’ve been approved to download the tool after 12 days, and what it does is to lock your hardware to only run software signed with a specific key. This means you would not be able to hack your i.MX6 device if HAB Library/ CST are in use]. This is probably not really needed if you just want to tinker with your board, but if you’re going to make a commercial product, you may need it.

Elements14 also point to Timesys LinuxLink (mentioned above) and ARM DS 5, and even if those are interesting, they may not be necessary. It all depends on your preferences and needs.

For low level debugging and board bring-up, you may want to use hardware probes such as ARIUM HS-1000S JTAG Emulator/Debugger or iSystem iC3000 ActiveEmulator debug and test tool.

If you need support for the platform for one of the low cost boards, you could check the imx community, comment in Boundary Devices blog (if you use their images) or participate in Elements14 community.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

  1. Craig
    November 18th, 2012 at 17:32 | #1

    I think I just came in my pants.

    Nice write-up, look forward to some set top box form factor devices using the quad!

  2. November 18th, 2012 at 18:04 | #2

    Did I already mentioned to you how good it is to have you back :D

    Great write up. Will have to go through it once more later, when the coffee really have kicked in.

  3. Mark
    November 19th, 2012 at 01:26 | #3

    Great article. I ordered a sabre lite (around $185 shipped to me) from newark.com. They are still on pre-order but say boards should ship on 11-21-12. I’ll test your build instructions once I receive it.

    I was really shocked when I first found the SDK and docs for the older i.mx53. I’ve never seen any SoC vendor release so much detailed info without an NDA. I knew they would eventually do the same for the i.mx6 once it was officially released.

    In addition to the properly written English documents (no poor Chinese translations here!), you also have a support forum where actual freescale employees answer your questions, post sample source code, etc. Support is unreal compared to the Chinese vendors.

    Too bad freescale has not had much market success with their products. There are very few tablets, tv sticks, etc. using their chips. Hopefully they will not go out of business.

  4. notzed
    November 19th, 2012 at 07:27 | #4

    @Mark
    TI also have very good free documentation for the OMAP stuff, although i would say the freescale kernel bits are better written and better documented from what little i’ve seen of either.

    The kobo (touch at least) uses an i.mx53, so they must be used there and about outside of chinese designs – perhaps in other e-ink devices.

  5. Javi
    November 19th, 2012 at 08:13 | #5

    Mark :
    Too bad freescale has not had much market success with their products. There are very few tablets, tv sticks, etc. using their chips. Hopefully they will not go out of business.

    Maybe this is the reason why we have this info?

  6. November 19th, 2012 at 10:41 | #6

    @Mark
    Factories appear to struggle to get stock for the i.MX6 SoC, hopefully not because of production issue, but because of demand. I can see many new products (tablets, low cost boards and soms mainly) featuring i.MX6 processor.

    @notzed
    TI has also a very good documentation and has most probably the best community thanks to the Beagleboard/Beaglebone/Pandaboard boards, but Freescale i.MX6 appears to be very price competitive for a quad core processor, and they have long term support (10 years) which fits some markets such as automotive and industrial applications.

  7. Mark
    November 20th, 2012 at 06:24 | #7

    I agree that TI is another good vendor with lots of documentation and code. But they are exiting the mobile processor market so continued support is in doubt. Is there even a low cost (<$200) TI 4470 board available somewhere?

  8. Thomas
    November 20th, 2012 at 15:41 | #8

    Mark :
    I agree that TI is another good vendor with lots of documentation and code. But they are exiting the mobile processor market so continued support is in doubt. Is there even a low cost (<$200) TI 4470 board available somewhere?

    You have the Pandaboard for instance for the OMAP. http://pandaboard.org/

    Else, the i.MX is looking great, and I’m currently designing a board for my employer with it. Freescale is really more targeted to industrial and automotive, but the price of the new imx6 is really competetive also for commercial use and I think it has great potential. The imx6 will also be available for a minimum of 15(!) years since it’s an automotive product, according to Freescale’s longevity program. so the effort put into this platform will not be wasted by obsoletions and new product releases in the near future…

    I really hope it picks up momentum with low-cost Tv-boxes too, since this is much more hacker friendly with proper documentation and sw.

  9. Paul
    November 22nd, 2012 at 02:52 | #9

    The kobo (touch at least) uses an i.mx53, so they must be used there and about outside of chinese designs – perhaps in other e-ink devices.

    Sure, both Kindle (3 at least) and Sony PRS T1, few of the most successful E-Book readers (IMHO) have Freescale i.MX CPUs, so they’re definitely not the least presented on the market.

  10. Paul
    November 22nd, 2012 at 02:55 | #10

    If you look at “i.MX 6Dual/6Quad Applications Processor Reference Manual”, page 495, you’ll read:

    “9.9.1 Vector Graphics Overview
    The vector graphics processing unit (version 2) is based on the GC355 IP core.
    Information about the GPU IP is currently contained in the following documents:
    • DataBook.Vivante.GC350.pdf

    That last file would be great to get hands on. CNX, any ideas?

  11. November 22nd, 2012 at 11:03 | #11

    @Paul
    I haven’t seen such file. Maybe you’d have to contact Vivante to get it (under NDA).

  12. Mark
    November 24th, 2012 at 15:31 | #12

    Canceled my pre-order for sabre lite. After reading the source and docs for a few days, I realized the i.mx6 built-in HDMI transmitter does not support 74.176/148.352 Mhz pixel clocks. That’s a deal breaker for my application. Hopefully someone makes a board with external HDMI chip in the future. Otherwise, I’m waiting for Omap5 or maybe look into Exynos5.

  13. nil
    November 24th, 2012 at 22:10 | #13

    @Mark
    0.148 MHz really makes that much difference? It’ll do 1080p @ 60fps with a pixel clock of 148.5 MHz.

  14. November 26th, 2012 at 10:31 | #14
  15. Mark
    November 27th, 2012 at 14:18 | #15

    @cnxsoft
    Correct. My application requires live video streaming. It must be played back at an exact rate matching the input, otherwise the decoding buffer will eventually overflow/underflow. Dropping or repeating frames like you see in all the other Arm SoC is not acceptable to me. Reading their specs and source code, Omap4, Exynos5, and Telechips seem to support all necessary video timings.

  16. November 27th, 2012 at 15:28 | #16

    @Mark
    But in the reference manual, starting p.1501 there’s a list of supported video modes, and it looks like 1080p 74.18/148.35 MHz is supported. Where could you find out the issue? In the source code?

  17. Mark
    November 29th, 2012 at 02:48 | #17

    @cnxsoft
    If you look at that table in the manual, you see that the 60 and 59.94Hz modes all map to the same value in the first column. They are basically treating those as equivalent modes – which they are not. You can also see that their HDMI transmitter does not support the correct clocks on page 1507 – section 33.2.6.1 : CTS Calculation. They do not support any of the clocks that require 1.001 scaling: 60/1.001 = 59.940, 24/1.001=23.976, etc.

    In general, since we don’t have reference manuals to the majority of SoC out there, I usually just look at the kernel source code where they initialize the HDMI transmitter. HDMI does not have a separate clock for the audio so it must be derived from video clock using numerator/denominator scale vales that you pass down to the sink device. Any chip with correct clocks will pass down TMDS CTS and N values of 140625 and 5824 for 1080p/59.940 using 48Khz audio sampling rate. You can see other valid combinations in the HDMI 1.4 specifications – table 7-3. Most Arm SoC only support 6144 for N and 74250 or 148500 for CTS. Of course it’s possible the manuals are wrong or the source code is incomplete but I’m not wasting my time on something without proof it supports what I need.

  18. November 30th, 2012 at 10:55 | #18

    Updated post with more info on CST Tool. It will tie the hardware and signed software together. So if you buy a device that makes use of this feature, you will not be able to tinker with it, such as changing the OS, without knowing the encryption key.

  19. Rahul
    January 3rd, 2013 at 13:52 | #19

    I know how to configure the kernel for the i.MX processor.

    -> How can i download the boot-loader into the i.MX processor ?
    -> Also i little confused in selecting which flash memory is better NAND or NOR ?
    -> If i have downloaded the images into SD/MMC card then what will be the use of NAND Flash or NOR Flash?

    Thankyou

  20. March 30th, 2013 at 19:40 | #20

    @Paul
    Nothing for GC350, but I’ve just come across GC320 reference manual on etnaviv site – http://www.vivantecorp.com/Vivante_GC320_Technical_Reference_Manual_V1.0_A.pdf

  21. Paul
    March 31st, 2013 at 02:24 | #21

    @cnxsoft: Good find! Was surprised to see title page mention OMAP4470 having it, wouldn’t think they stuff completely new block in OMAP4 series. Pandaboard ES is still OMAP4460 though.

  22. Aditya
    June 10th, 2013 at 18:30 | #22

    @cnxsoft: Tried installing L3.0.35_4.0.0_130424_source.tar.gz, the latest linux release and I’ve also applied the patch for ubuntu 12.04. Yet it simply refuses to install ltib. The contents of the host_config.log are as follows. Please advise.
    Processing: flex
    ==================
    Build path taken because: directory build, no prebuilt rpm,

    Cowardly refusing to clobber existing directory:
    /opt/freescale/ltib/usr/src/rpm/BUILD/flex-2.5.37
    Remove this by hand if you really want to rebuild this package from scratch

    Died at ./ltib line 1392.
    traceback:
    main::build_host_rpms:1392
    main::host_checks:1447
    main:554

    Started: Mon Jun 10 16:12:06 2013
    Ended: Mon Jun 10 16:12:06 2013
    Elapsed: 0 seconds

    These packages failed to build:
    flex

    Build Failed

    Thanks

  23. Stephan
    June 12th, 2013 at 20:28 | #23

    Hi Guys,

    little (honestly tiny) concern: in the ‘Building the Linux Kernel ..,’ section, you’re altering the same file 2 times in a row (‘rootfs/usr/lib/libpthread.so’). I guess the first is supposed to be ‘rootfs/usr/lib/libc.so?

    Just stalled over it and guessed I might spare others some time.

    thanks and regards for a great article,
    Stephan

  24. June 12th, 2013 at 22:23 | #24

    @Stephan
    Thanks for noticing. You must be right, so I changed it.

  25. jacky
    November 7th, 2013 at 12:54 | #25

    @Aditya

    sudo apt-get install texinfo or sudo aptitude install texinfo and try again

  1. December 12th, 2012 at 16:48 | #1
  2. December 16th, 2012 at 09:22 | #2
  3. December 17th, 2012 at 10:37 | #3
  4. December 17th, 2012 at 10:43 | #4
  5. January 4th, 2013 at 16:25 | #5
  6. January 11th, 2013 at 15:10 | #6
  7. January 18th, 2013 at 21:35 | #7
  8. February 6th, 2013 at 14:10 | #8
  9. February 25th, 2013 at 08:42 | #9
  10. March 26th, 2013 at 14:00 | #10