ESC
科技 3 分钟阅读

修复一台变砖的Framework笔记本

用户遵循Framework官方建议更新BIOS后笔记本变砖,售后因过保拒绝免费维修,只建议花500多美元换主板,且未提供维修文档或BIOS镜像。作者自行研究并购买CH347编程器和弹簧针探针,绕过焊接困难,通过flashrom工具成功从外部刷写BIOS芯片,并分享了完整操作流程。同时文中还披露了Framework数据泄露事件。

来源:Hacker News

我们这里用的是E型号,也就是WSON 8×6 mm芯片。从数据手册中可以看到它的原理图:

Winbond 25R256JWEQ芯片引脚原理图

同样非常重要的是要注意芯片左上角的白色圆点,如图所示,在引脚原理图上也有标注。这个圆点位于芯片的1脚旁边,用于确定方向。如果你把芯片旋转180度,把VCC接到GND上,就会发生非常糟糕的事情。

现在,你可能想知道:什么是WSON?它其实是Very, Very-thin Small Outline No-lead的缩写,是一种芯片封装形式。我猜VVSON听起来太傻了,所以他们叫它WSON。这几乎是外部刷写最糟糕的封装形式。

如果Framework使用SOIC(小外形集成电路)封装,那么就可以用夹子夹住芯片进行刷写,但WSON封装基本上没有任何可夹持的地方。相反,我们只能选择以下两种方式:

弹簧针探针由一块塑料组成,塑料上有一个正好容纳WSON芯片尺寸的凹槽。凹槽周围是穿过塑料的弹簧针。使用弹簧针探针时,塑料应朝下,芯片应嵌入凹槽中。然后施加向下的力,使弹簧针穿过塑料并与焊球接触。在刷写的整个过程中必须保持这个向下的力,否则数据会被损坏。

在BIOS刷写帖中,用户们用各种重物来在刷写期间保持接触。可惜,我家里没有随手可得的重陶瓷物件,所以实际上我必须手动按住弹簧针。这使得刷写必须快速完成,你们稍后会看到后果。

另外注意到BIOS芯片周围的白色线条了吗?这在PCB术语中称为“丝印层”,标记了元件可以安装的位置。从形状来看,这块主板上本来可以焊接一个可更换BIOS芯片的插座,那样我就可以:

然而,这个号称“可维修”的笔记本公司再次选择关闭维修途径。

此外,板上显然有空间放置一个连接到BIOS芯片的刷写排针接口,我本可以用一排跳线(有时称为“杜邦”线)直接连接,而不是用弹簧针。由于M.2插槽的高度,也有足够的垂直空间。Framework再次选择了对用户不友好的方案。

现在我们了解了BIOS芯片,并且知道必须用弹簧针探针连接它,接下来该讨论我们用什么来与芯片通信并编程。

由于我们想要一个集成良好的方案,购买一个通过USB工作的刷写器是合理的。有几个常见的选项,各有优缺点。我将在这里介绍其中一些。

这可能是最受欢迎的选项,也是那个Framework论坛帖子里大多数人使用的。在AliExpress上非常便宜,写这篇文章时单独购买只需3美元,是一个非常实惠的选择。CH341A芯片本身支持3.3V和5V,所以要将其用于1.8V设备(如Winbond 25R256JWEQ),我们需要使用1.8V电平转换器。

不幸的是,正如论坛用户@jim_m在帖子中指出的,廉价的CH341A mini编程器,特别是那些黑色PCB的,在数据引脚电压上有问题。虽然它们会以3.3V为芯片(或电平转换器)供电,但数据引脚仍保持5V,这对连接到它的任何设备都不太友好。不过,许多其他用户报告说没有问题。为了彻底解决这个争论,考虑到它这么便宜,我决定自己买一个来测试。

到货后,我按照这篇博客的说明把它接到万用表上,该博客包含无焊接修复此问题的说明,以及检查问题是否存在和是否已修复的方法:

万用表测量CH341A mini编程器上MOSI和MISO引脚的电压,预期应为3.3V

好吧,看来黑色PCB版本确实有问题。

