I wrote a small blog post explaining a little bit about the project. They provide a list of things to get started here! I received all my hardware sooner than I expected considering it was ordered right before Christmas.
- Laptop, X200s – Ordered on eBay for under $100.
- BeagleBone Black, Rev. C – I found mine on Amazon for just under $60.
- External 3.3V DC Power Supply – I had this lying around from another project. It was designed to supply 3.3V or 5V power to a breadboard.
- Misc wire
I found their documentation to be pretty straight forward and most of the time I do not believe in duplicating efforts. I am hoping to add more pictures and information that people might find helpful.
BeagleBone Black Configuration:
The first major step is setting up the BeagleBone. These devices come with Debian Weezy 7 out of the box without a root password. I checked my firewall to find the DHCP lease and was able to ssh to the board after plugging in the mini-usb cable and the ethernet.
Following the rest of their instructions I setup spidev SPI0, configured the LED aging init script, then performed a system upgrade. I also made sure to configure the flashing setup to persist across reboots. While following the documentation I had forgotten to check my flashrom size before getting started! At first I was not sure if this would be a problem or not but I found out it will display the size when the test command runs.
Making the connections:
This part of the guide was extremely confusing for me at first. It took me quite a bit of time studying everything to understand what they were trying to get across. My X200s has a WSON flash chip package so I was required to solder wires to the connectors instead of using a test clip (referred to as Pomona but they come in other brands). I made long connectors that spliced 30AWG wire to Breadboard jumpers which turned out to be a mistake. Before connecting anything to the BeagleBone I soldered all 8 wires to the chip which turned out to be another mistake. I was not required to hook up pins 3 and 7.
At first I did not understand how the diagram layout was setup or how to make the connections. I reviewed the P9 header so I understood how the pins were numbered but relating that to the WSON pins was confusing. Basically the diagram was indicating that you rotate the WSON layout and match up the pin locations.
MB1 –> BBB17
MB2 –> BBB21
MB3 –> NC
MB4 –> BBB1
MB5 –> BBB18
MB6 –> BBB22
MB7 –> NC
MB8 –> 3.3V PSU
Back It Up:
This is when I really started running into problems. They have you take three backups so you can verify the checksums and make sure you get a good backup.
After the first three backups the sizes were all the same but none of my checksums matched… At the 512kHz speed configured each backup took just about 3 minutes and 25 seconds. I read somewhere that reducing the speed could help so I moved it down to 256kHz and took a couple more backups but still nothing matched.
At this point I decided my wires were probably too long because the documentation said keep them around 10cm and mine were longer than that. I shortened the wires and read the chip a few more times but I still was not getting anything that matched. At one point I increased the speed to 1024 just to see what happened but that made it worse. After 25 to 30 backups I ended up with two separate factory roms that each had matching pairs… I could not get a third one to match either one. This was kind of a problem but I decided to go ahead with the flashing anyways. Do not do this. I put the life of the laptop at risk but I also had some other flash chips on order for a future project and it was a risk I was willing to take.
So remember how I just said do not continue flashing if you are not getting verifiable images? Guess what happens next… the flashing fails. So I will admit that I knew this could be an issue. At 512kHz speed the programmer was not even able to find an erase method. At 256kHz it was able to erase the chip, flash, but it could not verify that the write was completed properly. I tried everything down to 16kHz and let it run over night. Still nothing worked.
After failing to read or write with the 30 gauge wire I ended up removing everything and starting over. This time I used breadboarding wire because it was 24 gauge and single strand. This wire ended up being difficult to work with and I almost ruined my motherboard by lifting the trace. With the WSON layout I was able to connect the first wire directly to the side of the chip to get around the missing trace. I failed again to properly flash the board using this method. While I was removing these thicker wires I discovered my ground connection was very loose which is probably why it never worked.
Finally, I decided to use some stranded breadboarding wires because they were a lot more flexible. After one attempt I received a VERIFIED Flash! I am not going to include any pictures of my failures because I do not want people to follow my bad examples. If you are new to soldering stay away from the WSON chip. These are small connections and require some good soldering experience.
- BeagleBone is an ARM processor so use flashrom from that folder.
- Interference sucks – Maybe 30AWG wire is too small but I would normally use it for connections like this. I think part of my issue was due to poor connections into the BeagleBone.
- Loose connections suck – The 24AWG solid wire wasn’t flexible enough. I lifted part of a trace and never had a good ground.
- Freedom is worth the effort