It's software that lives in the hardware. It provides low-level control and functionality specific to that device. It runs on the hardware itself, not the CPU of the computer.
For example, a hard drive. We don't want the OS to have to know how to interact with every type of hard drive. Seagate does things differently than Western Digital, an SSD works very different than a hard drive, etc.. The OS sends the same commands to all types of hard drives, but each hard drive needs to know how to actually comply with the commands. If the OS is asking for a dozen different files all over the drive, it would be dumb to try and read them all at the same time. The OS doesn't really know where they are on the spinning disk, but the drive does. Firmware written specifically for the device can do a much better job planing how to fetch the data so the read head doesn't need to go back and forth a bunch of times, but instead make one good pass fetching all the data as it comes to it.
It's software that lives in the hardware. It provides low-level control and functionality specific to that device. It runs on the hardware itself, not the CPU of the computer.
For example, a hard drive. We don't want the OS to have to know how to interact with every type of hard drive. Seagate does things differently than Western Digital, an SSD works very different than a hard drive, etc.. The OS sends the same commands to all types of hard drives, but each hard drive needs to know how to actually comply with the commands. If the OS is asking for a dozen different files all over the drive, it would be dumb to try and read them all at the same time. The OS doesn't really know where they are on the spinning disk, but the drive does. Firmware written specifically for the device can do a much better job planing how to fetch the data so the read head doesn't need to go back and forth a bunch of times, but instead make one good pass fetching all the data as it comes to it.
Hope that helps.