Hacking 3DS unbricking progress

pietahpoeh

Member
Newcomer
Joined
Jan 26, 2014
Messages
9
Trophies
0
Age
43
XP
97
Country
Netherlands
You can increase the voltage using ohm law,v=IR.
So how about trying 50k ohm to 100k ohm pull up?the recommendation is here:
http://elm-chan.org/docs/mmc/mmc_e.html
Be careful with that. ( Besides that you have to lower the pull up )

What you do in this case is very dangerous when you are using a resistordevider
Without load The Voltage will be to high. ( Your emmc may be fried).
So that's why a levelshifter / buffer is still preferred.
 

obcd

Well-Known Member
Member
Joined
Apr 5, 2011
Messages
1,594
Trophies
0
XP
432
Country
Belgium
Has someone considered the fact that the CLK signal is an output from the 3DS to the eMMC?
Bidirectional lines like the DAT0 are normally driven by open collector or open drain signals.
This means that the line has a pullup resistor to 3V3 and is pulled to GND by the device that wants that line to become low.
While the eMMC standard accepts multiple eMMC devices on the same bus, the 3ds likely isn't expecting something else taking over control of the eMMC interface.
So, basically, in normal operating conditions, the 3ds is controlling the lines. What happens if the 3ds can't access the eMMC? Will it turn of it's clock signal?
If you measure 2.xV on the clk signal, it's probably an average of the signal being switched between high and low. And as you aren't switching it, it's likely the 3ds doing it.

Most digital circuits that are not open collector or open drain survive when their outputs is pulled to gnd. They don't survive when there output is pulled or forced to 3V3.

So basically, we need to find out how we can stop the 3ds from generating the eMMC clk signals. When this condition is met, we should measure 3V3 on the clk signal (If our arduino interface drives it high as well) It wouldn't suprise me that forcing one of the other CMD or DAT0 lines low will disable the 3ds to eMMC communication (blue screen with error code) No idea if that turns off the 3ds clk generation. To proper see the condition of the clk signal, you will need an oscilloscope or a logic probe. You can even use the arduino bord to probe that signal. If you sample it several lines, and you measure high as well as low, it's likely constantly changing between high and low.

Also note that it could make a difference if you allow the 3ds to initialise the eMMC (only connect your interface after the 3ds was turned on) or if you don't allow it (connect your interface and turn it on before the 3ds)
Even if your interface is connected before the 3ds is turned on, it shouldn't influence the 3ds operation if all your interface lines are in the high state.

If you don't understand what I am writing here, you are experimenting on a dangerous level.
In that case I would suggest you use the raspberry pi as it has proven to work.
If you are trying to learn something and don't mind frying your 3ds, ignore previous sentence.
 

greyneon

Well-Known Member
Newcomer
Joined
Sep 5, 2013
Messages
74
Trophies
0
Age
34
Location
Hidden Nuclear Base
XP
135
Country
Hmmm... Got some thing i have try now... Think my 10Mhz oscilloscope is enough? I disslike it xD want a better one lol.

But i have onebidea that acctually may work. Gonna test before i say more IF its a bad idea

Also i got it to work with the duemillanove before i fried it from a stupid misstake from a project... But never got so far to hook it to the 3ds
 

pietahpoeh

Member
Newcomer
Joined
Jan 26, 2014
Messages
9
Trophies
0
Age
43
XP
97
Country
Netherlands
Has someone considered the fact that the CLK signal is an output from the 3DS to the eMMC?
Bidirectional lines like the DAT0 are normally driven by open collector or open drain signals.
This means that the line has a pullup resistor to 3V3 and is pulled to GND by the device that wants that line to become low.
While the eMMC standard accepts multiple eMMC devices on the same bus, the 3ds likely isn't expecting something else taking over control of the eMMC interface.
So, basically, in normal operating conditions, the 3ds is controlling the lines. What happens if the 3ds can't access the eMMC? Will it turn of it's clock signal?
If you measure 2.xV on the clk signal, it's probably an average of the signal being switched between high and low. And as you aren't switching it, it's likely the 3ds doing it.

Most digital circuits that are not open collector or open drain survive when their outputs is pulled to gnd. They don't survive when there output is pulled or forced to 3V3.

