Если будем рассматривать почти любое достаточно сложное электронное устройство, то можно выделить четыре слоя специального программного обеспечения:
1) Программа - софт, который в большинстве случаев знать не должен на чем он запускается. Просто софт, который выполняет требуемый алгоритм. Для взаимодействия с вычислительными ресурсами программы обращаются к следующему слою.
2) ОС - по факту это набор программ, которые позволяют работать всем прочим программам, поддерживает некоторый единообразный интерфейс. Для взаимодейсвия с пользователем и непосредственно самим железом ОС обращается к следующему слою.
3) Программная прошивка - это интерфейс между железом и ОС. Ну и непосредственно на самом железе лежит следующий слой.
4) Аппаратная прошивка. Управляет питанием, обработкой сигналов между платами.
Считается, что чем ниже уровень, тем реже его нужно менять. В идеале аппаратная прошивка устанавливается на заводе, программная прошивка выбирается в зависимости от возможностей и потребностей, сверху ставится ОС, которую теоретически можно поменять, но лучше этого не делать, а программы хоть 10 в день меняй.
Но люди нередко допускают ошибки при программировании, поэтому иногда возникает необходимость сделать такое изменение, которое обычным софтом (верхние 2 уровня) не исправить. Как я упомянул 4 уровень тоже практически не поддается изменениям, вот и остается 3 уровень - то, что чаще всего называют прошивкой.
В качестве примера приведу свой старый планшет. Когда я его купил, то он обрабатывал не более 5 одновременных прикосновений. А после установки новой прошивки - это число возросло до 10.
Ну и стоит упомянуть, что разработчики, которые экономят на продумывании архитектуры нередко объединяют некоторые слои - часто это 3 с 4 или 3 со 2.