什么是只读存储器?
只读存储器,英文叫 Read-Only Memory,简称 ROM。顾名思义,这种存储器里的数据出厂时就被写好,正常情况下用户不能修改,只能读取。就像你买的一本纸质说明书,能看但不能随便涂改。
ROM 和 RAM 有啥区别?
很多人容易把 ROM 和 RAM 搞混。RAM 是运行内存,断电后数据就没了,比如手机同时开多个 App,靠的就是 RAM 支撑。而 ROM 是长期存数据的,断电也不丢。举个例子:你在手机里下载的电影存在 ROM 里,打开看电影时才会加载到 RAM 中处理。
常见的 ROM 类型有哪些?
早期的 ROM 是真的一次性写入,后来技术升级,出现了几种更灵活的类型:
- PROM:可编程一次,适合小批量定制
- EPROM:用紫外线擦除,能重复使用,老式开发板上常见
- EEPROM:通过电信号擦写,现在家电遥控器、BIOS 芯片里还在用
- Flash Memory:属于 EEPROM 的改进版,速度快、容量大,U盘、SSD、手机存储其实都基于 Flash 技术
为什么路由器和交换机要用 ROM?
在网络设备里,ROM 通常用来存放启动程序(Bootloader)和基础诊断代码。比如一台交换机刚通电,CPU 还没加载系统,这时候就得靠 ROM 里的代码完成自检和引导。这就像汽车点火时的启动马达,必须有一个最底层的“引子”才能让整个系统跑起来。
手机说的“128G ROM”真是传统意义上的 ROM 吗?
严格来说不是。手机厂商说的“ROM”其实是借用术语,实际指的是内置的 Flash 存储芯片。你可以往里面装 App、存照片,也能删掉重写。虽然名字还叫 ROM,但它早就是可读可写的了。这有点像大家习惯把所有纸巾叫“舒洁”,哪怕不是同一个牌子。
BIOS 更新失败会变砖吗?
有可能。BIOS 存在主板的 SPI Flash 芯片里,本质是一种可擦写的 ROM。更新过程中如果断电或出错,可能导致引导程序损坏,机器无法启动。不过现在很多主板有双 BIOS 或恢复机制,类似“备份钥匙”,即使主程序坏了还能救回来。
能不能用代码读取 ROM 内容?
在嵌入式开发中,可以直接访问 ROM 地址空间。例如在单片机程序中:
const char welcome_msg[] = "System Ready!";
// 这个字符串默认存储在程序存储区(ROM)
void print_welcome() {
printf("%s", welcome_msg);
}
像这样的常量数据会被编译器自动放到 ROM 区域,节省运行内存。
小贴士:日常使用中需要注意什么?
普通用户一般不用操心 ROM 的管理。但要注意别乱刷固件,尤其是网络设备和老式工控设备。一旦把只读区域的关键程序搞丢了,维修成本可能比换新还贵。家里路由器升级时,记得保持通电、别中途关浏览器,稳妥第一。