So basically, we need to find out how we can stop the 3ds from generating the eMMC clk signals. When this condition is met, we should measure 3V3 on the clk signal (If our arduino interface drives it high as well) It wouldn't suprise me that forcing one of the other CMD or DAT0 lines low will disable the 3ds to eMMC communication (blue screen with error code) No idea if that turns off the 3ds clk generation. To proper see the condition of the clk signal, you will need an oscilloscope or a logic probe. You can even use the arduino bord to probe that signal. If you sample it several lines, and you measure high as well as low, it's likely constantly changing between high and low.

Also note that it could make a difference if you allow the 3ds to initialise the eMMC (only connect your interface after the 3ds was turned on) or if you don't allow it (connect your interface and turn it on before the 3ds)
Even if your interface is connected before the 3ds is turned on, it shouldn't influence the 3ds operation if all your interface lines are in the high state.

If you don't understand what I am writing here, you are experimenting on a dangerous level.
In that case I would suggest you use the raspberry pi as it has proven to work.
If you are trying to learn something and don't mind frying your 3ds, ignore previous sentence.

ok I understand, So to prefend the 3ds for the risk of frieing up we have to isolate the clk-signal from the 3ds.
 

ryuga93

Well-Known Member
Newcomer
Joined
Mar 8, 2011
Messages
96
Trophies
0
XP
159
Country
Malaysia
Has someone considered the fact that the CLK signal is an output from the 3DS to the eMMC?
Bidirectional lines like the DAT0 are normally driven by open collector or open drain signals.
This means that the line has a pullup resistor to 3V3 and is pulled to GND by the device that wants that line to become low.
While the eMMC standard accepts multiple eMMC devices on the same bus, the 3ds likely isn't expecting something else taking over control of the eMMC interface.
So, basically, in normal operating conditions, the 3ds is controlling the lines. What happens if the 3ds can't access the eMMC? Will it turn of it's clock signal?
If you measure 2.xV on the clk signal, it's probably an average of the signal being switched between high and low. And as you aren't switching it, it's likely the 3ds doing it.

Most digital circuits that are not open collector or open drain survive when their outputs is pulled to gnd. They don't survive when there output is pulled or forced to 3V3.

So basically, we need to find out how we can stop the 3ds from generating the eMMC clk signals. When this condition is met, we should measure 3V3 on the clk signal (If our arduino interface drives it high as well) It wouldn't suprise me that forcing one of the other CMD or DAT0 lines low will disable the 3ds to eMMC communication (blue screen with error code) No idea if that turns off the 3ds clk generation. To proper see the condition of the clk signal, you will need an oscilloscope or a logic probe. You can even use the arduino bord to probe that signal. If you sample it several lines, and you measure high as well as low, it's likely constantly changing between high and low.

Also note that it could make a difference if you allow the 3ds to initialise the eMMC (only connect your interface after the 3ds was turned on) or if you don't allow it (connect your interface and turn it on before the 3ds)
Even if your interface is connected before the 3ds is turned on, it shouldn't influence the 3ds operation if all your interface lines are in the high state.

If you don't understand what I am writing here, you are experimenting on a dangerous level.
In that case I would suggest you use the raspberry pi as it has proven to work.
If you are trying to learn something and don't mind frying your 3ds, ignore previous sentence.
Thanks for stating out this important point! I too was suspecting something that the console is creating the problem, but was not sure what is causing it,since the 3ds must be powered on to supply voltage to the emmc unlike the sd cards which obtain voltage from arduino.I was thinking of the possibility of providing external source to the emmc without the 3ds...

Hmmm... Got some thing i have try now... Think my 10Mhz oscilloscope is enough? I disslike it xD want a better one lol.

But i have onebidea that acctually may work. Gonna test before i say more IF its a bad idea

Also i got it to work with the duemillanove before i fried it from a stupid misstake from a project... But never got so far to hook it to the 3ds
You can hook the clock to the analog pin of your arduino too,just declare the pin as input,do an analog read,divide the value with 1023 and times with 5v,then print it on serial monitor
 

krisztian1997

Well-Known Member
OP
Member
Joined
Dec 14, 2013
Messages
370
Trophies
0
Age
27
XP
300
Country
Romania
Hmmm... Got some thing i have try now... Think my 10Mhz oscilloscope is enough? I disslike it xD want a better one lol.

But i have onebidea that acctually may work. Gonna test before i say more IF its a bad idea