有观点认为带5V、3.3V、2.5V和1.8V电压开关的CH341A版本没有这个bug。同一个视频声称1.8V电平转换器无论如何都会把数据引脚上的5V转换到1.8V,但我不确定是否相信这一点,也不知道这对电平转换器的健康是否有好处。

我选择不进一步实验,因为CH341A还有另一个主要缺点:速度。从Winbond 25R256JW系列的数据手册中可以看到,其SPI时钟最高为133MHz。然而,根据网上找到的资料,CH341A最多只能做到1.7MHz,甚至可能更慢。论坛帖子里的人报告说,读取大约需要5分钟,写入32MiB的BIOS芯片还需要另外5分钟。我当然完全不想按住弹簧针探针那么久。

CH347是一款较新的编程器,是CH341A的精神继承者。凭借15MHz的SPI时钟,它编程芯片的速度比CH341A快得多。编程器上的插座应该与CH341A兼容,可以直接替换。不幸的是,它的文档很少。尽管如此,我还是拼凑出它是一个3.3V设备的信息。10

到货后,我确认它的数据引脚发送的是3.3V,不像CH341A:

万用表测量CH347编程器上的MOSI和MISO,显示数据引脚为预期的3.3V

这当然让人放心得多。有了更快的刷写速度,我也不需要按住弹簧针那么久,这在我看来是个胜利。这就是我打算用于这个项目的编程器。

帖子里有一位用户报告说使用XGecu T48编程器成功了。然而,在看到超过100美元的价格标签后,我立刻认为这对这次维修来说太贵了。

带着对所需求物品的了解,并且不指望Framework会修复我的系统,我决定直接在AliExpress上下单买零件,因为送货需要一段时间。最终,我选择了购买以下零件:

这总共花费了20.41美元。注意,为了达到这个价格,我不得不买了一些其他无关的、反正我也打算买的东西。

还要注意,我买CH341A是为了看看新的黑色版本是否仍有电压bug;这并不是这个项目真正需要的。如果只买电平转换器,我可能还能省些钱,因为那才是我真正需要的CH341A套件里的唯一部件。写这篇文章时它在同一个列表里卖2.23美元。不过,我觉得其余零件以后也许能派上用场。

另外注意,我并不急需这台笔记本电脑,所以愿意在AliExpress上省点钱,虽然知道需要1-2周才能送达。如果你急需修复笔记本,也许Amazon Prime的当日达会更吸引人,虽然自然会更贵。

在我做完所有这些研究后,Framework终于回复了我,让我拔掉充电器,让电池耗尽,然后再次尝试开机——这正是我之前做过的,但笔记本无法开机。我的笔记本此时正式“变砖”了——也就是说,它实际上是一块非常昂贵的砖头。

所以我告诉了Framework这些情况,他们要求提供一堆信息,并提供了一些故障排除步骤。以下是我的回复:

你之前用的是哪个BIOS版本,更新到哪个版本?(例如:从BIOS 3.09更新到BIOS 3.18)

我不记得了,但我相信我之前是3.18。我知道是更新到3.20。

你要更新的BIOS版本是Alpha、Beta还是Stable版?(如果从我们的知识库下载,则是Stable版。如果从社区论坛下载,标题中会说明是哪个版本)

这应该是稳定版BIOS,虽然是从LVFS下载的。

你的设备尝试开机时显示什么闪烁代码?(如果能够录制视频并分享给我们,将非常感谢)

已附上视频(blink.mp4),压缩到144p以节省空间。在我看来,是12次绿色闪烁,1次红色,1次绿色,1次蓝色,1次绿色,2次蓝色,8次绿色,2次蓝色。

你能给我们分享一张主板正面的照片吗?

你能给我们发一张笔记本电脑合上盖子时所有侧面(左、右、上、下、前、后)的照片吗?参考下图。

我照做了。没有变化,闪烁模式相同。

我不会在这里重现附件,但可以说,笔记本外观看起来没有问题。

Framework随后在2026年8月7日05:49 EDT回复:

