又是好久没更新博客啦,其实最近一直在做一些折腾项目。本来是在玩路由器,然后刷机刷挂了,就想起来了买过来好久也没用的 Bus Pirate,之后用 Bus Pirate 作为芯片的编程器成功复活了路由器,虽说最后是把路由器复活了,但是中途踩了很多坑,所以记录下方便自己也方便后人。

首先啥是 EEPROM?

EEPROM 英文叫“electrically erasable programmable read-only memory”,直译呢就是“电子擦写可编程只读内存”,与其相对的是 EPROM(erasable programmable read-only memory)还有 PROM(Programmable read-only memory)。虽然它们叫“内存”,但是别搞错了,它们在断电之后并不会丢失数据(非易失),所以如果还是不太理解德话,你可以认为它们为“硬盘”。

他们有啥区别?

最容易分辨的是 EPROM,就它长得不一样,因为要擦除 EPROM,就需要将其放在紫外线灯下照射一段时间(大概 1 – 2 小时左右),所以它有一个透明的位置用于接收紫外线。

之后就是 PROM,这个应该是最原始的或者那种生产之后再也不修改内容的芯片,因为它只能被编程一次。至于为什么只能被编程一次,这就是物理方面的话题了。

一个空白的 PROM 所有的 bit 都为 1,当你编程它的时候就把 bit 为 0 的地址的保险丝烧断,这样被烧断的部分就读取出来为 0 了。由于编程是把保险丝烧断,所以这是一个不可逆的过程,所以它只能被编程一次(较真的朋友会想物理上再接上让它再复原,虽然理论可行,但是这会是一个非常非常非常昂贵的操作,还不如买个空白的新的)。

一般 PROM 用于游戏卡带等以后不需要修改的产品中。

最后是 EEPROM,也就是本文的重点部分了。

EEPROM 多用于路由器、机顶盒、手机之中,因为它需要被可以很容易的修改。不然路由器每次插上电就要重新设置一次,机顶盒重启一次就要重新搜台,手机换电池什么都没了谁受得了。

EEPROM 可以通过指令来进行各种操作,如开关写保护(通过电路 + 或 – 来给指令),写模式、读模式等。

路由器的固件和用户的设置是存放在 EEPROM 中的,如果路由器刷机刷坏了就类似于电脑操作系统弄坏了,无法启动。

要读写它,首先就需要确定哪个是 EEPROM,下面是一个路由器的版面图。

而这个路由器上的 EEPROM 芯片就在左上方的 8 pin 芯片上。

如果没有经验的话可能无法一眼看出哪个是 EEPROM 芯片,这时可以用最简单的方法:查芯片编号。

如果仔细看那块芯片的话,可以看到上面写的是“F16-100HIP”,之后 Google 搜索一下就能搜到 Data Sheet,然后就会发现这是“16 Megabit Serial Flash Memory with 4Kbytes Uniform Sector”,就是这块了。

然后利用测试夹夹住芯片,测试夹应该会有个红色的线(如下图),红色的线就是对着芯片的一个带圆圈的角上(如下图)。

夹好之后是这样的:

芯片这头弄好之后该连接它到 Bus Pirate 了,将豁口对着左面,红线应该在上面。

Pinout 应该是:

8   1

7   2

6   3

5   4

如果不确定的话用万用表测量一下母头与夹子的位置关系。

然后按照如下方式连接:

母头 Pin -> Bus Pirate

1 -> CS

2 -> MISO

3 -> +3.3V Write Protect(ed)

4 -> GND

5 -> MOSI

6 -> CLK

7 -> +3.3V

8 -> +3.3V

关于 Pin 3,是写保护,每个芯片的行为可能不一样,有的是连接到 3.3 V 是写保护,有的是连接到 GND 是写保护,具体需要看 Data Sheet。

连接好之后执行命令:
flashrom -p buspirate_spi:dev=/dev/ttyACM0

其中的 ttyACM0 是当前设备的,用 dmesg 就可以看到。

可以看到目前芯片已经检测到了,是“EN25F16”型号的。之后就可以用 -r 指令读取或 -w 指令写入了。

踩过的坑:

  1. 夹子触点接触不良,这会导致检测不到芯片,晃晃或者看下触点齐不齐,不齐的话拌齐。
  2. 一用 Flashrom 就会导致 Bus Pirate disconnected,这是 Bus Pirate 固件的 bug,需要升级到 6.2 或以上版本的固件。

Leave a Reply

Your email address will not be published.

*

code