Saturday, 9 November 2013

Embedded engineers sometime get confused thinking that whether the code they are writing is embedded software or firmware. This gives birth to the question that whether they are embedded software engineer or firmware engineer or both

Having years of experience in embedded system and after studying a lot I finally concluded following, please correct me if I am wrong somewhere

First of all embedded software/firmware resides on a small amount of memory such a flash, NVRAM or RAM compared to the software which resides on a PC hard disk.

I would like to explain through examples.

Consider a scenario:
Suppose a company wants to make a software for a washing machine 

One possibility is that only one engineer is writing code for initialization of all  peripherals and implement all the functionalities needed by the washing machine, thus in this case the whole code is called firmware and the engineer will be called firmware engineer.

Another possibility is there are two engineers involved in writing the code for the machine. Engineer1 writes a boot-loader, the basic function of which is to initialize the peripherals according to the user configuration (default if user configuration is not present) and waits for the embedded code over any communication medium such as Ethernet. As soon as the boot-loader receives that embedded code, it checks for its genuineness and flashes the code in the flash memory of washing machine. After flashing the boot-loader gives control to the embedded code so that the washing machine can run. Now here the boot-loader code is the firmware and Enginner1 writing the boot-loader code will be called firmware engineer.

Now here the Engineer2 is responsible for providing the configuration parameters of the peripherals such as baud-rate and writing embedded code according to the end-user needs such as for how long the motor revolves in one direction. Here the embedded code is called embedded software and the Engineer2 will be called embedded software engineer.

Firmware may be permanently stored in the device ROM or may be loaded by the PC at the time of initializing the device.

Thus  the firmware is a software which is needed for a device, whether its an IC such as any Programmable logic, any embedded device such as router or machine such as big printing machine to perform its basic function.