How to Learn Embedded Systems: Insights from Experts

Click belowLearn Embedded Systems Together to follow, learn and grow together

Concept of Embedded Systems
Focus on understanding the concept of “embedding” from three aspects.
1. From the hardware perspective, “embedding” integrates peripheral devices based on the CPU into the CPU chip itself. For example, in early computers based on the X86 architecture, the CPU only had the functions of an arithmetic unit and an accumulator, and all other chips had to rely on external bridges for expansion, such as serial ports which were implemented using external 16C550/2 serial controller chips.
Currently, such serial controller chips have long been integrated into the CPU. There are also graphics cards in PCs, and most embedded processors come with LCD controllers, which are essentially equivalent to graphics cards. More advanced ARM class Intel Xscale architecture IXP network processors integrate PCI controllers (which can be configured to support 4 PCI slave devices or serve as a PCI slave device itself); they also integrate 3 NPE network processor engines.
Two of these correspond to two MAC addresses for gateway switching, while the other NPE network processor engine supports DSL, requiring only an additional PHY chip to enable DSL internet functionality. The IXP series can reach a maximum frequency of 1.8G, supporting 2G of memory, and has Ethernet ports of 1G×10 or 10G×1 or Fibre Channel optical channels. The IXP series should be the highest processor based on the ARM architecture integrated by Intel into the Xscale core.
2. From the software perspective, embedding involves selecting applications to be included in the customized operating system kernel, which is compiled and then downloaded to ROM. The selected application components during kernel customization complete the software “embedding”. For instance, when customizing the Windows kernel, there are corresponding selections, including WordPad, PDF, MediaPlay, etc. If we select these, they will be available on the interface after CE starts. In contrast, with the previous Windows operating systems on PCs, most applications needed to be reinstalled.
3. Burning the software kernel or application file system into the ROM of the embedded system hardware platform achieves a true “embedding”.
The definitions above are my own understanding of embedded systems from 6-7 years ago. There are many definitions in books, but in the field of “embedded systems”, no one dares to claim that their definition is entirely accurate, including experts and scholars, as embedded systems are an interdisciplinary subject in the realm of computers.
Layering and Professional Classification of Embedded Systems
Embedded systems are divided into four layers: hardware layer, driver layer, operating system layer, and application layer.
1. Hardware Layer, is the foundation of the entire embedded system. If you are already familiar with microcontrollers and interfaces and can program using C and assembly language, it is relatively easy to start from the hardware layer of embedded systems. The hardware layer is also the foundation for the driver layer. An excellent driver engineer must be able to understand hardware circuit diagrams and complete CPLD logic design independently.
Additionally, one must be quite familiar with the operating system kernel and its scheduling. However, the hardware platform is fundamental, and added value must come from software.
The hardware layer is more suitable for individuals from electronics, communications, automation, mechatronics, and information engineering backgrounds. The essential foundational knowledge includes microcontroller principles and interface technology, microcomputer principles and interface technology, and C language.
2. Driver Layer, this part is relatively challenging. Driver engineers must not only understand circuit diagrams but also master the operating system kernel to ensure that the driver programs they write do not monopolize the operating system’s time slice during system calls, preventing other tasks from running. Without understanding the operating system kernel architecture and real-time scheduling, and lacking good driver writing style, many people can follow the methods described in most books to add drivers.
However, they may not even reach the level of a junior driver engineer. Poorly written drivers will behave like programs in Windows, where opening a new program interrupts the previous one or makes it wait before running. To become a good driver engineer requires three to four years of experience; without studying the operating system kernel, success is not easy. However, the salary in the embedded system’s four layers is the highest.
The driver layer is more suitable for individuals from electronics, communications, automation, mechatronics, and information engineering backgrounds, especially those with a focus on computer architecture. In addition to the foundational disciplines of the hardware layer, one must also be well-versed in data structures and algorithms, operating system principles, and compilation principles.
3. Operating System Layer, currently, this layer may only involve simple porting, and few people write operating systems or create incomplete operating systems. Most of this work is done by driver engineers. The operating system is responsible for debugging system tasks, managing disks, and files.
Real-time performance is very important for embedded systems. It is said that the XP operating system took Microsoft 300 people two years to complete, with a total of 600 person-years of work. The software institute of the Chinese Academy of Sciences’ own Nuwa Hopen operating system also likely took several hundred person-years to develop. Therefore, this part of the work is relatively insignificant.
4. Application Layer, comparatively easier. If you know how to call programming interface functions under Windows, the only difference in the operating system is the compilation and development environment. The same applies to programming in Java. Algorithms involved in embedded systems are handled by specialized algorithm professionals and do not necessarily fall under the embedded system category. However, if it involves embedded databases, network programming based on embedded systems, and development of protocol applications based on specific application layers (e.g., SIP, H.323, Asterisk), it becomes more complex and challenging.
Goals and Positioning
First have goals, then position yourself.
Learn ARM, from the hardware perspective, involves learning interface circuit design, and from the software perspective, entails learning driver development and porting at the operating system level based on ARM processors.
For beginners, it is essential to clarify whether to start from hardware or familiarize oneself with the operating system before moving to applications. Regardless of what is learned, if it is not purely API-based application layer programming at the operating system level, one still needs to understand hardware register-related concepts.
Board-level assembly and C programming must be mastered. Therefore, for those involved in the hardware layer and driver development of embedded systems, mastering ARM interface circuit design, ARM C language, assembly language programming, and debugging development environments is crucial.
Beginners must grasp the direction and clarify their goals for learning embedded systems, determining which level they want to pursue. They should focus on learning practical aspects of embedded systems, particularly the hardware and driver layers related to ARM. Excelling in either layer will lead to promising career prospects.
If you wish to pursue the application layer of embedded systems, it may diverge significantly from ARM and other architectures. Focus on researching embedded operating system environments and corresponding development toolchains, such as EVC application development under WinCE (similar to VC under Windows). For further breakthroughs, one can delve into audio-video protocol applications, such as application layer development based on SIP or H.323 protocols, or development based on embedded network databases, etc.
For beginners, it is essential to act within their capabilities, and not to assume that the high salary of the driver layer makes it the only direction. One must consider personal characteristics; there are experts in every layer of embedded systems, and naturally, experts correspond to high salaries. I work in the hardware layer, and previously, nearly 3000 yuan in personal income tax was deducted from my monthly salary. I play the role of both an engineer and a supervisor, handling both positions alone, but working hours remain the same. In the hardware domain, I have few competitors, which is why I earn such a salary.
Development System Selection
Many ARM beginners wish to have a system they can use, but they often develop a misconception that the higher the processor version and performance, the better. Just as many believe ARM9 is superior to ARM7, I think beginners should approach this rationally. The choice of development system ultimately depends on the direction one wants to pursue in embedded systems, whether it is driver development, application, or hardware layer design and board-level testing. If one aims to work at the operating system or application level, then higher processor performance is indeed preferable. However, self-learning embedded systems is extremely challenging and cannot be resolved in a few months, half a year, or even one to two years.
In a certain sense, the difference between ARM7 and ARM9 lies in the richness of some function instruction sets and slightly higher main frequency. For users, they may not detect much difference, only that the speed feels a bit faster.
ARM7 is more suitable for those who wish to start from the hardware perspective, as few ARM7 series processors come with MMUs, and they are easier to control. For example, S3C44B0 can easily disable the cache, and the internal interface registers are straightforward to understand. Various interfaces can be controlled using hardware programming or AXD single-step command line instructions, making it easy for those with 51 microcontroller experience to grasp it as a 32-bit microcontroller, alleviating the confusion many 51 engineers face when transitioning to embedded hardware ARM development, preventing them from being misled into the operating system layer by companies that do not genuinely understand embedded systems, which further exacerbates the talent shortage in this field.
Whether in hardware design or software driver development, embedded systems place significant emphasis on interfaces. When selecting a platform, one must consider the external resources of a processor; the more external resources you are familiar with, the higher your chances of successful employment. This is what is referred to during recruitment as having “relevant skills”.
It is impossible for someone to encounter all processors in just a few years. The processors used by recruitment units may be entirely unfamiliar to us. For instance, many small companies in Taiwan (valued at several million) produce ARM processors that are very useful, but their universality is too poor. Companies using these processors can only hire those with relevant work experience. What is relevant work experience? In hardware, it refers to peripheral interface design, while in software, it refers to experience in operating system-related interface drivers and application development. Having worked in the industry for nearly ten years since the introduction of ARM in 2000, I started with ARM7 and then directly transitioned to Xscale (which sits between ARM10 and ARM11), working for five years. I have interviewed hundreds of candidates and have deep insights in this area.
I personally believe that Samsung’s S3C44B0 is quite suitable for beginners. Why do I say this? Because it has abundant interface resources, mature technology, and ample documentation, making it very suitable for beginners. Problems can be easily resolved as many people are familiar with it, similar to 51 microcontrollers, where numerous experts can assist with quick answers. While the industry considers this ARM to be overly utilized, it is beneficial for beginners.
Therefore, when selecting a development system, one must consider future career goals, the interface resources of the development board, and the universality in the industry.
Skills Required to Become a Senior Embedded Hardware Engineer
For hardware, there are several directions, divided into digital and analog signals. Analog is more challenging and generally requires extensive experience. Even a small error in resistance or capacitance can cause significant signal deviation. Therefore, fewer young people engage in this field, but with technological advancements, analog circuits are being digitized.
For instance, mobile phone modem RF modules use mature chipsets, and only two companies globally had this technology in the past. I feel that those who are not strong in analog functions are not suited for this field. If one can handle mobile phone RF modules, achieving a moderate level may result in a monthly salary of over 15K.
The other category is the digital part, which can be further divided into 51/ARM microcontroller classes, DSP classes, and FPGA classes. Most FPGA engineers in China work in IC design companies engaged in front-end verification of IP cores. If one does not reach the gate level, the future is unclear. Even becoming an IC front-end verification engineer requires several years of experience.
DSP hardware interfaces are relatively standardized. If one does not lean towards drivers or algorithms, the prospects may not be significant. The ARM microcontroller category encompasses a wide range of content, with a large market share and extensive application population, resulting in vast employment opportunities. The level of hardware design is best reflected in interface design.
This is the criterion for evaluating the capabilities of senior hardware engineers. The key to interface design lies in timing, not merely connections. For instance, the I2C of the PXA255 processor requires a speed of 100Kbps; if an I2C peripheral device fails to achieve this speed, the design will inevitably fail.
Such situations are common. For example, while a 51 microcontroller can connect to an LCD on the bus, why can’t this LCD connect to the ARM bus? Similarly, while an ARM7 can connect to a Winband SD card controller, why can’t this controller connect to ARM9 or Xscale processors? These are all issues. Therefore, interface design is not just about simple connections; it requires attention to timing and parameters.
An excellent hardware engineer should be able to design a product that is superior in cost and performance without a reference solution. Existing solutions should be appropriately trimmed for feasibility, not arbitrarily. I encountered an engineer who directly replaced a 5V to 1.8V DC chip in the solution with an LDO, which sometimes resulted in burning the CPU.
A few days ago, someone asked me to help optimize the program for their handheld GPS device based on the PXA255 platform. I inquired about the situation, and the map was stored on an SD card, with the SD card connected to the PXA255’s MMC controller via an SPI interface, resulting in slow map reading speeds.
This situation represents a significant design flaw, not a programming issue, so I provided several suggestions for them to try out.
To become an excellent engineer, one needs to grasp the overall system and understand existing circuits. In other words, how much can you understand from a circuit diagram? If you cannot comprehend more than 80%, it indicates that you are far from being an excellent engineer. Furthermore, circuit debugging ability and schematic review skills are essential, but the most fundamental abilities are schematic design and PCB layout, along with logic design.
This refers to hardware design engineers, who can be further divided into ECAD engineers, who specialize in PCB design, and EMC design engineers, who help solve EMC issues. Hardware engineers can also progress to board-level testing engineers, who possess strong C language skills and can verify hardware functionality through self-written testing programs during circuit board debugging, before handing it over to operating system-level driver developers.
In summary, hardware encompasses a broad range of content, and mastering any area will lead to becoming an expert. I often provide solution evaluations, and many designs by senior hardware engineers are frequently dismissed with a single comment from me.
Thus, reaching my level as an engineer may offend some, but hardware indeed contains many unknowns that even senior hardware engineers find perplexing.
What technical skills should senior hardware engineers possess?
First, they must master auxiliary tools for EDA design, such as Protel, ORCAD, PowerPCB, Maplux2ISE, and VHDL language, being able to use these tools for drawing and logic design. Additionally, they should have interface design review skills and debugging abilities. If they can reach the overall solution design level, they are close to becoming a senior engineer.
Hardware requires both experience and accumulation; it takes ten years to sharpen a sword and a hundred years to refine a needle.

The source of this article is the internet, and the copyright belongs to the original author. If there is any infringement, please contact for deletion.

Leave a Comment

×