Nearly every electronic product designed today includes at least one microcontroller or other embedded processor. Often a microcontroller with internal peripherals and custom firmware replaces what would previously have been implemented with significant amounts of analog circuitry and digital logic. Sucessfully designing embedded systems requires knowledge of analog, digital, and power electronics, along with good software development practices.
Posedge Software offers consulting and design services, and has expertise designing embedded systems using a variety of platforms, tools and methodologies, and can perform tasks such as:
- Writing embedded code
- Configuring compilers, linkers, debuggers, and other tools
- Using a variety of processors and peripherals
- Designing circuits using, analog, digital, and power electronics
- Design and layout of printed circuit boards
- Building, testing, and debugging systems
Embedded software (firmware) is typically written in C, C++, or Assembly language, and can vary from bootloaders and other low-level drivers, to user applications running on a real-time OS. Target systems can be small microcontrollers with only a few kilobytes of memory, to high-end multi-core processors, with gigibytes of RAM. Often there are timing and performance constraints that would be unheard of for PC-based software.
A number of tools are used during embedded software development. Most importantly, compilers and linkers are needed, and often have to be configured to ensure code is correctly generated and placed in the correct locations in memory. Debuggers and simulators are also important during the development cycle to help track down and understand issues that occur. In addition, build/revision control and issue tracking tools are an imortant part of the development cycle.
A wide variety of microcontrollers and other embedded processors are available from vendors such as TI, Freescale, Microchip, Renesas, and others. Understanding the inner workings of processors, along with knowing the details of specific models is important to make a well designed system. Even for a single processor family, a wide variety of peripherals and interfaces may be available. Choosing which peripherals to use, and understanding how to configure and use them correctly is critical to the design. This may require knowledge of a number of communication protocols and hardware interfaces.
Many microcontrollers include analog-to-digtal converters and other analog interfaces. Analog front-end circuitry is usually needed to filter and scale the input signals to the correct level. A well design power supply system is also needed to ensure correct operation of the processor, as well as minimize noise on the board. Digital logic is often needed to interface with peripherals, or connect devices to a bus. An understanding of a wide range of electronics is needed for a properly designed embedded system.
Printed circuit board (PCB) design is a critical part of the development cycle. While an improperly designed board may have the correct continuity between different pins, it can increase noise levels and cause instability and other issues. A PCB designed for signal integrity may include ground planes, gaurd traces, multiple layers, and will have correct spacing and placement of traces and components.
Although much of the design process can be done using simulations, virtual platforms, or other software tools, at some point hardware must be assembled and the embedded software tested on it. This can be a time-consuming process, and often requires debugging issues with the hardware, the software, and the interaction between the two. Properly using tools such as oscilliscopes, logic analyzers, and hardware debuggers can greatly improve the visibility, and help resolve these issues quickly.