I am new to microcontrollers and am facing a problem regarding the understanding of the terms firmware, bootloader and the actual code of a microcontroller. In some places I have read that the firmware is there to communicate with other devices. But in some place I have read that the firmware is the code that runs on the microcontroller mainly the C code in case of Arduino. The bootloader is basically to initialize the counters etc. as far as I've read. Kindly tell me the difference in all of these in simple words as there is no clear explanation as far as I've seen.

  • 1
    \$\begingroup\$ There is no clear distinction. All code running on a MCU is firmware. Bootloader code and it is firmware. So is your own application code. The terms are not fixed as it depends on context. Sure a bootloader is a piece of code that allows you to reprogram the MCU through some interface which might otherwise be impossible. If you have a specific example then we might have a specific answer. \$\endgroup\$
    – Justme
    Jun 12 at 18:28
  • \$\begingroup\$ Considering I just turned ON my microcontroller. After that the bootloader being a part of the firmware will initialize the counters etc. What happens next. Will it wait for the new code or it runs the one present? And what terms to be used in this case? \$\endgroup\$
    – user340506
    Jun 12 at 18:35
  • \$\begingroup\$ But I have seen people distincting the firmware from the program memory code. They take the firmware as the code that is already in there which helps to give specific properties to the controller. Like its interference,bootloading etc? \$\endgroup\$
    – user340506
    Jun 12 at 18:36
  • \$\begingroup\$ Bootloading is a task performed by code running in the microcontroller. Configuring and operating interfaces is a task performed by code running in the microcontroller. Code running in the microcontroller is (probably) firmware (if not then it's software). There's a hazy line between firmware and software though - as a firmware engineer who writes code for microcontrollers I regard anything running under linux (even if it's "embedded") as software. A developer of applications for set-top boxes might have a different opinion ... \$\endgroup\$
    – brhans
    Jun 12 at 19:18
  • \$\begingroup\$ I don't know why the distinction then. Also what counters would a bootloader initialize? It depends on what is the distinction on your specific setup. What is your setup? Bootloader may be what you as a user upload and it prepares system for your application code you upload. Bootloader may be factory made and not removable, and you don't have to use it, or it can be skipped completely when you are not updating the application. \$\endgroup\$
    – Justme
    Jun 12 at 20:28

1 Answer 1


Different groups use different terminology.

For starters, some groups will use "firmware" exclusively for FPGA bitstreams, and "software" for anything that runs on a processor -- or "firmware" will be for bitstreams and boot code, but not for anything on a thumb drive, etc. Just be prepared to have to figure things out from context, and if source "A" seems to disagree with source "B" it's probably because they are, actually, in disagreement.

If there's no FPGA in sight, then "firmware" and "bootloader" are both actual code of the microcontroller.

Note that some people get really hot about the precise definitions of these -- I've learned not to care, and just go with whatever the group I'm in uses.

  • "Firmware" -- usually means the code a microcontroller runs if it's "little", i.e. if it's flashed on and not on something that looks like a disk.
  • "Software" -- something that's on a disk, or source code for the firmware depending on who you ask.
  • "Bootloader" -- firmware that boots the microprocessor, and manages downloading applications firmware onto flash. It may be build in to the chip, or you may have written it to support your own communications scheme.
  • 2
    \$\begingroup\$ And some might call FPGA configuration binaries as gateware. Anyway firmware is more a function described as fixed because most MCUs do not load software applications from a file system. Firmware is a good name for computer/phone program that almost never changes and is used to load/start/boot the OS from disk. \$\endgroup\$
    – Justme
    Jun 12 at 20:36
  • \$\begingroup\$ I hadn't heard "gateware" before. There's a need for terminology to keep things straight, and the technical environment keeps changing. So you get new words, and confusion. \$\endgroup\$
    – TimWescott
    Jun 13 at 14:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.