Also i got it to work with the duemillanove before i fried it from a stupid misstake from a project... But never got so far to hook it to the 3ds

Ohh, its perfect that you got an oscilloscope, can you test the clock line while the 3ds is on and not connected to arduino, measure the arduino clock without the 3DS connected to it and then measure the 3ds clock when its connected to arduino and both of them are on.
 

obcd

Well-Known Member
Member
Joined
Apr 5, 2011
Messages
1,594
Trophies
0
XP
432
Country
Belgium
ok I understand, So to prefend the 3ds for the risk of frieing up we have to isolate the clk-signal from the 3ds.

isolating it might be difficult as for that you might need to cut a trace.
I assume there are methods to stop the 3ds clock signal in a high state somehow, as people can backup and restore their 3ds eMMC with an sd card reader.
They also can unlock and force erase it with a raspberry pi. I haven't heared of anyone frying his 3ds, but lowering the pullup resistors is a very bad idea as it increases the current needed to pull the line low.

Basically, 2 things need to be tested.

1. Finding a method to stop the 3ds clk signal and having that line in a high state. This can be checked by measuring it's voltage. It should be above 3.1V
2. Pulling such a frozen clock signal to gnd and measuring the current that is needed to do this.
If it's only a few hunderd microamps or even less, it's driven by an open drain on the 3ds as well and there is no danger in driving it with an additional open drain as well.
If it's several milliamps, it's driven with a logic gate. In such case it's hard to tell if it's 100% safe to drive the signal with external hardware without first isolating it.

The 3ds will probably be case 1. Even than, you should only pull the signals to gnd.
The resistor voltage divider gives a protection, as the maximum possible currents are limited by the resistors.
A (non open drain or open collector) buffer chip can easily drive several milli amps. This currents could be dangerous for the 3ds chip that controls the eMMC.

I can understand that most of you can deal with the software site of things, but have problems with the hardware.
It doesn't mean that correct interfacing the hardware is unimportant for a proper result (every time and reliable)

While experimenting with software usually isn't harmfull, the same can not be said about the hardware way of doing things.
 

greyneon

Well-Known Member
Newcomer
Joined
Sep 5, 2013
Messages
74
Trophies
0
Age
34
Location
Hidden Nuclear Base
XP
135
Country
Ohh, its perfect that you got an oscilloscope, can you test the clock line while the 3ds is on and not connected to arduino, measure the arduino clock without the 3DS connected to it and then measure the 3ds clock when its connected to arduino and both of them are on.

Will do.

isolating it might be difficult as for that you might need to cut a trace.
I assume there are methods to stop the 3ds clock signal in a high state somehow, as people can backup and restore their 3ds eMMC with an sd card reader.
They also can unlock and force erase it with a raspberry pi. I haven't heared of anyone frying his 3ds, but lowering the pullup resistors is a very bad idea as it increases the current needed to pull the line low.

Basically, 2 things need to be tested.

1. Finding a method to stop the 3ds clk signal and having that line in a high state. This can be checked by measuring it's voltage. It should be above 3.1V
2. Pulling such a frozen clock signal to gnd and measuring the current that is needed to do this.
If it's only a few hunderd microamps or even less, it's driven by an open drain on the 3ds as well and there is no danger in driving it with an additional open drain as well.
If it's several milliamps, it's driven with a logic gate. In such case it's hard to tell if it's 100% safe to drive the signal with external hardware without first isolating it.

The 3ds will probably be case 1. Even than, you should only pull the signals to gnd.
The resistor voltage divider gives a protection, as the maximum possible currents are limited by the resistors.
A (non open drain or open collector) buffer chip can easily drive several milli amps. This currents could be dangerous for the 3ds chip that controls the eMMC.

I can understand that most of you can deal with the software site of things, but have problems with the hardware.
It doesn't mean that correct interfacing the hardware is unimportant for a proper result (every time and reliable)

While experimenting with software usually isn't harmfull, the same can not be said about the hardware way of doing things.

Number one is one if the ideas i got. Resolder a cut trace is no problem. I am Used to solder smds under a microscope :-P
 

obcd

Well-Known Member
Member
Joined
Apr 5, 2011
Messages
1,594
Trophies
0
XP
432
Country
Belgium
Maybe there is a way to hold the 3ds in a reset condition after it's powered on? It's shouldn't drive the clk signal while in reset.
Not sure if it's possible/easy to do this.
 

