Heya! Update four here we go! (Spoiler the PICO boards arrived! ^^ )
Quite a bit has happened since last time! First off after some back and forth I decided to make a version where the tracks were straight and not length matched. Primary reason being that skew would not be large enough to matter anyways, and it would let me spread some of the traces further apart to limit cross coupling.
However, being stubborn and not wanting to admit all the time I spent length matching was a waste, decided to just make a panel with both the length matched traces, and the straight traces, so that I could test both XP
I’ll include a detour into impedance matching, that turned out to be irrelevant, and can be skipped if you don’t care XP
I found the calculations for the impedance for the ram, which was set to 45 Ohm +-10%. While the PPC750 which the CPU is based on also mentions an impedance of ~45 Ohm. So, I went back to the calculator in KiCad, and double checked that with a 1oz copper weight, we would get 65 Ohm impedance on the traces, while a 2oz copper weight would drop the impedance to 55 Ohm.
Stock ZQ on the Wii is 270 Ohm, so the impedance is 270/6=45 Ohm. ZQ should be between 210 and 270, which is an output impedance of 30-50 Ohm (using +-10% for the extremes). Changing the ZQ higher could increase the impedance, but it would go outside what the ram is built for.
Meanwhile the Power PC 740-750 also mentions 43 Ohm without any option to change it the way the RAM ZQ can be changed.
Rob’s recreation used 1oz and the same trace width, so he had it running with 65 Ohm impedance traces. However I got paranoid that since my design is so compact and deviates from the stock design so much, I though that maybe trying to go for a lower impedance might improve my chances, or at least not hurt them. Not that the lower impedance would change the cross coupling, but that if I had multiple noise factors, then removing the noise from signal reflection from bad impedance matching could improve the overall signal integrity. And it didn’t cost that much extra for the upgrade, so it seemed worth it.
However, I had forgotten a tiny little detail… Changing the copper weight changes the minimums… Instead of having a trace spacing of 0.1mm, I now needed a spacing of 0.15mm… Which would be completely impossible… That amount of spacing would mean you can’t snake traces out from the CPU pins. Maybe you can use lower minimums in BGA fanout, but I wanted to order the boards quickly, so I decided to drop it.
So, I felt ready to order, I had triple checked everything. Made both a length matched version and a straight version (during pride I know XP ), and made my own panel. I checked the design against the DFM tool for JLC, the uploaded the design and toggled all the important settings:
- 6 layer board
- 0.8mm board thickness
- 2oz copper
- The smallest vias JLC allows 0.15mm
- Castellated edges
- Color Purple!
And saw with dread how every option increased the price... But I decided to bite the bullet anyway!
JLC says their review should take between 10min to an hour… An hour came and went… Then two… I checked when they were supposed to be open, and they are supposedly running 24h during weekdays. So, I keep waiting, trying to busy myself with other things... It’s a complex circuit, it’s no wonder it is taking extra time… At the five and a half hours mark it finally went through, whoop! They up charged me more for the panel but otherwise seemed like I was in the clear, double whoop! So, I paid and went to sleep in the knowledge that everything would be fine.
Foreshadowing is a literary device...
Anyway... The next morning, I saw I had an email from their techs... telling me that with the 2oz copper I had ordered, I no longer met their minimums. This was apparently not caught in their initial review… I talked it out a bit on the discord before deciding to print a test print on 1oz instead and remove all the expensive options I could to bring the cost down.
So, I got rid of the panel, only ordering the straight ( :/ ) trace version, in 1oz copper, in boring green, and without castellated edges. It got the cost way down, and would make it easier to do a reprint in case I'm not a goddess of perfection XP , and there were any issues which slipped by.
Then in intensely waited for a week till the boards arrived on Thursday XP
They are kinda scary small the PICO is! And it turned out quite well even if it isn't purple ^^ Though I missed out on putting “2026 Nintendo AGB-RVL-01” on the bottom silk screen. But maybe for a second print if I needed it.
This weekend I started soldering, focusing on the back. However, I discovered that I had ordered the wrong feedthrough caps, ordering 100pF instead if 1uF. I have no clue how I picked the wrong size that badly... So got to make another order and get the right ones this time. Good thing I almost never make mistakes XP
I had planned to be stubborn and just use the regular Hollywood 1 from the regular wii I just got for this. However I was convinced on the discord to not be stupid and to just order a Mini so I can get better thermals and better undervolting. Thanks everyone ^^ And thanks to flux_sniffer for helping me on how to source the correct mini version ^^
As for the actual reballing process… Lining up the balls is fine, but getting them to melt into place without moving using hot air is kinda a pain. So I decided to cheat XP I decided to try and build an IR top heater so that I could melt the balls into place without hot air. I found a guide, the components, some aluminum extrusions to make a thing to hold it, ordered everything, and felt quite clever about myself finding a way to avoid doing something really difficult XP And I do a lot of smd soldering so it felt like an investment regardless, just putting my boards under the IR top heater to melt everything all at once as if I were baking the board.
However… The IR top heater never arrived… Ali Express says it did, but it ain’t here :/
So, I guess I have to keep practicing with hot air till I get the skill down...
Along with the main PICO board, I also ordered some cheaper 2 layer boards, including a simple test dock which fits the AVE, and some regulators, and other simple features. It’s there to power the PICO and to get the graphics data out, so that I can test if the boards works when I finish soldering it.
I plan to make a nicer TV dock, and the GBA handheld dock later, however I first need to test if the PICO even works to begin with.
Now while aggressively waiting for the PICO PCB to be manufactured, and now while casually waiting on the HW2 to arrive, I’ve been working on some 3D modelling, CAD’ding out the GBA as much as I could, starting with recreating all the buttons, down to the rubber domes XP Using the Wesk scans for reference, and calipers on the parts I have at home.
I also modelled the full shell in in fusion, trying to keep it as accurate to the stock GBA as I could. Even managing all the painful curves on the backside using lofs. (Apparently there's an option to change how the loft's connect, letting you use tangents or curvature, which helped with the smoothness)
I had planned to print it today so that I could include it in the update, but half of the print came loose early on and turned everything into a mess… And I didn't realize in time to start another print today :/
However, with 3D models in place, I also started looking at the internal layout and how to cool everything! Even though the Wii uses very little power, having no cooling while being this small feels like a bad idea XP
Though, with the Wii being in the cartridge, and the cart being removable, we meet the problem of how to attach a heat sink to it while it is inserted?
My current plan that I like is this:
Put the heat sink on a cammed track.
While the cart is not inserted the heat sink will be in the down position, held in place by a spring.
As the cart is pushed in, it will push against an arm on the heat sink, pushing the heat sink forwards with the cartridge.
As the heat sink moves forward, the cammed track pushes the heat sink upward into the cartridge, with a bit of force to allow for good contact.
A thermal pad on the heat sink, will act as the thermal interface material, and a soft buffer.
Removing the cartridge will do the same in reverse, the cart and the heat sink travels together outwards till the cam track pulls the heat sink down and free from the cartridge. Then a spring pushes it the rest of the way to the down position.
Are there better ways of doing this? Yes probably. I could get rid of the interlinked system and use an external button to do the same. I could also use springs more to give contact pressure. I could use graphite for thermal interface instead of thermal pads. But this is my plan for now, I want to make some tests based on this to see how well, or how badly this will work before I abandon it.
---
And I think I will leave it here for now XP
I need to wait on the Wii Mini with the HW2...
Practice hot air reballing more. :/
Finish up soldering the top of the PICO and solder the test dock. ^^
Then actually test if the wii will boot XP
I got the boot debug pads exposed so if there is any life in it I will be able to get something, hopefully XP
Anyway that's enough for this update. Maybe I'll have something booting in the next one, or I'll be deep into debugging and learning from potential mistakes XP
I’m definitely in the latter of those two options, and if you are interested mostly in how that’s going, you can skip to the debugging section. Otherwise let me take you through the meandering path of trying to get good chips to harvest.
Note from later me, this entry turned very, very, very long, I’ve split it into sections:
Preamble jabber
The quest for HW2. Aka the journey to harvest working chips
The adventures of Chipped Charlie
Brave Bravo
Disappointment of Delta
Echo and Foxtrot, an encouraging chance to fix this mess
The big quest for a tiny PICO. Aka the journey to make the PICO work.
Why the fuck did reballing get more difficult again?
I HATE micro-BGA!
Pico Debugging
Postamble jabber: The reality check I want to ignore. Aka where am I, where should I be in this project, and how much/little time is left…
2. The quest for HW2 2.1 The adventures of Chipped Charlie
So last time I had just gotten the PICO boards, and started soldering it up, and had a regular Wii with a HollyWood 1 that I had planned to use. But I got convinced into ordering a Wii mini so I could get a HW2 which uses less power and has better power efficiency. For a tight build like mine it made sense, though it would delay be a tiny bit having to wait 2 weeks for the Wii mini to arrive. Looking back with hindsight I should have used the HW1 I had as an experiment to see if the PICO worked, then worried about the HW2 later… But it was only a 2 week wait, so I could work on the 3d model for the GBA case, no biggi.
So, the first Wii mini arrives, however, before anything else, I’m going to give it a name, I already have a few Wii’s laying around, and spoiler, I’ll get a few more. Names will help separate them.
Alpha – The first regular Wii, which is the one I cooked dead
Bravo – The second regular Wii, that I got, but didn’t use as I wanted a Wii mini.
Charlie – The first Wii mini, the one I’ll be detailing in this section. (Also sorry for anyone name Charlie here…)
More will be added to the cast as I go, with a summary at the end.
So, I check that Charlie boots, install RVLoader like I’ve done on a half dozen Wii’s before. Then bake Charlie. Unfortunately, I don’t have a PCB oven, so I decided to use my preheater. I put Charlie upside down on the preheater, so that the CPU and GPU gets baked, and let him sit for 6h. I was recommended 100C for baking, and using some temperature probes, I saw that there was about a 20C difference between what the preheater was set to, and the board temperature, so I set the preheater to 120C, so that the board was 100C.
After those 6 hours, I flipped Charlie around and baked him for another 6 hours the right way up. I really didn’t want to take any chances after the last board, Alpha, turned out very very very very very dead.
Once Charlie was sufficiently baked on both sides, a full 12-hour process… I started bringing him up to temperature. Last time, with Alpha, I did it right after being sick, and had a massive headache, and rushed without thinking and without checking what was reasonable, even though I had harvested chips from PS3’s a few times before then. So, my dumb brain had done the dumb thing of: “Well I set my soldering iron and hot air to 320-350C so that’s the temperature I should reach…” Solder starts melting at around 220C… The reason the iron and hot air is set higher it to overcome the heat loss from radiating heat elsewhere, and to overcome the losses from needing to heat up the ground plane and pcb acting as a heatsink… I reached a bottom temperature of 290C… which is slightly above the solder melting point of 220C… Delaminating Alpha, making it go all discolored, delaminating the GPU, and components on the bottom side had just fallen off due to gravity… So that was slightly sub optimal…
This time, with Charlie, I checked… A reasonable bottom temperature is 180C, then you bring it the rest of the way up with hot air and start checking if the chip is floating once the top probe reads 220C. The technique I ended up using was holding the hot air nozzle very close to the GPU, counting to 30, then gently poking the GPU with a tweezer that I gently held in the far end. If the tweezer bent, then it was not ready, if the GPU moved, then it was floating, however I let it heat up for another 30 count, to be sure it was fully floating and that I was not ripping any pads, and that it would not solidify as I removed the heat to lift it up. And that seemed to work well, I got the GPU and CPU and RAM off without issue, there was no popcorning on Charlie, and checking the resistances one the GPU and CPU they turned out fine. (I’ll post about the resistances in a later segment.)
However, I was not yet quite done, so after spending 12 hours baking Charlie, then more time carefully heating him up to temp slowly and harvesting the chips, I decided to do the next step right then and there before going to sleep. Because the best work you do is while tired before going to sleep… So, what did I need to do? Well since I needed every fraction of a millimetre of space for the PICO, I needed to delid the GPU and CPU, so their height would be slightly smaller… So, I did as last time, I took a razer blade and carefully cut the glue around the edges of the IHS, making sure to angle the blade slightly upwards so it would not scratch the substrate. I did the corners first, careful about not going too far in. Then I did the edges. Then after working it for a bit, the IHS popped off, and I could see the silicon die, and the caps around it, and the tiny silicon die which others in the discord identified as the EEPROM. Everything looked great! There were no popcorning visible, no scratches, no defects I could see. So, I posted it in the discord, and we looked at some of the differences between the HW1 and HW2, along with the empty slots for caps. Then just as I was about to sign off, Rob noticed something, a potential defect, just from the image below. Can you spot it before I point it out?
If you zoom in to the EEPROM, there is a slight discoloration which looked off to Rob.
So, I took the chip out again, and adjusted my microscope to try and get a better image… and fuck me sideways, he was right… A tiny piece of the EEPROM had gotten chipped…
It’s shallow, but it might have taken out something important…
So, the HW2 from Charlie was potentially dead, and the only way I could check was to test it… But I had just removed the GPU, CPU, RAM, and NAND from Charlie, and I really didn’t want to put them back on. Though from the discord I got the suggestion to put the GPU onto the working regular Wii I had, aka Bravo, though as the NAND and GPU are married to each other, and I didn’t dump the keys, I needed to transplant both. Though as it was Sunday, and I had work the next day, and baking takes a long time, I needed to wait till the next weekend. There was also a risk in transplanting the GPU, as according to Rob, the vias on the stock Wii makes it difficult to transplant a GPU back onto a stock Wii without creating bridges… You need it to sit perfectly and not shift… So, it was mostly a hail Mary (good movie and better book btw) to see if the HW2 from Charlie was still good. So, I ordered a second Wii mini (Delta), just in case the HW2 I had from Charlie was dead.
2.2 Brave Bravo
During the week I had, I spent my afternoons practicing reballing on the very dead GPU from my first attempt aka Alpha, and I got better and better at it. The first proper attempt. I had about 10 solder bridges (error image not found). My second attempt I had 1 solder bridge, which merged into a big ball, I tried to rescue it with solder wick but just made a bigger mess. My third attempt I had issues with the balls not wicking down, so after I was done, I found several balls who were not seated, so I heated it up again… and managed to bump into a bunch of the balls with the hot air nozzle… The fourth attempt I used more flux so the balls would wick better. I had to stop a few times as the balls started floating together, and I needed to separate them before they formed a blob, but I got a perfect reball!
Then I did the exact same thing to the to the chipped HW2 from Charlie and got it on my first try!
Then next weekend come around, and I start going through the procedure again with Bravo. Last time I did 6 hours on each side, however as the temperature probes on the top and bottom were relatively close, I decided to do 3 hours upside down, then 6 hours right side up, so it was only 9 hours of waiting on Bravo. Then I bought Bravo up to temp, and started blasting the GPU with hot air, this time being even more careful to not rip pads. It had gone well last time, but I really really needed it to go well this time. I poked it gently till it was floating, then waited a bit longer, then lifted it. No ripped pads! I cleaned it up, using leaded solder then solder braid, before I put down fresh flux and placed the Charlie HW2 down onto Bravo. Then I started blasting it with hot air, waiting till the probe reached 220C, and repeated the same procedure to check if the balls had melted and that it would bouncing back into place. I removed the hot air, and let Bravo cool down, and turned off the preheater. Then flipping the board while it was still hot, I removed the Bravo NAND and placed down the Charlie NAND.
I needed to clean up the legs of the Charlie NAND, but then it was time to see if it would boot. I checked the resistance which seemed fine, no shorts. I plugged in the power, and the power LED turned on. I pressed the power button, and the LED switched color. All great news! So, I kept looking at my monitor to see if I would get an image… No image… I checked the boot debug pins, and I got a flashing 0xF1… Which is EEC or RAM issue… That is step 1 of the boot process… The EEPROM is step 7… Maybe there were some bridges on the RAM side of the GPU… Maybe I had accidentally bumped the RAM chip while transplanting the GPU… I remembered what Rob said about transplants on the Wii was difficult and that it was a long shot unless I got the alignment perfect, and my method to check if the chip was ready was by poking it… My work bench is not big enough that I can have the preheater and the reballing jig out at the same time, so I would need to spend a few hours heating the board up and harvesting the GPU again, then let it cool down before I move the preheater away and try to reball the GPU again, which could take a few more hours, then I would need to move the preheater back and heat it up again, to try and transplant the GPU back… That would take ages… And I had a new Wii coming for the next weekend. So, I cut my losses and put Bravo with the Charlie HW2 aside, I could come back to them late and try again if needed.
2.3 Disappoint of Delta
The next weekend comes around, it’s now 4 weeks since the last update, I got the new Wii mini, Delta, it’s a HW2, I jailbreak Delta with bluebomb, using linux, though it’s very annoying pressing the BT reset button over and over and over and over till it connects. Then once Delta is jail broken and the homebrew channel is installed, I just need to install the RVLoader like I’ve done plenty of times before, with the plan to dump the NAND afterwards. I check the settings and change the WiFi to be patched out, and no VGA patch, and I let it install. It starts the process and everything seems fine, until it freezes at “Exitting…” which I’ve not seen before. Though it looked like it was done, so after waiting a while, I decide to just power cycle Delta, if the update didn’t take, then I could just install it again… I try to boot it… And I get nothing… The power led changes color, but I get no video out… The debug port is outputting a solid 0101 0101 which isn’t a valid code, and it’s supposed to flash (50% duty cycle signal) … I managed to brick Delta… I check the forums and the discord, and there’s been a few people who has encountered the “Exitting…” freeze, but they either didn’t manage to fix it, or fixed it without telling anyone how…
I thought back to how I changed the WiFi settings… Wasn’t the default that it was patched out… Did I patch WiFi in? The Wii mini does not have a WiFi card, the connector is not even added to the board, and the series resistors are also gone…
But I have a WiFi card from a regular Wii, so let me follow the guide and install it on Delta on the pads to the GPU just to see if it would work. So, I fiddled with magnet wire for a bit, before I got it soldered up, and I checked… Still no video out…
I check if there were any suggestions to others with this bug and see that the suggestion is to use the reset button to try and enter a sort of recovery or factory reset. But the Wii mini does not have a reset button… I check my spreadsheet for the reset button pin on the GPU, and check it on the Wii mini… The vias around that area is slightly different from the stock Wii, so I check the board scans for the Wii mini, and find the via, solder a button to it, and try anything I can think of… But nope, Delta is still bricked… For future reference the circled test pad is for the reset button.
Had I dumped the Delta NAND then I could have recovered, I could have written the original NAND image back, but since I had wanted to dump the NAND after installing RVLoader… And it bricked during the installation… I could not do that… So, I have a potentially broken HW2 GPU from Charlie, but working NAND, and a working HW2 from Delta with a broken NAND firmware, but since the GPU and NAND are keyed to each other, and I didn’t have those keys I could do nothing…
I ask in the discord, but no one has any suggestions beyond what I’ve already tried. So, I decide to give up on the second Wii mini. Maybe my WiFi solder job had been bad? And if I tried again, I would get it working? But I was tired and was still not sure if it was the WiFi as the other people with the “Exitting…” bug had been regular Wiis, so they should have had the WiFi card installed when they installed RVLoader. I decided to give up on Delta and just order another Wii mini (Echo), which was supposed to arrive the coming Friday, so it was only a week wait… Then thinking about my bad luck and how much time I had spent on just trying to harvest chips, I ordered another Wii mini (Foxtrot) which was supposed to arrive on Thursday.
2.4 Echo and Foxtrot, an encouraging chance to fix this mess
Well, Ebay lied, so they didn’t arrive till Tuesday the week after, and as I work over the summer, and don’t want to run the preheater while I’m away, I needed to wait till the weekend… So that was another 2 weeks wait… 6 weeks on waiting so far… I feel I’ve been here before with delay after delay…
The two Wii mini’s arrive Echo and Foxtrot, I jail break them, though bluebombing the second one took ages… Like over an hour… Think it only worked after restarting my PC to try over… So, if you are doing multiple consoles in a row, maybe try restarting your PC between each console to clear any issues? Or it was just my bad luck…
I dump the NAND this time from both Echo and Foxtrot. Then installed RVLoader, the default setting is that WiFi is patched out… I definitely patched WiFi in on Delta, a Wii mini which does not have WiFi… Anyway, the installation process goes well on both. So, I have two working Wii mini’s which are ready to be harvested. I pick one, Echo, as my third attempt, and wait till the weekend again… Though with luck on my side, I had booked a 2-week vacation to work on the PICO for the two weeks starting with that weekend, so it was just about perfect, I would have plenty of time to work on this, and to catch any bugs… Surely bug catching will be easy and no hassle…
Anyway, the weekend comes, and my vacation starts, and I echo the same steps as last time for Echo. I think I did 2 hours upside down, then 6 hours right side up, so 8 hours of baking. I harvest the GPU and CPU without issue from Echo. Delid them, without chipping the die, and check the resistances. See third time is the charm, I knew luck was on my side for once.
1.0V
1.15V GPU
1.8V
3.3V
1.15V CPU
Charlie HW2
41
940
1.8k/6.6k
154k
41
Echo HW2
26
1.7k
822/1.5k
1.8k/7k
?
Rob HW1
139
19.7k
71k
16.5k
42.7
Note 1: For the CPU you have to measure the resistance in the middle, as the voltages around the core, and the outer ring around the core has a different resistance, some going to analog pins, some to GPIO pins.
Note 2: Some voltage rails change resistance between probes, latching high or latching low. So, I’ve listed both states.
3. The big quest for a tiny PICO
Before heading into the PICO, let’s have a look at the consoles used so far:
Audacious Alpha – The first regular Wii, which is the one I cooked dead
Brave Bravo – The second regular Wii, I tried to transplant the Charlie GPU into it, but got a RAM error, and abandoned it for greener pastures.
Chipped Charlie – The first Wii mini, which I chipped the EEPROM of, and then put the GPU into Bravo to see if it worked or not.
Disappointing Delta – The second Wii mini, which I bricked by patching WiFi in instead of out. And didn’t dump the NAND first.
Encouraging Echo – Wii mini #3, successful harvest and delid without any visible issues. This is the one I’ll be using going forwards unless something tragic happens.
Fixer Foxtrot – Wii mini #4, currently unmolested, and is being used as a reference for how a stock Wii mini works, how the clocks and signals are supposed to look, and help me fix the PICO.
3.1 Why the fuck did reballing get more difficult again?
So I have the HW2 from Echo, along with it’s CPU and NAND. I had ordered some fresh RAM from Aliexpress, so that I would not need to reball the RAM myself. So, all I needed to do was to reball the GPU and CPU, and place down the NAND, easy peasy right? I’ve already gotten a technique down for reballing the GPU and didn’t have much issues with it once I got it down. Sure, that was 3 weeks ago, and I’ve not tried again since, but surely, it’s not that hard, right?...
On my first few attempts on the Alpha GPU, I had not used enough flux, and it led to the balls not wicking down, and I burnt the GPU even more trying to get the balls to melt. As I preferred to not burn up my good Echo GPU, I decided to use more flux just to be sure. However… More flux means that the balls float more and want to clump together… So, I spent the next few hours heating the chip up, carefully watching for when the balls started clumping together, then immediately stopping, and separating them. Over time the flux would evaporate, and the balls would clump less and less, until I could finally reach the temperature needed to melt them and have them wick into place. I did it zone by zone and realized that the areas where the GPU was clamped into the jig was struggling to heat up, so I took the GPU out and rotated it so that I could heat those two corners.
Nicely placed down solder balls
Literal hell, each ball cluster must be separated manually. Why do I do this?
An eternity later, and it's a perfect reball...
Then over to the CPU… So, I had twice tried to get the stencil for the Wii CPU, however, even though both listings I tried said they had the Wii CPU in them, neither did… So, I ordered some generic stencils and found that the 0.4mm stencil fit, all I needed was to mask off all the excess holes. And as there’s no complex patterns on the CPU itself of where the balls should go, that turned out quite well.
Balls are placed.
Had to take the CPU out of the jig as it was soaking up all the heat, not letting any of the balls melt.
So now I had a reballed CPU and GPU HW2, all I needed was to plonk them onto the PICO, heat it up, and boom, I would have a working Wii, right?
I checked the resistance on the PICO first, just to be sure… and found that the 1.8V rail was shorted… I checked a few things, but I had my suspicions on the RAM. I had not used flux when I soldered it, as I had not realized how important it was to making the solder balls wick into place, and it had not had the same jiggle when I poked it. So, I removed it, cleaned up the area, checked the resistance, no short, fluxed up the area, and placed down a fresh RAM chip. It went into place a lot better, and I didn’t have any shorts anymore. However, the area under the RAM has started getting a bit scratched up from the solder braid...
With that fixed I moved back onto the CPU and GPU. I had prepped the area before hand with leaded solder, then removed it with solder braid so that there was only a thin coating on all of the pads and fluxed it up. Then I carefully placed the CPU and GPU down, aligned them, and placed the hot air nozzle above them. The nozzle was big enough that it would hit both at the same time, and honestly the entire board as well. I blasted hot air, while squinting in from the side to look at the GPU to see if I could see with my eyes if the GPU seated down. Then after a while I did my poke test… First poke, nope, not jiggling… Second poke, nada… Third poke, oh there it jiggled the way it does when the balls are melted, great. I just need to remove the heat and look at my amazing creation.
I don’t have an image unfortunately, so I drew how it looked. It seemed like my poke test had pushed the GPU back over a full row, and I had no clue at the time how the CPU ended up completely skewed… So, I immediately place the heat back on, removed the chips, and fixed all the components which had gotten moved back into place.
Hmmm, that went less amazing than I had wanted… But oh well, I’ll just try again! This time I’ll do just the CPU first, then get back to the GPU.
A few hours of babying the floating solder balls, and I had a CPU ready for attempt 2. I used plenty of flux on the PICO and used a smaller nozzle so I could better see what was happening. I heated it up, and suddenly the CPU starts moving randomly! The flux under it started boiling and gassing off, and it pushed the CPU around! That’s why it was all skewed last time! I try to correct, nudging it back into place, but the transplant felt dodgy at best… But not wanting to spend more hours reballing, I decided to move my microscope around to look in on the sides of the CPU, to see if the solder balls looked fine or not. I have good access to two sides, and bad access to the two others. And after careful analysis, I found what looked like a solder bridge on two of the data pins…
Well time for attempt 3. You know the drill, a few hours later and a lot of frustration, I was ready to try again. Last time I had way too much flux on the PICO, allowing it to literally boil and move the chip. So, this time I used a lot less. Then carefully lined the chip up, before moving my scope around to look in from the side. Now I don’t need to squint from the side to see if they melt, I can just look at my monitor to see when they melt. Brilliant, why didn’t I do that from the start? Right cause it’s a headache to move the microscope arm around and readjust it, and I didn’t think I needed it…
Anyway, I heat it up again, carefully watching that the alignment stays correct, and watching the feed from the microscope, and I can see when the balls start to melt, and how the chip settles straight down, no sideways movement! I don’t need to poke it to check!! I heat it for a while more, just to be sure the other sides and the middle are also fine. Then remove the heat and carefully analyse each side I can see from the microscope. Every side looks golden! Well seated down, good squish, no bridges, chip is square, and the resistance is good!!! I did it!!!!
Now the GPU… It’s way larger… I wait till the next day to get started on it, and it takes me the full day to reball it… It wasn’t that hard the other times I tried… I know I use too much flux, and I would save my sanity if I used less. But it felt safer, and I’m stubborn enough that I can handle doing a very annoying task for hours as long as I feel like I’m making some progress… Anyway, many, many, many hours later I’ve successfully reballed the GPU, now I just need to echo the same procedure I did with the CPU. A thin layer of flux on the PICO, place the GPU down square, change the microscope to look in from the side, then heat it up till I can see the balls melt on the microscope. And it went just as well as the CPU!!! Whoop!!!! I just need to analyse each of the sides.
Hmm the 3.3V buck boost is clearly not positioned well, it’s a micro-BGA component, but I have a replacement. And the NAND desoldered itself.
Hmm is that a damn solder bridge? How? It didn’t move! There were no bridges when I place it down… Damn it… But lets take a closer look just to be sure.
Hmm from an angle the bridge disappears and it looks more brown than metallic… It might just be flux… Let me check what pins that’s supposed to be… I know there’s a lot of ground in that area. It’s Ground and 1.15V… Let’s check resistances… Not a short! The resistance looks fine! Let’s check the other rails as well… They are also fine! Maybe I did it?!
I just need to fix the NAND and the 3.3V regulator and I can finally test the PICO. We are almost there! (Don’t look at how much is left in this work log…)
3.2 I HATE micro-BGA!
So, I used the same regulators as the ThunderKILL which used the same regulators as the ThunderVolt, which used a tiny micro-BGA buck boost for 3.3V. These micro-BGA components use balls that the size of a needle point, and the pad’s are not any larger… I had one unused backup of this regulator, so I heated it up to remove it… The regulator would not budge… I keep waiting for it to heat up enough… But the point never comes… I up the heat on my hot air, and finally it want’s to come free. So, the solder balls they use are apparently very high heat… I clean up the pads and put some flux down, then place the regulator down and start heating it. The silk screen outline around the chip is taller than the balls, so I can’t really look in from the side, though I probably should have tried. I heat for a good long while, at a higher temperature than normal, just to be sure the high heat solder balls will melt, and I don’t poke it. Once it felt like enough, I let it cool down, then poked it to see if it would stay or if it would come loose. And it stayed in place, so some of the balls stuck down at least.
I connect up the wires for the ATTiny, so that I can flash the firmware to it, and do some modifications to make the ThunderVolt firmware fit the picothunder (I used some different pins and components, and moved the LED, the Thundervolt has a dimming LED, I don’t as I didn’t realize the LED pin mattered, or that that was a feature). Once that’s done, I connect the test dock I made and give it power.
The plastic bits are there to make the PICO thicker so it will press into the contacts properly.
On the Thundervolt, the LED will breathe when everything is fine, and it will flash an SOS if it fails somewhere. My version will blink regularly if everything is fine or do the same SOS if something wrong. I check the LED, and it’s blinking steadily. Great! Awesome! This is really coming together! Let me just check the voltages to be sure. 1V? Yes! 1.15V? Yep! 1.8V? Right on! 3.3V? Hmmm… why am I getting 0V on 3.3V? That’s not great… Let me check the code again. Hmmm it will SOS if it can’t find and can’t talk to the regulators. But it never checks the voltages, or what the regulators has to say. So, the 3.3V reg is present, is answering I2C, but is not converting… Hmm, let’s look at the datasheet for that regulator, let’s see what status registers it has, I’ve use different regulators before which had a lot of telemetry and status I could access. Hmmmmmmmmmmmmm… It only has Power Good, and Temperature Good… Let’s check those… Okey it’s reporting Power Not Good… Great it is aware it is not working, but won’t tell me why…
I double check that the inductor I have has the correct ratings and that I didn’t mess up the size of it. The datasheet, and the ThunderVolt Schematic says 0.47uH, checking Digikey, the inductor I ordered was a 0.47uH inductor. So, it seems fine. I keep checking some more stuff, but it feels like it mostly comes down to the regulator, which has those cursed micro-BGA pads, and maybe it’s not fully seated, or something is wrong with the inductor… The inductor is easier to replace so I do so. I add a bit of fresh solder paste just to be sure it will stick down, the solder which is there currently has been heated and cooled a good few times now. I heat it up… And the solder paste starts spreading around as it becomes more liquidy… And some of it goes under the regulator… Just absolutely perfect, that’s exactly what I wanted… Fresh solder getting stuck under the micro-BGA regulator that I don’t have any spares for… I check just to be sure… And the switching pins and vout are shorted…
So, I desolder it… clean up the solder… then try to reball it using the solder I have. I tin the pads on the regulator and on the PICO and try to get them to merge. SOS the Tiny can’t talk to the regulator… Off with it again… Only tin the chip and not the PICO… Hey it’s talking again, and I’m getting some voltage on the 3.3V rail! 0.5V is some voltage… but not the right voltage… I’ve been probing the everything with my oscilloscope, both before I had to replace the regulator again, and after, and it never properly converts. On the 0.5V it tries to convert for a little bit, then gives up… And so do I…
This 3.3V micro-BGA regulator is the bane of my life, I just wanted to see if the PICO would work, why does it hate me so much? Fine, I’ll just get rid of it, and replace it with an external regulator, I have a few of those laying around. And I swear for the future to never using micro-BGA for any projects I need to solder myself ever again!
I change the firmware to not look for the 3.3V regulator, then I try one regulator I have. Out of circuit I adjust it to 3.3V, then solder it in… The 3.3V rail is only supposed to draw about 0.25A, so it’s not massive, surely it can handle it… Nope… I don’t get the voltage I need… Fine I have another slightly better regulator that I’ve use before which should work. I solder it in, adjust it, aaaaaaaand 3.3V!!!!! I check the other rails, AND…. They are still good!!!!!! It’s alive!!!!!! Mwahahahaha!
3.3 Pico Debugging
With all the power rails operating, I just need to attach the video out to the dock, and check my monitor, surely it will be that simple right?... No image… Fine let’s check some stuff. The CPU and GPU both heats up when connected to power, so they are doing something. The debug port is outputting 0x80… It’s a solid 3.3V and that’s not a valid code… Okey let’s check the video out pins, which feeds into the AVE. The 54MHz clock should be reliable, that’s reading 27MHz…. Hmmm that’s not right… Let’s check the data pins? No activity… U10? Hmm the only place I have access is a tiny via right next to the NMOS. So I carefully scratch the solder mask off and probe it. Oh, this is not correct, it’s going high while the 3.3V regulator is still booting, maybe the external regulator is taking more time than the intended regulator. But that is an easy fix, just need to change the firmware of the Tiny to extend the delay.
Hmm I’m seeing the same behaviour… Let’s delay it further… Nope… a 2 second delay? That’s something I should notice, is there a 2 second delay from plugging in power, till the signal is captured? Nope it’s instant! I check the LED, that gets delayed from blinking by 2 seconds, so the Tiny can keep time… Maybe the NMOS isn’t soldered properly? It’s another very tiny component with very tiny pads… And sure enough, the gate and source pins were not wetted… Okey let’s resolder it… And probe it…
Oh, it turns on initially, then turns off as the Tiny wakes up, then turns on again after the delay. The 3.3V regulator is not connected to the enable line for the other regulators, so it just boots as soon as it gets power. But at least the delayed U10 reset is happening now, after the rails has fully powered up.
Checking the 54MHz video clock… Still 27MHz… Okey on to the next issue. Let’s check the clocks around the board, first checking the stock Wii, aka Foxtrot. Okey the main clock is supposed to be a 27MHz sine wave centered around 1.8V. The CPU clock is a 243MHz sine. Let’s check the PICO. The main oscillator is… Flatlining… That’s not good…
I try to reflow the area. Nope. I try to replace the load caps assuming there is less stray capacitance than I did for my first calculations. Nah. Hmm, the probes have have a 1x and 10x switch, 10x is for more sensitive and small signals, but I’ve never really used it, and didn’t need it for the stock Wii, but I replaced the crystal with a smaller one… Let’s see what happens if I change mode… Oh there is the sine wave, 27MHz just as expected.
Okey according to this, the CPU is supposed to be 243MHz and the RAM is supposed to be 486MHz
Let's check CPU clock... 237MHz! Great, close enough! The GPU and it’s clocking and PLL systems are working! And the CPU gets an appropriate clock.
Now let’s check the RAM, most of the traces are hidden under it and under the GPU, but I have access to the terminating resistors for the clock, which is supposed to be 486MHz. And I measure… Garbage… centred around 1.8V
Well that’s not what I want to see… Let’s check to stock Wii… Hmm I’m seeing something there, but it’s not very clear… What’s going on? It’s centred around 1.3V…
Why is the signal on the stock Wii so weird? Hmmmmmmmmm…. My Rigol DHO914s oscilloscope is rated for 125MHz… the DHO924s is rated for 250MHz, and uses the same hardware, just a different firmware… Those who are good at math might have notice an issue… 486MHz is slightly larger than the 125MHz or even the 250MHz that my scope is rated for… XP Though I could at least see something of the waveform for the 486MHz on the stock, even if it was very distorted. The PICO is not even showing that…
I checked the Vref for the RAM, which is supposed to be 70% of VDD, which it was, for both the vrefs.
Also checked there is no activity on the datapins for the RAM.
I'm not sure what else I can poke to investigate...
Next step might be to desolder the RAM again? It was hanging upside down while I was soldering the GPU so it might have started to desolder itself? Though it looks fine from the outside...
There is also the risk that the scratched solder-mask under the RAM is causing issues and something got bridged? Though then I either need to get lucky when I solder a new chip on that it does not short... Or start over on a new board... Which would be hell, I don't have a lot of backup components, so I would have to order more, or harvest from the current board...
Or me moving the DQ groups around messed it up so much it wont initialize? Or the interference from the compact traces makes it give up and not not initialize? But I would expect the 0xF1 boot code if the GPU came alive enough to test the RAM and it failed. So it fails before even reaching Boot0...
Maybe the RAM is a red herring and it's showing no activity as the GPU has not tried to initialize it? But then what else might be wrong to the point the GPU does not even reach Boot0? And never tried to initalize the RAM or start the RAM clock?
And that's about where I am. Unsure of what is wrong or why. And mostly poking and prodding stuff to see what behaves as expected and what does not.
4. Postamble jabber: The reality check I want to ignore
So, when I started this project, I set out a few goals and made a rough gantt chart/timeline to see how much time I would have for each step. I had planned to update that chart as I went, but of course I kept forgetting about it. But now, with two months left, and having lost one and a half months to trying to get an HW2 GPU I could use, it might be time to return to that overall plan.
As Loopj said in the discord:
Which is true, but at least for me, it gives me a visual indicator of how much time I have left and what is left to do in that time, so I made another one, updated to how things actually went.
As you can see, I failed to deliver on most of those shaky promises, and the full month buffer I had made is completely gone. There might still be a small chance that **IF** I get the PICO working in the next week or so, I **MIGHT** be able to finish, as long as I don’t need to do any reprints or revisions… Something that I failed to accomplish last year…
Of the original goals I had I’m going to have to cut down on some of it to have any chance. Mainly the TV Dock. I don’t have the time or motivation for it. It was supposed to be my shot at the smallest Wii ever made, smaller than the Kawaii, but I had no ambitions or wants for it beyond trying to claim that title, so it’s best to just… not do it. I’m also not gonna mess with MIPI and just stick to the HDMI driver board which came with the display I got.
So, my current goals look like this:
Main goals:
Fully redesigned Wii motherboard with transplanted CPU, GPU, RAM and NAND. (mostly complete/in debugging)
Putting the redesigned Wii into a GBA cart. (mostly complete, waiting on the PICO to work before I do a final pass on it and order)
Create a simple dock to test that the redesign worked. (Killed and abandoned, maybe the test dock counts?)
Create a handheld dock in the shape of a GBA. (In progress, waiting on the PICO before committing more)
Strech goals:
Create a TV dock, which should hopefully be the smallest Wii ever made (so far). (Still nope)
Actually, having something work at competition end for once. XP (Let’s see, it would be nice, but the chances are diminishing)
Nice to have:
GBAWii4: MX, GCVideo, MelonHD, MIPI display and redesigned driver board, use the included HDMI driver board like a sensible person. (In progress, waiting on the PICO, except for a redesigned MIPI driver board, that’s dead.)
TV Dock: MX, Bluetooth, AVE/component out, sensor bar plug, 4 GC controller ports. (Nah)
So that is the current status of the project, which isn’t as great as I had hoped. Everything took a lot more time than I wanted, for mostly dumb reasons which were entirely my fault. Debugging the PICO is hard, it’s difficult to know what I should probe, and how to figure out why it’s not working, and I have no clue if I can even get this to work, or if there is something fundamentally wrong that I would need a reprint to fix… If I knew what was wrong right now, I could fix it, send it to print, and make another version. But if I spend weeks upon weeks to discover the issue, then I’ll not have any time, and the project won’t be complete in time. I’ll still work on it, but I’ll be back in uni, and will be working on my final year project, so I’ll have less bandwidth to work on just this…
Anyway, think that’s enough for this update, I’ll try to not wait as long on the next one, and make it slightly shorter than this monster update I just really, really, really wanted to get to the promise of last time, either have a working PICO or debugging it... I won’t make such a promise again. But let’s check Word just for fun, without images I’m at 15 pages, ~7500 words. If you read all of this, congrats and thank you, I spent way too long writing this XP Time I probably should have spent on debugging…