感谢您的回复和发送的照片。我们很感激。

经过对此问题以及提交的照片/视频的全面审查,我们得出的结论是需要更换主板。

很遗憾,由于您的保修期已经结束,我们无法提供替换件。

我们建议您在市场购买替换件。

您可以查看我们的保修和销售条款。

Framework保修 - https://frame.work/warranty Framework销售条款 - https://frame.work/terms-of-sale

我们知道这有点令人失望,我们为给您带来的不便深表歉意。

如果有其他我们可以协助您的事情,请随时联系我们。

谢谢您的理解。祝您有美好的一天!

此致,

Framework支持团队

所以基本上,在被Framework鼓励更新BIOS之后,Framework告诉我因为保修已过期,我没有其他选择,只能丢弃整块主板,包括完全正常工作但焊死的CPU,并花500多美元在他们商店买替换品。

一块零售价5美元的BIOS芯片上的一些坏数据,怎么就迫使我花500多美元买一块全新的主板和CPU?尤其这还是发生在Framework自己的指示下?尤其是有很多用户在Framework官方论坛上抱怨,却没有采取任何措施来阻止更多的变砖案例?

最糟糕的是,Framework没有提供任何自行尝试维修的帮助,没有文档,没有原理图,甚至没有原始BIOS镜像让我尝试外部刷写。维修权真是徒有虚名……

雪上加霜的是,在我与支持人员互动期间,我还收到了以下来自Framework的电子邮件:

发件人: Framework <support@frame.work>

主题: 有限数据泄露通知

日期: 2026年8月6日23:04 EDT

我们写信通知您,我们的商业智能数据库提供商Metabase发生数据泄露,导致攻击者获取了客户姓名、电子邮件地址、电话号码和地址。您的信息包含在此次泄露所访问的数据库中。此次泄露不包括订单或支付信息。

我们在下面提供了事件的完整详情。对于此次信息泄露,我们深表歉意,并且正在审查和改进我们与外部数据库供应商的数据存储方法。

我们也在通知各相关地区有相关法规的监管机构。请注意,虽然大多数地区的法规不要求就姓名、电子邮件地址、电话号码和地址的泄露进行通知,但我们无论如何都会发送这封邮件,以确保您知情并可以采取任何必要行动。

2026年8月6日上午9点太平洋时间,Metabase通知我们他们的系统遭到入侵,邮件内容如下:

8月3日星期一,我们发现Metabase Cloud遭到攻击,攻击者利用了1.58及以上版本中一个未知(“零日”)安全漏洞。我们立即封锁了攻击所用的端点,然后迅速识别并修补了该漏洞。我们已通知执法部门,并聘请了第三方取证公司进行独立调查。

您的Metabase实例容易受到此零日漏洞的影响。因此,为了保护您的公司,我们建议您:

我们还发现攻击者能够访问您的实例。我们创建了一份报告,说明我们认为攻击者在您的实例上执行的操作,包括日志文件,您可以从Metabase Store获取此报告,网址为[已移除网址]。

(如果您无法访问Metabase Store、在获取报告时遇到问题,或者不想点击意外邮件中的链接,您可以直接登录您的实例,然后通过右上角网格菜单中的“帮助>获取帮助”联系我们。我们将确认此消息来自我们,并通过电子邮件将报告发送给您。)

此报告基于我们自己的应用程序日志。我们没有查询或读取您连接的数据库中的数据。

根据您运营所在的司法管辖区以及您的实例连接的数据类型,您可能根据适用法律负有通知义务。如果您对此有疑虑,我们建议您与公司的法律或合规专家一起评估潜在的通知义务。

我们对此事可能给您带来的不便深表歉意,并在此为您提供支持。如果您有疑问,请回复此电子邮件或发送邮件至[已移除邮箱地址],我们将尽快回复您。

Sameer Al-Sakran

创始人兼首席执行官

Metabase

我们立即调查了Metabase提供给我们的日志,并确认我们的数据库实例确实被攻击者访问了。我们确认以下信息被访问:

对于Framework for Business客户,我们正在调查以下信息是否也可能被访问:

没有其他个人身份信息、订单信息或支付信息被访问。

请注意,Metabase还标记了:

重要提示:这是基于我们当前知识的初步更新。

我们正在与第三方取证调查公司合作,以了解事件的完整性质和范围。

我们在完成调查之前向您提供此临时更新,以便您更好地了解任何潜在影响并保护您的数据。

我们的调查正在进行中,现在分享的信息是初步的。

请查看zip文件中的应用程序日志以及执行的查询,它们作为单独的文件提供,以获取详细活动和潜在时间线。

我们同时通知您此次泄露,以确保您能尽早知情。如果Metabase通知我们额外的对您有影响的信息,我们将发送后续邮件。

在收到Metabase的泄露通知后,我们轮换了与Metabase实例关联的所有数据库的凭据,并确认管理员访问权限或Metabase之外系统的访问没有变化。

您采取了哪些步骤来确保今后不再发生这种情况?

我们正在评估与商业智能平台共享的数据的广度和深度,并将其访问范围缩小到仅分析所需的列。

好吧,我想至少Framework披露了这一安全事件,而不是掩盖它,这是好事?但话说回来,如果监管机构发现发生了这件事而没有披露,他们会非常不满……

尽管如此,我非常失望Framework选择将敏感信息托付给一个显然无法保护数据安全的第三方。这件事与我昂贵的笔记本电脑变砖同时发生,简直是在伤口上撒盐。我现在对Framework的失望难以言表。

顺便提一下,Framework表示支付信息没有被泄露。大多数人可能会松一口气,但事实不应如此。由于我用信用卡支付,即使Framework泄露了我的完整信用卡号11,我因这次泄露产生的任何欺诈交易的责任也将是零。我只需给信用卡公司打个电话,他们就会给我一张新卡。更令人恼火的是他们泄露的那些我无法轻松更改的信息——电话号码和地址,除非我愿意搬家……不过,Framework值得肯定的是,他们如实陈述了事实,没有像某些不诚实的公司那样把支付信息未被泄露当作救命稻草来粉饰。

无论如何,现在我们有了刷写BIOS的工具,而Framework甚至不愿意提供原始BIOS镜像,我们必须确定刷入什么来拯救BIOS。

从BIOS刷写帖中,用户@David_Henry通过阅读BIOS和实验刷写确定,原始BIOS镜像恰好是32MiB,从Framework的UEFI shell更新包中.cap文件的偏移量1993293处开始,这与GitHub上一个名为InsydeH2O-extractor-2的第三方工具创建的输出相同。

由于硬编码偏移量不太可能适用于未来版本,我建议使用提取器工具。不幸的是,该工具是为微软的C库编写的,使用了像fopen_s这样的非标准函数,导致它无法在Linux上运行。为了解决这个问题,我fork了这个工具,并让它能在Linux上编译。

你可以这样构建并提取.cap文件:

git clone https://github.com/quantum5/InsydeH2O-extractor-2.git cd InsydeH2O-extractor-2 cmake . make ./extractor /path/to/bios.cap

在目录中,你会找到BIOSFILE.FD,这就是要刷写的文件。

对于Framework 13英寸AMD Ryzen 7040系列BIOS 3.20版本,我已经准备好了镜像:https://dl.quantum2.xyz/firmware/framework-3.20-bios.bin

欢迎使用我的镜像,但请先验证其完整性。在撰写本文时,至少有四位用户从我服务器下载了完整BIOS镜像,大概是因为他们的笔记本电脑也变砖了,但没有在Framework论坛上写出来。

在AliExpress下单八天后,零件终于到了。我开始检查我的AliExpress刷写器,你们已经看到了。CH341A除了慢之外还有电压bug,所以我决定只在修复电压bug后作为最后手段使用。相反,CH347看起来很有希望。

我把1.8V电平转换器插入我的CH347,并验证数据引脚确实输出了预期的1.8V,以防万一。我还用万用表检查了弹簧针探针的连通性,确认每个弹簧针都正确连接到排针上编号正确的引脚。虽然这些预防措施看似极端,但你永远不知道AliExpress上买到的东西会怎样。

