This is a 3rd laptop I got for repairs in our Hackerspace, it's apparently caused by Windows Update which tried to flash the BIOS chip and fails during the operation resulting in corrupted/malfunctioning data on the NAND chip used by the firmware for system initialization.
Lenovo apparently foresaw this issue happening and put 2 footprints on the PCB for 2 NAND chips, but only populated one.. cheap fucks! If they populated both this issue could have been prevented..
Pro Tip: If you don't want to do this kind of work or want to be supervised to make sure you don't damage anything then consider looking for your local hackerspace at https://wiki.hackerspaces.org and joining their community chat or contacting them on social media to ask if they can help you with it.
I am from Base48 Hackerspace in Brno, Czech republic and I would have done this kind of repair for free when I have time, make sure to show them this document, optionally if you message me i can do this often for free by you just paying shipping.
- Linux System
You will need flashrom
utility and root
permissions.
You don't need to modify it from 5V or whatever bullshit people tell you on the internet it's fine i've used this one to flash over 40 devices and all of them are OK and without any issues.
- Reflow station
You can't use the SPI Clamp as the chip is too short to hold on.. Those work only on chips that are higher e.g. those found in Lenovo X230.. Fuck Lenovo again for using chips that are this thin..
- Flux
Without this heating the chip will take a lot of heat and you will increase your risk of delaminating the board or ripping the pads significantly.
BTFO-81-1 works great for this application
- Solder paste
I use the OLK soldering paste that works without issues for me and has stable shelf life for hackerspace environment:
https://www.aliexpress.com/item/1005005438798142.html
Anything that's 25-45um should be okay, but beware of the melt temperature..
e.g. the following:
Is going to make your work much harder or even impossible as it's meant to be used for high temperature applications and lenovo are cheap bastards and use the cheapest PCBs possible which degrade under too much heat (fuck you lenovo.. it's like 0.2 EUR per board added for proper TG..)
You can also use a soldering wire.. just please don't try to remove the chip by using soldering iron it's stupidity..
Make sure you use lead-free solder if you don't want to join the alzheimer's club.
- Capton Tape
To mask the surrounding area so that you can be lazy and do this without removing the whole mainboard
- Screwdriver
You will need torx 5
bit or screw driver, consider getting the Xiaomi Mijia Wiha 24-in-1 Precision Screw Driver Kit to make your life easier.
- Precise Tweezers
To remove the chip from the board
BEFORE YOU START: Make sure you do this in a well ventilated area, do not breathe the fumes!
- Turn off the laptop
- Turn it around, make sure to put pieces of paper on the table so that you can easily manipulate it around without risking scratches to the device
- Remove the screws, make sure to organize the screws so that you know where each of the screw was and can then return it there.. In case you fucked this up then:
X X X - Torx 5 lenght 9 mm
X X - Torx 5 lenght 9 mm
X X X X - Torx 5 lenght 6 mm
^ If you had to use this drawing: Fuck you, learn to do screw organization you might not have this guide the next time and then you will end up with a laptop that looks like a frankenstain that's falling apart.. I have this exact guy doing this and i then have to fix it by getting slightly bigger screws and i hate doing that
- Disconnect the flex cable that goes to the battery:
If you don't do that you could short something during working on the laptop or removing the SPI chip and then good you can either sacrifice your sanity to checking the components without schematics (fuck you lenovo x3) or using thermal camera
- Locate the SPI NAND chip used for system initialization ("BIOS Chip")
^ Mine is removed already
- Tape around the area around the BIOS Chip
Usually you just need a few pieces around the chip and few more to protect the battery from the heat, but if you are a beginner don't be afraid to do this:
^ I've done this to teach a newbie how to solve these issues in our hackerspace cuz people often don't have the experience using hot air station and last thing i want is to wait for new component to arrive..
Be extra careful around alluminium capacitors
if your board has them:
If you heat them up too much they will explode (nothing harmful just annoying loud sound).. When i am doing BGA reflow i put clay around them that then gets clened off with water, izopropyl alcohol and heat pad.
- Remove the "BIOS Chip" from the mainboard
Before you try to reflow the chip to remove it i want you to try this exercise so that you do not rip any pads from the PCB:
Take one of the screws and lay it on a table and then lift it with the tweezers.. this is the amount of force you need to use to remove the chip.. any more and you have high chance if ripping the pads off.. The chip should come out by itself.. if it's not doing then then you are not heating it up evenly enough!!!
All SPI chips have indentation on the chip:
this indicates the PIN 1 which has corresponding arrow on the PCB:
This indicates the orientation of the chip (indent to the arrow), so that you don't mount it backwards.
To remove the chip, start by setting the hot air station on 400C and then blash the chip for ~5 seconds, then use the Flux
and put few drops on each side, don't over-do this so that you don't have to use izopropyl alcohol to clean it up later or be the messy fuck that just leaves the flux behind (don't do that i will find out and will literally kill you i hate when people do this and i will go to jail over it 🔪) and make sure that all the pins are covered.
If you do not pre-heat the PCB like this then the flux won't melt and you will be left with paste that will then melt.. this is an easy way to be less messy..
Then get the hot air above the PCB like 30 cm and do a small spiral slowly all the way down the chip.. this is a great technique for beginners to make sure that they do not overheat the board..
Then solder the chip onto the SPI programmer.. for the one shown above there aren't any marking on the back so this is the correct orientation:
The on Linux system:
# for n in {1..3}; do flameshot -p ch341a_spi -r ./1.bin; done # Make a three backups of the SPI chip using the ch341a_spi programmer
$ sha256sum {1..3}.bin # Compare the files
If the files all have the same checksum you are good to go, if the checksums are different then you have data corruption on read and likely soldered the chip wrong.
DO NOT CONTINUE UNTIL YOU HAVE A SANE COPY OF THE CHIP!!! Cuz it has the serial key and can be used for comparison..
Once you are done with the reading of the flash then disconnect the programmer from the USB so that you are not needlessly stressing it.
- Download the Original BIOS from the manufacturer
The laptop has an S/N
number which can be used on lenovo support site.. For the laptop i am working on right now that ended up being https://pcsupport.lenovo.com/cz/cs/products/laptops-and-netbooks/flex-series/flex-5-14alc05/82hu/downloads/ds549033-bios-update-for-windows-10-64-bit-flex-5-14alc05-flex-5-15alc05?category=BIOS%2FUEFI
But make sure you have the correct BIOS otherwise you will flash wrong one and end up having to repeat the steps with the correct image.
- Extract the bios file
Because Lenovo are stable geniuses they only provide the bin
file inside of a fucking exe
self-extractor (fuck you lenovo!) instead of making this easy and just giving us the bin
file to flash.. So we have to extract it with innoextract
:
$ innoextract /path/to/the/exe/with/bios/image
it will extract bunch of weird files so consider making a new directory for it.. You are then looking for a cap
file e.g. GJCN34WW.cap
in my case.
This is the bin
file that has annoying header and is too big which makes it unusable.. (fuck you lenovo)
- Remove the header from the binary file
You can do this by opening the copy and the extracted file and comparing the result.. On my end it's range of 00000000
to 0000030C
that has to be removed:
Notice the line @9.t....
which means that we want to keep the line 0000030D
and remove everything in front of it:
tail -c +801 GJCN34WW.cap > output.bin # Strip the range 00000000 to 0000030C
0x0000030C = 0x780 (decimal) + 1 = 781 so there should be +781, which is wrong and i used method trial and error to get to +801.. not sure why ask AI if you get stuck and compare the two files. (someone contribute this)
- Locate the windows key bits and copy it over
Even if you use linux you need this bit on there otherwise it might end up in weird behavior..
You have to look for this bit in your original file, in mine it's on 617000h
in my case:
$ hexedit 1.bin # Open the original file
Then press Return
(go to) and go to 00616FFC
and then press Return
(go to) again..
Control+Space
(mark) and highlight below the lines with windows key then press F7
(copy) to copy it
After that you want to open the output.bin
by pressing F3
(load file) and typing output.bin
(this assumes that the output.bin
is in the same directory)
Press Return
again and go to 00616FFC
and Return
again.
Then paste the content by pressing F8
, make sure that the original file looks the same as the output.bin
in e.g. separate hexedit
and save by pressing F2
.
Note that F1
gives you a help menu and by pressing /
you can search in it.
- Resize the binary
We only want range from 0x00000000
to 0x10000000
to do that use:
$ head -c $((0x1000000)) output.bin > output_16MB.bin
or if you are a masochist:
$ dd if=output.bin of=output_16MB.bin bs=1 count=$((0x1000000)) status=progress
- Reflash the "BIOS Chip"
# flashrom -p ch341a_spi -w output.bin # Write the content of output.bin to the chip
- Solder the chip back on the board
Do not forget to align the indentation with the arrow as mentioned above so that you don't place the chip in backwards which could break things on the board.
- Finishing
You should now have a working system, make sure it works and if it does then make sure to clean the flux from the board.. or.. else.. you can do that using toothbrush and izopropyl alcohol 99% in case you over-did it.. otherwise setting the reflow station on 150-200C shouldn't melt the solder and allows the flux to evaporate.
If this helped you then consider donating to bad caps forum, i am not affiliated with them, but the post in reference 1 spared me at least 2 hours of trying to figure it out as a hardware engineer, fuck you lenovo and lack of docs, schematics and shitty exe extractors for binaries..
You can also donate to me directly https://github.com/kreyren#donate
$ echo hello # Outputs 'hello' in terminal
The $
means to execute as non-root
# echo hello # outputs 'hello' in terminal
The #
means to execute it as root e.g. sudo echo hello
- Discussion about fixing this on badcaps which was used as a reference for the first time i was dealing with this shit.. (fuck you lenovo): https://www.badcaps.net/forum/troubleshooting-hardware-devices-and-electronics-theory/troubleshooting-laptops-tablets-and-mobile-devices/bios-requests-only/95020-lenovo-flex-5-14alc05?p=1708887#post1708887
- https://www.badcaps.net/forum/troubleshooting-hardware-devices-and-electronics-theory/troubleshooting-laptops-tablets-and-mobile-devices/bios-requests-only/99055-lenovo-flex-5-15alc05-black-screen
- https://www.badcaps.net/forum/troubleshooting-hardware-devices-and-electronics-theory/troubleshooting-laptops-tablets-and-mobile-devices/bios-requests-only/3622861-lenovo-ideapad-flex-5-14abr8-bios-help
- Badcaps forum search of people having this same issue: https://www.badcaps.net/forum/troubleshooting-hardware-devices-and-electronics-theory/troubleshooting-laptops-tablets-and-mobile-devices/bios-requests-only/95027-lenovo-ideapad-flex-5-14itl05-bios-dump