1. The Engineer’s Perspective on “Embedded Systems”
From an engineer’s point of view: focus on understanding the concept of “embedding” from three main aspects:
1. From the hardware perspective, integrating peripheral devices based on the CPU into the CPU chip itself. For example, early computers based on the X86 architecture only had arithmetic and accumulator functions in the CPU, while all chip functionalities had to be expanded through external bridges, such as serial ports, which relied on external 16C550/2 serial controller chips. Nowadays, such serial controller chips have long been integrated into the CPU. In addition, while PCs have graphics cards, most embedded processors come with LCD controllers, which in some sense are equivalent to graphics cards. More advanced ARM-based Intel Xscale architecture IXP network processor CPUs integrate a PCI controller internally (which can support up to four PCI slave devices or configure itself as a PCI slave device); they also integrate three NPE network processing engines, two of which correspond to two MAC addresses for gateway switching, while the other NPE network processor engine supports DSL, requiring only an external PHY chip to achieve DSL internet functionality. The IXP series can reach a maximum frequency of 1.8G, support 2G of memory, and provide 1G×10 or 10G×1 Ethernet ports or Fibre Channel optical channels. The IXP series is arguably the highest processor based on the ARM architecture after being integrated by Intel into the Xscale core.
2. From the software perspective, it involves selecting applications to be included in the customized operating system kernel, compiling it, and downloading the kernel to ROM. The chosen application components during the customization of the operating system kernel complete the software “embedding”. For example, when customizing the WinCE kernel, there are corresponding selections, including WordPad, PDF, MediaPlay, etc. If we select these, they will be available in the interface after CE starts up, unlike in previous Windows operating systems on PCs where 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 above definitions are my personal understanding of embedded systems from 6 or 7 years ago. There are many definitions in books, but within this field, no one dares to claim their definition is entirely accurate, including those experts and scholars, as embedded systems are a comprehensive discipline within the realm of computers.
2. The Hierarchical Structure of Embedded Systems and Professional Requirements
Embedded systems are divided into four layers: hardware layer, driver layer, operating system layer, and application layer.
1. Hardware Layer: This is the foundation of the entire embedded system. If you are familiar with microcontrollers and interfaces and can program in C and assembly language, starting from the hardware layer of embedded systems is relatively easy. The hardware layer is also the foundation for the driver layer. An excellent driver engineer should be able to understand hardware circuit diagrams and complete CPLD logic designs independently, while also being quite familiar with operating system kernels and their scheduling. However, the hardware platform is fundamental; value addition relies on software.
This layer is more suitable for professionals in electronics, communications, automation, mechatronics, and information engineering. The foundational knowledge required includes: microcontroller principles and interface technology, microcomputer principles and interface technology, C language, etc.
2. Driver Layer: This part is relatively difficult. Driver engineers must not only be able to read circuit diagrams but also be very proficient in operating system kernels to ensure that their driver programs do not monopolize the operating system’s time slices during system calls, which would prevent other tasks from running. If one does not understand the architecture of the operating system kernel and real-time scheduling, and lacks a good driver writing style, following the methods described in most books may not even reach the level of a junior driver engineer. The drivers written may behave like opening a program in Windows, where running a new program interrupts the previous one or causes a wait before the new program runs. To become a good driver engineer, it typically requires three to four years of experience, and without studying the operating system kernel multiple times, success is not easily achievable. However, the salary in this layer is the highest among the four layers of embedded systems. The driver layer is particularly suitable for professionals in electronics, communications, automation, mechatronics, and especially those with a computer architecture background. Of course, besides the foundational subjects required for the hardware layer, one must also be proficient in data structures and algorithms, operating system principles, and compiler principles.
3. Operating System Layer: Currently, the work in this layer is mostly limited to simple porting, with few people writing operating systems from scratch or creating operating systems that are incomplete. Most of this work is done by driver engineers. The operating system is responsible for debugging system tasks, managing disks and files, and the real-time nature of embedded systems is crucial. It is said that the XP operating system took Microsoft 300 people two years to complete, totaling 600 person-years; the software institute of the Chinese Academy of Sciences estimates that their own Nuwa Hopen operating system would also require hundreds of person-years to complete. Therefore, this part of the work is relatively insignificant.
4. Application Layer: This layer is relatively easier. If you can program interface function calls in Windows, moving to the operating system layer only involves changes in the compilation and development environment. The same applies to programming in Java. Algorithms within embedded systems are generally handled by specialized algorithm professionals and do not need to fall under the embedded systems category. However, if it involves embedded databases, network programming based on embedded systems, and application development based on certain application-layer protocols (such as SIP, H.323, Asterisk), it becomes more complex and nuanced.
3. Goals and Positioning
First, set a goal, then position yourself.
Learning ARM, from the hardware perspective, involves learning interface circuit design and board-level programming in assembly and C language. From the software perspective, it requires learning about driver development and porting at the operating system level based on ARM processors. This must be clear for beginners: whether to start learning from hardware or from familiarizing oneself with the operating system to applications. Regardless of what you choose to study, as long as it is not purely application-level programming based on API above the operating system level, you still need to understand hardware registers and be proficient in board-level assembly and C programming. Therefore, for those involved in the hardware and driver layers of embedded systems, mastering ARM interface circuit design, ARM C language, and assembly language programming and debugging development environments is essential.
For beginners, it is crucial to grasp the direction and set their goals, determining what layer they want to work in. Learning either the hardware or driver layer related to embedded systems will provide great career prospects. If one wishes to work in the application layer of embedded systems, it may diverge significantly from ARM and other architectures, focusing instead on the environmental applications and corresponding development toolchains of embedded operating systems, such as EVC application development under the WinCE operating system (similar to VC under Windows). If one wants to make breakthroughs, they should focus on audio and video protocols, such as application-layer development based on SIP or H.323 protocols, or development based on embedded network databases, etc.
For beginners, they must act within their capabilities and not assume that the high salary of the driver layer makes it the only direction. They should consider their characteristics; there are experts in all four layers of embedded systems, and naturally, experts correspond to high salaries. I work in the hardware layer, and previously my personal income tax was deducted nearly 3,000 yuan each month. Of course, I play both the role of an engineer and a supervisory figure, handling both positions myself, but the working hours remain the same. In the hardware domain, there are likely very few people who can compete with me, which is why I earn so much.
4. How to Choose the Right Development System
Many ARM beginners hope to have a system they can use, but they often develop a misconception that the higher the processor version, the better, and the higher the performance, the better. Just as many people believe ARM9 is better than ARM7, I think beginners should be rational in this regard. The choice of development system ultimately depends on which direction they want to pursue in embedded systems: whether to engage in driver development, application development, or hardware layer design and board-level testing. If one wants to work at the operating system or application level, higher processor performance is certainly better, but this is a self-study endeavor that involves significant challenges; it cannot be mastered in just a few months, half a year, or even one or two years.
In a sense, the difference between ARM7 and ARM9 lies in the richness of certain functional instruction sets and a slight increase in clock speed, similar to the difference between 286 and 386. For users, the difference may not be noticeable; they might only feel a slight increase in speed.
ARM7 is more suitable for those who want to start from the hardware layer because very few ARM7 series processors come with an MMU and are easier to control. For instance, the 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. The concept based on the 51 microcontroller is easy to grasp, treating it as a 32-bit microcontroller, thus alleviating the confusion many 51 engineers face when transitioning to embedded system hardware ARM development, preventing them from being misled by certain companies that do not truly understand embedded systems, leading them to the operating system level and resulting in a shortage of talent in this area.
Both hardware design and software driving aspects of embedded systems place significant emphasis on interfaces. When choosing a platform, one must also assess the external resources of a processor. The more external resources you are exposed to and familiar with, the higher the chances of successful employment. This is what is referred to during recruitment as having “relevant skills,” as it is impossible for one person to have encountered all processors in just a few years. The processors used by hiring companies may be ones we have never seen before. For example, ARM processors produced by dozens of small companies in Taiwan (valued at tens of millions) are also very usable, but these processors have poor generality, and companies using them can only hire people with relevant work experience. What constitutes relevant work experience? In hardware, it refers to peripheral interface design, while in software, it pertains to experience in operating system-related interface drivers and application development. I have been in the industry for nearly ten years; since ARM appeared in 2000, I started with ARM7 and then directly transitioned to Xscale (this version is between ARM10-11), and I did this for five years, interviewing hundreds of candidates in these areas.
Personally, I believe Samsung’s S3C44B0 is quite suitable for beginners. Why? Because it has rich interface resources, mature technology, and ample documentation, making it very suitable for beginners. When encountering problems, it is relatively easy to find help and solutions since most people are familiar with it, much like the 51 microcontroller, where there are many expert-level individuals available to assist, allowing for quick resolutions to related issues. Therefore, while the industry may feel that this ARM is overused, it is indeed beneficial for beginners.
In summary, when choosing a development system, one must consider their future career direction, the interface resources of the development board, and the generality in the industry.
5. Skills Required to Become a Senior Embedded Systems Hardware Engineer
In hardware, there are several directions. From a pure signal perspective, they can be divided into digital and analog. Analog is relatively challenging and generally requires a long accumulation of experience; even a slight imprecision in resistance or capacitance can cause significant signal deviation. Thus, younger individuals tend to engage less in this area. With technological advancements, analog circuits are becoming digitized. For example, mobile phone Modem RF modules are all using mature chipsets, and only two companies internationally had this technology back then. Those who do not feel particularly strong in analog functions may not be suitable for this field. However, if one can manage to handle the RF module for mobile phones at a reasonable level, their monthly salary could exceed 15K.
The other category pertains to the digital side, which can be further divided into 51/ARM microcontroller types, DSP types, and FPGA types. Most FPGA engineers in China work in IC design companies focusing on front-end verification of IP cores. This area does not have a clear future unless one works up to the gate level, and even as an IC front-end verification engineer, it takes several years to become competent. DSP hardware interfaces are relatively standardized, and if one does not lean towards driving or algorithms, the prospects will not be promising. However, the ARM microcontroller category has a wide range of content, with significant industry product usage and a broad application audience, thus offering vast employment opportunities. The level of hardware design is most reflected in interface design, which serves as the basis for senior hardware engineers to assess each other’s skills. The key to interface design is timing, rather than mere connections. For example, the PXA255 processor requires I2C speed to be at least 100Kbps; if an I2C peripheral device cannot reach this speed, the design is bound to fail. Similar situations arise, such as why a certain LCD can connect to a 51 microcontroller but not to an ARM bus, or why an ARM7 can connect to a Winband SD card controller but not to ARM9 or Xscale processors. These are all critical issues. Therefore, interface design is not merely about connecting; 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 reference solutions and should also be able to conduct feasible trimming of existing solutions, rather than making random changes. I encountered an engineer who replaced a DC chip that converts 5V to 1.8V directly with an LDO, which sometimes resulted in the CPU burning out. Recently, someone asked me to help optimize their program for a handheld GPS device based on the PXA255 platform. Upon inquiry, I found that the maps were stored on an SD card, and the connection between the SD card and the PXA255’s MMC controller used an SPI interface, leading to very slow map reading speeds. This situation indicates a severe flaw in the design, not a programming issue. Therefore, I provided several suggestions for them to update and test.
To become an excellent engineer, one must grasp the overall system and understand existing circuits. In other words, if you can understand more than 80% of a circuit diagram, you are still far from being an excellent engineer. The ability to debug circuits and read schematics is also crucial, but the most fundamental skills remain schematic design, PCB layout, and logic design. This refers to hardware design engineers, who can further be divided into ECAD engineers (those who specialize in PCB design) and EMC design engineers (who help resolve EMC issues). Hardware engineers can then advance to board-level testing engineers, who are hardware engineers with strong C language skills that enable them to validate hardware functionality through self-written test programs during circuit board debugging before handing it over to operating system-level driver developers. In summary, hardware content is vast and varied; excelling in any aspect will lead to becoming a master. I often conduct solution evaluations for others, and many designs by senior hardware engineers are frequently dismissed by my single remark. Thus, reaching my level as an engineer may offend some, but the hardware field indeed contains many unknowns that even senior hardware engineers cannot fully grasp.
So what skills must a senior hardware engineer possess? First, they should master EDA design tools such as Protel, OR CADPowper, PCBMaplux2ISE, and VHDL language, being able to use these tools for schematic and PCB design and logic design. Additionally, they should have interface design review capabilities and debugging skills. If they can reach the overall solution design level, they are close to becoming a senior engineer.
Deeply understanding the characteristics of various components, choosing the most suitable processors, peripheral devices, operating systems, and software libraries, and optimizing software design to best meet application needs for the best system cost-performance ratio is the essence of embedded system design and development.
Hardware relies on experience and accumulation; it takes ten years to hone a sword and a hundred years to sharpen a needle.
However, I remind everyone that pursuing technology is not the only purpose in life; do not make it the sole source of joy. There are many beautiful things around us worth cherishing. Haha, I am already worried that my intelligence may deplete before I turn 30. Cherish the fleeting college life and youth; do not spend all day in the lab with a keyboard in one hand and a soldering iron in the other.