How to build your own Embedded-System Part 2

1. November 2020 | claudio | ~4min


In this part, we will take a look at the big picture of our system. So what is the big picture in terms of an embedded system? Right! A block diagram

We can see, that our system will be a bit rudimentary and has lack of many, today often saw features like HDMI, CSI, USB, and many others.

Of course, we could also integrate all of these features. But the the goal was to show you how to build a (basic) embedded system. The idea is, if you can design a basic board, then you have understood the principle and then you are able to extend further boards with this knowledge.

So let's discuss some of the blocks mentioned in the above picture.

JTAG:
JTAG is something OBD is for cars. It allows us to look deep into the processor, stops the execution of any running code, injects code into memory areas, manipulates bits in nearly every desired register, and readout some bytes. Settings Breakpoints and debug misbehavior of our target.

ETH PHY:
This is the physical layer of our Ethernet network. This chip is responsible for doing the QAM modulation and demodulation. In fact, it will do a lot more. But this would be out of the scope of this post to discuss it here.
To make it easier to connect PHY’s to targets, there are some established standards. One of them is RMII or MII. R stands for „reduced“ MII for „Media Independent Interface“. So re RMII uses less IO’s for its connection.
We will use the RMII interface for our interconnection between our i.MX6 and our PHY. I have chosen a KSZ8041 as the PHY. This Chip is relatively cheap and is widely available which makes it a good candidate for own projects. There is also a pin-compatible pendant, the KSZ8081 available which has got some features.

Magnetics:
Why should we use magnetic’s if there are jacks available on the market with already integrated magnetic’s (so-called MagJacks)? The reason is flexibility. At the beginning of this project, I was not sure what kind of problems I will have to face during the first start-up phase. Therefore I wanted to give me the maximum flexibility. A nice side effect of this is, that the whole solution gets a bit less expensive.

DDR3:
The main memory for the processor. Not that much to say about it. It is as DDR3 type, so more caution must be given during the routing process since signal integrity topics come in place here. But don’t worry, we will discuss this topic here also.

SD-Card:
The main memory for our operating system itself and the bootloader u-boot. We will use the generic SDIO interface of the processor with 4-Bit bus width.

UART:
This will, except for JTAG, become the most important interface on our board. The serial interface will give us the possibility to send „heat beats“ out of our board at a very early stage. We will have regular UART’s with 3.3V logic and one USB-UART bridge on board.

Power supply:
Our board needs different voltage sources. 3.3V for regular logic like PHY, SD-Card, GPIO, and so on. The processor's core will need 1.275V (depends on its run-mode) and our DDR3 the memory will need 1.5V. And, of course, if we will use the USB we need 5V. I have decided to first transform the incoming voltage to 5V and then go down to the other levels.

PMIC:
One of the more important blocks. Complex designs like this one often need something called power sequencing. Power sequencing is a method where you bring up your voltage sources in a pre-defined sequence. This is important for the correct behavior of all components and sometimes could destroy a device if you don’t follow its power-up sequence exactly.
For many SOC’s (like the i.MX6 is one) there exists some special designed PMIC (power management ic’s). They could have some advantages in case they include also some buck-boost converters. In our case, I decided to do all blocks as discrete as possible. So therefore I will design each power supply stage as a single buck converter. The PMIC in this case is only responsible for monitoring the voltages and bring (enable) them up in the correct sequence. For this task, I will use a little STM8 microcontroller.

This should give you a rough overview of what will going on and what will be discussed in the next parts.

Next time I will show you, how to choose the right processor and the appropriate DDR3 memory.

Keep reading…