Saturday, January 23, 2016

Embedded Software Definition

What is Embedded Software?

A computer program that is embedded in hardware of embedded system. Embedded software is strongly coupled to hardware and designed to perform a dedicated function. It controls the hardware and makes them to perform in a specific way.  It is typically specialized for the particular hardware platform that it runs on and has time and memory constraints. A single piece of hardware, circuit board or IC chip may contain multiple pieces of software embedded in it. Any circuit board that has computer chips will likely have embedded software within it.

Embedded software is highly dependent on CPU, specific chips chosen and the particular hardware platform that it runs on. It has fixed hardware requirements and capabilities. This software can be very simple or can become very sophisticated in applications such as airplanes, missiles, and process control systems.

Firmware is a special type of embedded software. The term Firmware refers to hardware dependent software that is written in non-volatile memory such as ROM, EPROM or embedded flash memory. It cannot easily be modified or updated hence the name "firm". It is called firmware rather than software to highlight that it is very closely tied to the particular hardware components of a device.  Firmware is typically involved with very basic low-level operations without which a device would be completely non-functional.
There are levels of firmware:
Low Level Firmware: This is found in ROM, OTP/PROM and PLA structures. Low level firmware is often read-only memory and cannot be changed or updated. It is sometimes referred to as hardware.
High Level Firmware: This is used in flash memory for updates that is often considered as software.
Subsystems: These have their own fixed microcode embedded in flashchips, CPUs and LCD units. A subsystem is usually considered part of the hardware device as well as high level firmware.

Middleware is usually the software that mediates between application software and the kernel or device driver software. Middleware is also software that mediates and serves different application software. Specifically, middleware is an abstraction layer generally used on embedded devices with two or more applications in order to provide flexibility, security, portability, and connectivity, intercommunication, and/or interoperability mechanisms between applications.

Board Support Package
Board Support Package (BSP) provides software to support the functionality of onboard devices.  It also provides configuration items to support board specific hardware. It can be optimized and also customized to your custom board. It allows you to manage board-specific settings and special code in one place. Any changes to a BSP will propagate automatically to every configuration of every application that uses that BSP. Components of BSP are drivers, abstraction layers, micro kernel, configuration files, build procedures and other board supporting files.

Device Driver
Device driver is computer software that is designed to operate and control a hardware device. It provides software interface to hardware device and thus enabling higher software layers to interact with hardware device. The driver issues commands to hardware device when higher software layer invoke driver routine. Drivers are hardware-dependent and operating-system-specific. Writing a device driver requires an in-depth understanding of how the hardware and the software works for a given platform function. Device drivers can be abstracted into logical and physical layers. Logical layers process data for a class of devices such as Ethernet ports or disk drives. Physical layers communicate with specific device instances.

Hardware Abstraction Layer
Hardware Abstraction Layer (HAL) provides software interface to access low level hardware and thus enabling a device driver to interact with a hardware device at a general, or abstract, level rather than at a detailed hardware level.

Low Level Driver
Controller driver or low level driver is a piece of program, accessing registers, to configure & control IO functionality of the peripheral interface controller. Writing controller driver requires in-depth knowledge in communication interface & bus protocols.

Boot loader is the section of code to be executed after the embedded system is powered on or reset on any platform. Boot loaders are different for CPU architecture and target board. Generally boot loader is to load the application image from flash to RAM and trigger the execution of application. Boot loader does the wake-up processes and brings the system in working state. Usually it disables interrupts, sets up the electronics, tests the computer (RAM, CPU and program), and then starts the application code.

Startup Code
Startup code is the program code which executes immediately after processor reset or powered on.  On power on reset, some basic processor settings have to be done to prepare it for executing application image. The startup code setup the system and bus configuration registers, clear data memory, set up stack pointers, initialize global variables and transfer control to main function.

Broadly, Embedded Software is divided in to three levels,
  • Input / Output Subroutines: Directly manipulate the hardware of the system
  • Operating System for managing hardware resources
  • Application Software: User interface

Related topics:
Embedded System Architecture   |   Embedded Hardware Architecture   |   Embedded Software Architecture   |   Hardware Units in Embedded System   |   Embedded System Acronyms   |   Embedded System Symbols

List of topics: Embedded System

1 comment: