Introduction

I'm an Electronics Engineer. I began to explore the world of electronics during my 3rd year at Novosibirsk State University. In addition, at that time Arduino (based on AVR chips) was growing in popularity. However, Arduino wasn’t interesting to me, because I had already used these chips in my projects with native CAD (AVR Studio), and was dreaming about creating a kind of autopilot for UAVs. To me, all of this was very interesting!

Nowadays, the market for embedded and handheld computers is still growing, so this field has become even more interesting to me. Along with the evolution of embedded systems, the birth of low-cost single-board computers like Raspberry PI, the emergence of IoT conception, the growing market for smart phones, it looks like a perfect place for research and development.

All of this led me to construct my own tiny platform, for experience as well as educational purposes.

Solutions based on microcontrollers seem quite simple to me because it's also difficult to make a mistake in these kinds of projects. Moreover, such a tiny solution can run "out of the box," have no flexibility and/or scalability, which is usual for SoC-based systems, and, in general micro-controller systems look quite boring. "No pain, no gain" :)

Prior to this I had no experience with SoC-based solutions. Except for Linux Kernel compilation and exploration of root file systems, like Debian. That’s why I decided to design my own platform, based on SoC from the ground up all the way to a fully working system.

I didn't have a wide range of potentially possible SoC candidates, because I would append this project to one of many business tasks. I had these restrictions: up to four layers, no BGA, down to 0.2 mm trace width, down to 0.2 mm spacing between traces. In addition, this PCB would arrive soldered with all the necessary electronic parts some time later from a factory, ready for me to start the software development.

Engineering

After investigation and comparison of available products, I decided to use SoC Freescale iMX233. It has a TQFP case, with an ARM926EJ-S core, which can run at frequencies up to 454 MHz, a DDR interface, integrated PMU (power management unit), SD/MMC card support, and debug interface - a perfect set for beginners. Moreover, CVBS video output, audio in/out, SPI, I2C, USB, LCD, etc, a whole range of interesting puzzles, all for free. The perfect set of puzzles to spend my evenings with.

In addition, I looked at the platform named "Black Swift," based on Qualcomm Atheros AR9331. This SoC looks nice, but it didn't fully meet my requirements. The reason was insufficient documentation for this SoC.

I had to create a basic configuration that was able to support Linux. The memory chip was chosen by the principle "Be happy with what you have." or “make do with what you have on hand.”

I chose a 256Mb(32MB) DDR chip from Micron. Our company used this chip in our commercial solutions. At that moment, I didn't know about the troubles with this SoC. I only studied the application notes from Freescale, and I was happy to learn about this wide range of possible challenges.

In fact, SoC is definitely more interesting than a micro controller, because errors occurring when you use an SoC-based system are very dangerous. For example, an incorrect trace route of the memory interface can affect the final system stability. It may cause some glitches in stored data, or even cause an inability of memory usage. In this case, it means that the entire design is useless.

Another example is power subsystems. Errors in this part will cause a burn-out of the whole SoC. Mistakes in interfaces will result in an inability to reach peripheral ICs, like an SD/MMC card.

Because of this, I chose a simpler way to explore the reference design from Freescale. I didn't have an official development board, but I could explore all documentation about it. One more point to mention: it's very helpful to read forums. But at first, I didn't do that,...

Read more »