无论如何,我对我的工具很满意,所以决定继续。

现在,我只需要把所有东西连接起来,让我的PC通过CH347刷写器与BIOS芯片通信。

由于我是从台式机编程,我选择了一条USB Type-A延长线(即公对母),这样CH347刷写器就不必锁定在一个USB端口上。

现在,我们需要了解CH347的引脚。经过一番研究,很明显25型SPI NOR闪存的引脚顺序总是相同的,包括我们的W25Q256JW,而这正是CH347左侧设计所接受的:

CH347编程器上每个SPI NOR闪存引脚应放置位置的示意图

如果你仔细看右下角,会看到两个芯片的示意图,一个标着25,另一个标着24,描述了这种引脚排列。它的意思是25型芯片放在左边,1脚在右侧,如右侧的半圆所示。24型芯片,即I²C串行EEPROM,放在右边,但这个项目不需要。

但那个插座是什么?那是一个零插入力(ZIF)插座,设计用于接受排针。一旦插入引脚,杠杆可以拉到水平位置以锁定引脚。其机制与PGA CPU插槽(如AM4)非常相似。

虽然某些带引脚的芯片可以直接插入编程器,但我们的情况并非如此。无论如何,我们有一个3.3V编程器和一个1.8V芯片,所以我们需要将电平转换器插入CH347:

1.8V电平转换器上每个SPI NOR闪存引脚应放置位置的示意图

电平转换器顶部有一个带标注引脚的排针,引脚在下方。这些引脚需要插入CH347上ZIF插座的相应孔中,如上所述。

转换器提供了另一个1.8V的ZIF插座。这次只使用插座的右侧,1脚朝右。如果你仔细看转换器,引脚实际上就标注在PCB上ZIF插座旁边,但在图片中很难看到,所以我直接标注了它们。

下一步是插入弹簧针探针。它看起来像这样:

WSON8 6×8mm弹簧针探针图片

扁平电缆需要通过另一侧的排针连接到PCB。引脚编号在扁平电缆一侧。排针需要插入电平转换器上的ZIF插座,并锁定ZIF插座。

现在,你可以将探针连接到BIOS芯片了。在此之前,先打开Framework笔记本,从主板上取下昂贵的RAM和SSD,以防万一搞砸了意外烧坏它们。在此说明,请仔细检查所有连接,确保引脚顺序在任何地方都正确。一个错误就可能烧毁芯片,甚至更糟,烧毁整个主板。

CH347、电平转换器和弹簧针探针的完整组装应该看起来像这样

现在,找到弹簧针探针塑料上带有不透明半圆的一侧。那是1脚所在的一侧,你需要确保该侧与芯片上的白色圆点位于同一侧。这才是正确的引脚顺序。刷写时,将探针放在芯片上并施加力将其按住:

弹簧针探针在BIOS芯片上的使用方式

我们将使用来自coreboot项目的flashrom工具进行刷写。请注意,与Windows上需要这些编程器的驱动程序不同,flashrom可以通过libusb与所有支持的USB编程器通信。

请仔细检查你的刷写器是否被系统上的flashrom版本支持:

`$ sudo flashrom -L … Supported USB devices for the ch341a_spi programmer: Vendor Device USB IDs Status Winchiphead (WCH) CH341A 1a86:5512 OK

Supported USB devices for the ch347_spi programmer: Vendor Device USB IDs Status QinHeng Electronics USB To UART+SPI+I2C 1a86:55db OK QinHeng Electronics USB To UART+SPI+I2C 1a86:55de OK … `

我们看到CH341A和CH347都受支持。如果你的系统上没有,你可能需要更新版本的flashrom。

还要注意,你需要用一只手按住弹簧针,而CH347相对较快的刷写速度,这可能比试图用重物施加必要力更好的策略。因此,强烈建议你在Linux上使用主选择功能来复制这里给出的命令:选中文本(尝试三击),然后用中键粘贴,单手操作要容易得多。

