使用 SPANSION FL016KIF 的 SPI 转储闪存

逆向工程 硬件 尖峰
2021-06-12 10:14:52

我在板上有一个SPANSION FL016KIF(第 12 页的引脚排列),我想转储数据。为此,我尝试使用BusPirate v3

我想在电路中进行此操作。我没有连接 WP# 和 HOLD#。

在此处输入图片说明

这是我用来设置它的命令脚本(我也尝试了其他变体):

HiZ>m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. LCD
9. DIO
x. exit(without change) 
(1)>5

Set speed:
 1. 30KHz
 2. 125KHz
 3. 250KHz
 4. 1MHz

(1)>3
Clock polarity:
 1. Idle low *default
 2. Idle high

(1)>1
Output clock edge:
 1. Idle to active
 2. Active to idle *default

(2)>2
Input sample phase:
 1. Middle *default
 2. End

(1)>1
CS:
 1. CS
 2. /CS *default

(2)>2
Select output type:
 1. Open drain (H=Hi-Z, L=GND)
 2. Normal (H=3.3V, L=GND)

(1)>2
Ready
SPI>W
Power supplies ON

这是我尝试执行的指令,它应该获取一些设备信息:

SPI>[ 0x9f r:4]
/CS ENABLED
WRITE: 0x9F
READ: 0x00 0x00 0x00 0x00
/CS DISABLED
SPI>

不幸的是我只得到零READ: 0x00 0x00 0x00 0x00如何确定 SPI 的正确设置?还有其他陷阱吗?

3个回答

板子通电了吗?显然,芯片需要电源才能读出。在它仍在板上时执行此操作的问题在于其他逻辑可能同时尝试访问您的芯片。

我只能建议将它从板上取下并使用您的编程器为芯片供电(我不知道总线海盗是否能够这样做)。我过去通过 SPI 读取了一些芯片(使用 dataman 程序员),但从未在板上工作时让它工作。作为一名非电子专家,我希望电路板上有一些东西可以在您希望它们交替时将芯片的某些引脚保持在 0 或 1。这可能是由于电路中某处的一些上拉/下拉电阻或类似的东西。

看看这是一个边缘封装的芯片,用基本的焊接技能去除它应该不会太难。尤其是看到您已经能够在其上焊接电线。如果您以前从未删除过一些,那么我可以说的是;加热 1 边上的针脚,然后将一些镊子推到芯片下方以抬起 1 边的芯片。然后在另一边重复。这些包装非常灵活,不会弄坏您的针脚。只是不要夸大提升;)

首先,我建议确保将 HOLD# 引脚拉高。如果不是,则芯片处于“暂停”状态,您将无法从中读取。

我在电路中丢弃了几个 SPI 芯片,我遇到的最常见的问题是芯片供电的电源轨在 PCB 上也可能为其他组件供电。这带来了两个潜在的问题:

  1. 您的电源可能无法提供足够的电流来为电源轨上的所有设备供电,因此您没有为 SPI 闪存芯片提供足够的电源,

  2. 即使你能提供足够的电源,电路的其他部分也可能试图与 SPI 芯片通信,这显然会导致问题。

我对此的解决方案是小心地拆焊电源引脚(引脚 8)并将其向上弯曲,使其不接触焊盘。这样您就可以只为闪存芯片供电,而不能为电路的其余部分供电。

最后,有时板上的其他组件会干扰与闪存芯片的通信,因此如果仍有问题,您应该拆焊整个芯片。正如@justsome 提到的,这实际上并不困难,尤其是对于这些 IC 封装。

Flashrom 项目对 SPI 芯片的ISP(在系统编程)有一些建议例如:

通常芯片组的一部分是部分通电的(通过闪存芯片的 Vcc 引脚提供的电压)。在这种情况下,断开 Vcc 与编程器的连接,并使用其正常的 PSU 为其供电,然后尝试正常为电路板供电并将其保持在复位状态(例如,使用跳线而不是复位按钮)。

尝试该页面上给出的提示。