通常,闪存通过SPI(串行外设接口总线)连接到处理单元,例如ARM内核或微控制器。


如何转储存储器?
可以有保护机制吗?
有陷阱要避免吗?


评论

这个问题太笼统了。访问SPI闪存实际上是微不足道的。而且,如果您需要更多详细信息,则应参考设备的数据表而不是stackexchange。如果您对特定设备有疑问......可能会更容易回答。

这对您来说可能是微不足道的,但对其他人而言却并非微不足道。对于某些人来说,这是他们第一次这样做,他们正在寻求指导。为什么在此RE问答网站上没有一些一般性提示?转储闪存是硬件倒车的常见任务。因此,可以将其指向BusPirate或Arduino代码来完成。我的问题是尝试让硬件更多地曝光。

然后,他们应该在EE stackexchange上询问。没有理由就RE上最有可能清楚记录的内容提出问题。如果有人确实询问有关特定设备的问题,那么他们将被欢迎这样做,否则,问题实际上会变成数据表列表!

EE人员经常在实验室中使用特殊的硬件,并且确切地知道他们正在处理哪些芯片。简而言之,它们不一定在类似条件下运行。从RE的角度来看,答案会很有用。

我认为这是一个相对较好的问题-可以提出一些要点,例如就地读取或删除,读取全部内容与使用中的嗅探。

#1 楼

尽管我认为问题过于笼统,并且我同意@ cb88的要求,以便数据表可以为您提供所有您需要了解的信息,但我将尝试回答一些问题。

如何转储内存



拆焊

第一种选择是从板上拆焊芯片。完成此操作后,您有2个选择


使用诸如支持您芯片的Dataman(价格昂贵的解决方案)。
或使用廉价的基于微控制器的解决方案,例如Bus Pirate,Ardunio或编写自己的自卸车(通常不太难)。



电路中

当您无法或不想移除芯片时,您又有两个选择。


第一个方法是再次使用专业程序员或上述廉价的基于微控制器的程序。回答第三个问题时,我肯定会介绍这种方法的一些缺陷。或者,您可以监视SPI线并使用逻辑分析仪或微控制器对信号进行解码。缺点是您无法控制正在读取的地址,因此必须以某种方式生成SPI Flash的活动,然后根据要访问的地址来重建Flash映像。



您还可以使用设计用于将分析仪连接到系统内芯片的夹子。

通常,我真的建议拆焊芯片。它们几乎(如果不是总是)边缘封装的(例如,在封装的外部具有清晰可见的引脚),而不是球栅阵列(BGA)的封装。这使它们易于拆卸,也易于放回原处。它将避免您在下面的陷阱一节中描述的可能遇到的头痛。

保护机制


OTP存储器其中一些芯片可以包括一次性可编程(OTP)存储器,其中存储了保护位。我只看到这用于锁定区域以防止写入,而不是防止读取。否则,拥有闪存的意义何在?
加密我从未见过,也无法很快找到任何提供加密的SPI闪存芯片。通常,这是在片上系统(SoC)端的内存控制器中实现的,该控制器可以即时执行该操作,从而使其对主机CPU保持良好且透明。

要避免的陷阱
< br某些注意事项;


我几乎没有很好的经验,尝试在使设备保持在线状态下转储内存。有各种原因可能导致此错误。


主机处理器在运行自己的程序时,使SPI Flash繁忙。
主机侧的看门狗将板复位,因为它的外围设备由于以下原因而无法访问太长时间:您访问它
当您选择自行为芯片供电时,如果同一电源轨上有多个组件,则您的编程器/阅读器可能无法提供足够的电流



如果您要编写自己的嗅探器,请确保它可以足够快地对信号进行采样。例如,总线盗版在所有情况下都会失败,因为它只能在最大〜32MHz采样,而SPI闪存的分配从40 + MHz开始。因此,您至少需要将目标速度提高一倍(采样定理)。

闪存设备可以以高达100 + MHz的各种速度工作,这与各种模式有关(正常读取,快速读取,双模式)。读取,四重读取等)。这种模式不仅会改变速度,还会改变数据的传输方式。例如,在四读取模式下,闪存使用SI / SO / WP / Hold信号一次输出4位比特,而不是“经典”模式,在这种模式下,每个时钟周期从SO(串行输出)读取1位。

充当主机时,只需确保提供足够的功率,并且信号在适当的时间处于高/低状态。所有这些信息都可以在闪存芯片的数据表中找到。


评论


我首先要看看是否只能将处理器保持在复位状态,然后才扫描出spi端口。可以将其强制为高z值时,无需拆焊整个芯片。另一个注意事项是,看看clk / SDI / SDO引脚上是否有零欧姆/ 100欧姆串联电阻,如果有的话,将其删除,然后用探头更换。但是好的评论……只是一些其他需要考虑的事情。

–frunk420
2013年9月17日在8:39