Elusivo

Shinobu Molester
Member
Joined
Jun 21, 2013
Messages
486
Trophies
0
XP
702
Country
Portugal
wouldn't it work if the arduino was powering the nand instead of the 3ds battery? shouldn't be too hard to find a power pin for the nand no? There would be no need to turn on the 3ds, or for that we need more wires or something (besides the power wire ofc)?

The points i marked in red is the power for the nand right?
 

krisztian1997

Well-Known Member
OP
Member
Joined
Dec 14, 2013
Messages
370
Trophies
0
Age
27
XP
300
Country
Romania
Maybe there is a way to hold the 3ds in a reset condition after it's powered on? It's shouldn't drive the clk signal while in reset.
Not sure if it's possible/easy to do this.

I think that the problem is that the two devices are not synced while turning on... the arduino takes some time to boot up and untill it gets ready, the 3ds is already initialized with a different clock, and if the 3ds is plugged in after the arduino is initialized, its too late because the arduino thinks that its imposible to initialize the card and stops the execution of the code.
Edit: anyone willing to test my code now ? I added a super basic and ugly hot plug support, plug in a normal SD card first to initialize the arduino so there is a clock on CLK line, unplug the sd card, plug in the 3ds, wait around 5-6 seconds, then press i to reinitialize. If it doesnt works on first try, retry it 1-2 more times... I had succes with some card, but some failed to initialize when hot plugging.
 

ASUS

Well-Known Member
Newcomer
Joined
Jan 25, 2014
Messages
46
Trophies
0
Age
36
Location
Rio de Janeiro
XP
59
Country
Brazil
I think that the problem is that the two devices are not synced while turning on... the arduino takes some time to boot up and untill it gets ready, the 3ds is already initialized with a different clock, and if the 3ds is plugged in after the arduino is initialized, its too late because the arduino thinks that its imposible to initialize the card and stops the execution of the code.
Edit: anyone willing to test my code now ? I added a super basic and ugly hot plug support, plug in a normal SD card first to initialize the arduino so there is a clock on CLK line, unplug the sd card, plug in the 3ds, wait around 5-6 seconds, then press i to reinitialize. If it doesnt works on first try, retry it 1-2 more times... I had succes with some card, but some failed to initialize when hot plugging.



Log.

Enabled outputs/inputs
Initialized SPI with 250khz frequency
Waiting the minimum 80 cycles for warm up
Keeping CS line on low for communication
Card is in IDLE. Checking if the voltage is correct.
This is an SDHC (SD2) card
Set SET_BLOCKLEN to 512 byte
ReadCardStatus = 0,0
Password status: unlocked


----SD LOCKER MENU----
Programmed by Krisztian and Ryuga
Thanks Coto for your awesome CRC16 algorithm
This program is dedicated to crazyace2011 gbatemp
----------------------
i - REINITIALIZE
u - UNLOCK
l - LOCK
e - ERASE
x - TERMINATE EXECUTION
----------------------Enabled outputs/inputs
Initialized SPI with 250khz frequency
Waiting the minimum 80 cycles for warm up
Keeping CS line on low for communication
Reset command sent on MOSI, but no answer from the slave. Please check your card connection/soldering
ReadCardStatus = 11111111,11111111
Password status: locked


Switched to highest SPI frequency
Card Initialized
 

bkifft

avowed Cuthwaldian
Member
Joined
Jun 10, 2010
Messages
613
Trophies
0
XP
625
Country
Gambia, The
don't want to rain on your parade, but

Code:
Reset command sent on MOSI, but no answer from the slave. Please check your card connection/soldering
ReadCardStatus = 11111111,11111111
doesn't look all that good to me.
 

krisztian1997

Well-Known Member
OP
Member
Joined
Dec 14, 2013
Messages
370
Trophies
0
Age
27
XP
300
Country
Romania

Looks like it failed to initialize the 3ds for some reasons (you hotswapped like how I said, right ?). Try it again 2-3 more times and maybe its gonna work...
Great! I finally got my Uno today ^^

first thing first just hook a SD card to test. Will shout in a little while when i've tested on the 3DS
Awesome, please test it on an oscilloscope if it fails to work, to see if the clock line is fine
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    K3Nv2 @ K3Nv2: Lol rappers still promoting crypto