而微码这个词,泛指那些比固件的代码逻辑量级更低的代码,比如典型案例:鼠标/键盘内部其实也有一个小CPU,但是由于其运行的代码逻辑太过简单,而且指令集都是私有的,条数很少,所以其硬件相当简单,但是这并不妨碍其仍然属于CPU,只不过是一种MCU(MicroControl Unit,微控制单元)。比如鼠标的MCU就负责接收各种按键的信号,并根据信号从ROM中保存的码表提取编码,并通过驱动USB接口控制器将编码数据传送到Host端的USB控制器,这套流程也需要一个极为简单的程序来处理,这个程序就叫做微码。同理,键盘上的MCU也负责接收按键信号,并通过USB控制器传给Host。
再比如Raid卡内部,除了主控CPU运行固件之外,还有控制后端SAS通路的SAS控制器模块,其中内含一个MCU,也是可编程的,运行着响应SATA盘独特逻辑的代码,将其翻译成SAS逻辑,对上位体现为SAS盘。这里运行的代码也属于微码。
所以,固件的量级比微码更大,微码多运行在MCU这种极度轻量级的CPU上,而固件则运行在稍微重一些的CPU上,OS则运行在更加重量级的CPU比如服务器CPU上。它们一个比一个强大,处理的逻辑也是一个比一个复杂。
你可能不知道,DDR SDRAM,NANDFlash颗粒内部,也有MCU,只不过多数产品其运行逻辑已经被写死在了硬件电路中,用纯电路来实现译码,但是不排除有些留有可编程后门的产品,依然采用了微码的方式来运行,此时就可以用私有指令对微码进行升级。
对于小型机、高端存储系统等,工程师们常挂嘴边的“升级微码”,其实是说连固件带微码一起升级,因为厂商每次发布新版本时,基本会将固件和微码一起发布,升级的时候也是使用一些预先规定好的流程,将对应的固件和微码一同升级到对应部件上。“升级微码”比“升级固件”显得门槛更高,所以为了彰显格调,工程师们,尤其是大厂工程师就选择了后者。