类似地,准备BIOS文件并将其命名为wanted.bin。然后计算其哈希值:

$ sha256sum wanted.bin a645413ee19c7cf287917a717099883ea37ed6b556c74cf31adbc5b1afcc9c05 wanted.bin

现在,将弹簧针探针(记住方向!)按到芯片上,检查它是否被识别:

`$ sudo flashrom –programmer ch347_spi flashrom 1.4.0 on Linux 6.12.101+deb13-amd64 (x86_64) flashrom is free software, get the source code at https://flashrom.org

Found Winbond flash chip “W25Q256JW” (32768 kB, SPI) on ch347_spi. … `

很好,被识别了。如果没有,确保探针位置正确,并根据需要施加更大的力。要获得良好连接需要相当大的力。如果你连接不良,我建议逐渐增加施加的力。

现在读取BIOS芯片的当前内容。由于连接有些不可靠,你很可能遇到读取错误,因此建议多次读取,直到至少两次读取(最好是连续)得到相同的哈希值:

sudo flashrom --programmer ch347_spi -r read-v1.bin --progress && sha256sum read-v1.bin sudo flashrom --programmer ch347_spi -r read-v2.bin --progress && sha256sum read-v2.bin sudo flashrom --programmer ch347_spi -r read-v3.bin --progress && sha256sum read-v3.bin sudo flashrom --programmer ch347_spi -r read-v4.bin --progress && sha256sum read-v4.bin sudo flashrom --programmer ch347_spi -r read-v5.bin --progress && sha256sum read-v5.bin sudo flashrom --programmer ch347_spi -r read-v6.bin --progress && sha256sum read-v6.bin

就我而言,我在第1、4和5次尝试中得到了相同的哈希值,之后我就停止了。我保持探针在完全相同的位置,因为连接良好,这将确保后续步骤有最大的成功机会。

如果没有任何尝试得到相同的哈希值,你需要对探针施加更大的力并重试。另外,虽然我没有计时,但估计每次读取尝试在CH347上不到20秒。

非常重要的是要有一个当前BIOS芯片内容的好副本,因为它可能包含以后可能有用的信息。你很快就会发现BIOS芯片中还存储了哪些你可能想恢复的其他信息。请将成功读取的BIOS文件安全保存。

现在,是时候写入芯片了。由于连接的不可靠性,我关闭了-nN验证,这样我可以在之后有空时验证,而不是在写入和验证期间一直按住探针:

`$ sudo flashrom –programmer ch347_spi -nNw wanted.bin –progress flashrom 1.4.0 on Linux 6.12.101+deb13-amd64 (x86_64) flashrom is free software, get the source code at https://flashrom.org

Found Winbond flash chip “W25Q256JW” (32768 kB, SPI) on ch347_spi.

Reading old flash chip contents… [READ] 1% complete… [snip] [READ] 100% complete… [READ] 50% complete… [READ] 0% complete… [READ] 100% complete… done. [READ] 0% complete… Erase/write done from 0 to 1ffffff `

此时,刷写已完成。对我来说,这次刷写操作不到一分钟。CH347绝对比CH341A值得。考虑到外部刷写是在如此不稳定的连接上、用仅支持芯片最大SPI时钟11%的编程器进行的,速度还这么快,我不禁想知道Framework的BIOS更新程序在做什么,使得正常更新BIOS需要几分钟……

现在,通过执行与读取相同的操作,但写入不同的文件来进行手动验证:

sudo flashrom --programmer ch347_spi -r verify-v1.bin --progress && sha256sum verify-v1.bin sudo flashrom --programmer ch347_spi -r verify-v2.bin --progress && sha256sum verify-v2.bin sudo flashrom --programmer ch347_spi -r verify-v3.bin --progress && sha256sum verify-v3.bin

直到得到与之前wanted.bin相同的哈希值。我第一次就通过了验证。如果三次尝试后还不行,再次写入直到验证通过。

刷写完成后,我把RAM和SSD装回去,给Framework笔记本通电。经过大约一分钟的内存初始化(或类似过程),它终于启动了。然而,这出戏还没完全结束。