Fun with resistors (home/car dock mode + more)

Search This thread

Richthofen

Senior Member
Jul 13, 2010
387
78
In the land of the blind
This BD is for I9000B (because it is more specific than the one for I9000), so please ignore the TV tuner ;)

Even the BD shows VPS_L & VPS_R as NC, they are connected to Wolfson WM8994 directly.

JIG signal goes to AP PMIC (MAX8998), and it just to tells it to power up.
 

Attachments

  • GT-I9000B-BD.jpg
    GT-I9000B-BD.jpg
    93.2 KB · Views: 29,506

krazykidd

Member
Jul 16, 2010
37
1
pardon my nubbiness, but would this also work to trigger download mode in other phones aside from the vibrant?
 

TheBeano

Senior Member
Jul 18, 2010
355
218
pardon my nubbiness, but would this also work to trigger download mode in other phones aside from the vibrant?

In theory it should work on any of the Galaxy S range. There are other Samsung phones that use similar USB switching chips, e.g. the GT-S8500, but I am less sure about them, you would need to dig into their open source code to check.
 

TheBeano

Senior Member
Jul 18, 2010
355
218
I made some progress with the UART on the USB port: I got a kernel boot log off it (attached). This is with resistor value 619K (RID_FM_BOOT_ON_UART).

To hook this up you need a USB-to-2.8V or 3.3V serial adapter. I'm using the Seeedstudio UARTSB v2.1, just because I already had one. Their latest version 3.0 UartSBee is here and should also work. You can't use a USB-to-RS232 serial adapter, the voltages are all wrong. See this article for links to other suitable adapters:
http://www.instructables.com/id/Android-G1-Serial-Cable/

The hookup goes:
MicroUSB pin 2 (D-) -> UARTSB RXD
MicroUSB pin 3 (D+) -> UARTSB TXD
MicroUSB pin 5 (GND) -> UARTSB GND
MicroUSB pin 4/5 (ID/GND) -> 619K resistor

If you're using the UARTSB set the VCC switch to 3.3V. If you're using a TTL level board don't hook up the TXD to USB pin 3 as the voltage is too high, leave it disconnected or use a voltage divider to drop the voltage.

On your PC run a terminal program like Teraterm, select the UARTSB serial port and set the baud rate to 115200.

Switch the phone off, wait for it to shut down completely, then plug in the dongle. Like the USB jig version it switches the phone on automatically, then you should see the boot log in the terminal program.

The phone boots normally with this resistor value, that is it doesn't go into download mode. Its only use seems to be to turn on the serial output, as it doesn't appear without this resistor in place. The other UART resistor value, RID_FM_BOOT_OFF_UART, does exactly the same thing including switching the phone on.

The boot log is probably not a lot of use for most people but if you can't repair your phone it may give you some insight as to why it isn't booting. Also it could be handy for ROM developers.
 

Attachments

  • bootlog.txt
    7 KB · Views: 618
Last edited:

TheBeano

Senior Member
Jul 18, 2010
355
218
Oh the 619K value makes it think it's docked (and triggers Google Car Home) where the 523K doesn't, so maybe that's the OFF vs ON difference.

Here's a photo of the setup, just because I'm amazed it's so tidy.
 

TheBeano

Senior Member
Jul 18, 2010
355
218
The three-button hotkeys are active while this is going on so you can get a log of going into download and recovery mode (not very interesting).

Download mode:
Code:
--- (PBL and SBL start snipped) ---
keypad_scan: key value ----------------->= 0x50
CONFIG_ARIES_REV:48 , CONFIG_ARIES_REV03:48
keypad_scan: handler name = usb download

==> Welcome to ARIES!
==> Entering usb download mode..
DISPLAY_PATH_SEL[MDNIE 0x1]is on
MDNIE setting Init start!!
vsync interrupt is off
video interrupt is off
[fb0] turn on
MDNIE setting Init end!!

Recovery mode:
Code:
keypad_scan: key value ----------------->= 0x60
CONFIG_ARIES_REV:48 , CONFIG_ARIES_REV03:48
aries_process_platform: final s1 booting mode = 0
DISPLAY_PATH_SEL[MDNIE 0x1]is on
MDNIE setting Init start!!
vsync interrupt is off
video interrupt is off
[fb0] turn on
MDNIE setting Init end!!

Autoboot (0 seconds) in progress, press any key to stop
get_debug_level current debug level is 0x574f4c44.
get_debug_level current debug level is 0x574f4c44.
boot_kernel: Debug Level Low
FOTA Check Bit
 Read BML page=, NumPgs=
FOTA Check Bit (0xffffffff)
Load Partion idx = (6)
..............................done
Kernel read success from kernel partition no.6, idx.6.
setting param.serialnr=0x******** 0x********
setting param.board_rev=0x30
setting param.cmdline=bootmode=2 console=ttySAC2,115200 loglevel=4

Starting kernel at 0x32000000...
 

TheBeano

Senior Member
Jul 18, 2010
355
218
If you hook up the TXD line to D+ on the port, and hammer the return key in the terminal program while it's booting, you get this:
Code:
Autoboot (0 seconds) in progress, press any key to stop Autoboot aborted..
SBL> help
Following commands are supported:
* setenv
* saveenv
* printenv
* help
* reset
* boot
* kernel
* format
* open
* close
* erasepart
* eraseall
* loadkernel
* showpart
* addpart
* delpart
* savepart
* nkernel
* nramdisk
* nandread
* nandwrite
* usb
* mmctest
* keyread
* usb_read
* usb_write
* fuelgauge
* pmic_read
* pmic_write
To get commands help, Type "help <command>"
SBL>

Looks handy. :)
 

vinclar

Senior Member
Sep 7, 2010
154
14
Reus
If you hook up the TXD line to D+ on the port, and hammer the return key in the terminal program while it's booting, you get this:
Code:
Autoboot (0 seconds) in progress, press any key to stop Autoboot aborted..
SBL> help
Following commands are supported:
* setenv
* saveenv
* printenv
* help
* reset
* boot
* kernel
* format
* open
* close
* erasepart
* eraseall
* loadkernel
* showpart
* addpart
* delpart
* savepart
* nkernel
* nramdisk
* nandread
* nandwrite
* usb
* mmctest
* keyread
* usb_read
* usb_write
* fuelgauge
* pmic_read
* pmic_write
To get commands help, Type "help <command>"
SBL>

Looks handy. :)

If the phone is fully bricked with this maybe you can fix it? Would be nice!
 

TheBeano

Senior Member
Jul 18, 2010
355
218
If the phone is fully bricked with this maybe you can fix it? Would be nice!

It's part of the SBL so if the phone is black-screen bricked (no SBL) it won't help.

Needless to say I have no idea what most of these commands do and a lot of them look lethal so experiment at your own risk. :)
 

vinclar

Senior Member
Sep 7, 2010
154
14
Reus
It's part of the SBL so if the phone is black-screen bricked (no SBL) it won't help.

Needless to say I have no idea what most of these commands do and a lot of them look lethal so experiment at your own risk. :)

Lol, no need to kill my phone, but if someone with a fullybricked phone or a jtag user and tries it can report what this does.

Thanks for sharing the knowledge
 

hms666

Member
Jul 29, 2008
44
1
I get .621 on 2M scale with a cheap multimeter and the sdm resistor in cardock has 77D (619K) printed on it.

Sent from my GT-I9000 using XDA App
 

SkOrPn

Senior Member
Jun 3, 2007
2,994
948
Albuquerque, NM
www.planetamd64.com
Anyone know what value resistor triggers recovery mode? I have entered into download mode via the 301k resistor, but the graph in the OP does not make it clear in laymens terms, lol. Is it the 255k resistor that triggers recovery mode?
 

TheBeano

Senior Member
Jul 18, 2010
355
218
Ahh Ok, so what resistor would call up recovery mode, if any? Surely they didnt leave that mode out or did they?

I don't know, it seems clear that a lot of the names in the OP don't correspond to the actual function in this phone (e.g. RID_FM_BOOT_ON_UART is really car dock mode) so there are a lot of values to try. They don't strictly need a value for recovery mode since if you have download mode you can flash a kernel with recovery mode fairly easily, so they may have just left it out altogether.
 

SkOrPn

Senior Member
Jun 3, 2007
2,994
948
Albuquerque, NM
www.planetamd64.com
I don't know, it seems clear that a lot of the names in the OP don't correspond to the actual function in this phone (e.g. RID_FM_BOOT_ON_UART is really car dock mode) so there are a lot of values to try. They don't strictly need a value for recovery mode since if you have download mode you can flash a kernel with recovery mode fairly easily, so they may have just left it out altogether.

Ok, the reason I ask is because I was thinking of manufacturing a single cable with a multi-position switch that would get me Download Mode, Recovery Mode and Straight through to the computers USB pins all in one shot, so I would not have to remove the cable (JIG) from the computer. I hate with a passion trying to push the buttons just right and so do my fingers lol. I will try every value resistor I have at my disposal to see what happens. thanks again...
 

BruceElliott

Senior Member
Aug 31, 2010
430
80
San Antonio
Ok, the reason I ask is because I was thinking of manufacturing a single cable with a multi-position switch that would get me Download Mode, Recovery Mode and Straight through to the computers USB pins all in one shot, so I would not have to remove the cable (JIG) from the computer. I hate with a passion trying to push the buttons just right and so do my fingers lol. I will try every value resistor I have at my disposal to see what happens. thanks again...

I doubt that Recovery is accessible by this method, because Recovery is much higher-level, requiring elements of the OS, including a memory map. In contrast, Download is executed by the SBL at boot time, before the OS loads.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 22
    We've already established that a resistor on the micro USB port can be used to force the Galaxy S into download mode, but the USB switching chip used on the phone has a lot of other capabilities that are triggered by different resistors between pin 4 and 5 of the plug.

    Update 6 March 2011: Confirmed modes so far:
    Desk Dock: 365K (also works with 1K)
    Car Dock: 619K
    In these modes audio output can be switched to pins D- and D+ of the USB port (D- is left) but this is not done by default, see this thread.

    Serial port/UART: RID_FM_BOOT_OFF_UART (523K)
    Read the rest of this thread for more details on using this port.
    Other resistor values that also enable the serial port:
    RID_AUD_DEV_TY_2 (80.07K): Doesn't switch the phone on, but produces bootlog output on the serial port when you switch it on manually. The bootlog output only starts partway through the second bootloader, rather than from the start of the primary bootloader.
    UART_CABLE (150K): Same as RID_AUD_DEV_TY_2


    Download mode:
    301K (this thread).

    Here is a list of all the resistor values, from fsa9480_i2c.h in the open source code for JPM. The resistor goes from pin 4 to pin 5 of the micro USB plug (full details on how to wire this up are in this thread). When you connect the plug with the resistor (in Froyo) you should see some messages from the fsa9480 driver in the kernel log, which you can view with the "dmesg" command.

    Code:
    RID_USB_OTG_MODE,	/* 0 0 0 0 0 	GND 		USB OTG Mode              */
    RID_AUD_SEND_END_BTN,	/* 0 0 0 0 1 	2K		Audio Send_End Button*/
    RID_AUD_REMOTE_S1_BTN,	/* 0 0 0 1 0 	2.604K		Audio Remote S1 Button */
    RID_AUD_REMOTE_S2_BTN,	/* 0 0 0 1 1 	3.208K		Audio Remote S2 Button                         */
    RID_AUD_REMOTE_S3_BTN,	/* 0 0 1 0 0 	4.014K		Audio Remote S3 Button */
    RID_AUD_REMOTE_S4_BTN,	/* 0 0 1 0 1 	4.82K		Audio Remote S4 Button */
    RID_AUD_REMOTE_S5_BTN,	/* 0 0 1 1 0 	6.03K		Audio Remote S5 Button */
    RID_AUD_REMOTE_S6_BTN,	/* 0 0 1 1 1 	8.03K		Audio Remote S6 Button */
    RID_AUD_REMOTE_S7_BTN,	/* 0 1 0 0 0 	10.03K		Audio Remote S7 Button */
    RID_AUD_REMOTE_S8_BTN,	/* 0 1 0 0 1 	12.03K		Audio Remote S8 Button */
    RID_AUD_REMOTE_S9_BTN,	/* 0 1 0 1 0 	14.46K		Audio Remote S9 Button */
    RID_AUD_REMOTE_S10_BTN,	/* 0 1 0 1 1 	17.26K		Audio Remote S10 Button */
    RID_AUD_REMOTE_S11_BTN,	/* 0 1 1 0 0 	20.5K		Audio Remote S11 Button */
    RID_AUD_REMOTE_S12_BTN,	/* 0 1 1 0 1 	24.07K		Audio Remote S12 Button */
    RID_RESERVED_1,		/* 0 1 1 1 0 	28.7K		Reserved Accessory #1 */
    RID_RESERVED_2,		/* 0 1 1 1 1 	34K 		Reserved Accessory #2 */
    RID_RESERVED_3,		/* 1 0 0 0 0 	40.2K		Reserved Accessory #3 */
    RID_RESERVED_4,		/* 1 0 0 0 1 	49.9K		Reserved Accessory #4 */
    RID_RESERVED_5,		/* 1 0 0 1 0 	64.9K		Reserved Accessory #5 */
    RID_AUD_DEV_TY_2,	/* 1 0 0 1 1 	80.07K		Audio Device Type 2 */
    RID_PHONE_PWD_DEV,	/* 1 0 1 0 0 	102K		Phone Powered Device */
    RID_TTY_CONVERTER,	/* 1 0 1 0 1 	121K		TTY Converter */
    RID_UART_CABLE,		/* 1 0 1 1 0 	150K		UART Cable */
    RID_CEA936A_TY_1,	/* 1 0 1 1 1 	200K		CEA936A Type-1 Charger(1) */
    RID_FM_BOOT_OFF_USB,	/* 1 1 0 0 0 	255K		Factory Mode Boot OFF-USB */
    RID_FM_BOOT_ON_USB,	/* 1 1 0 0 1 	301K		Factory Mode Boot ON-USB */
    RID_AUD_VDO_CABLE,	/* 1 1 0 1 0 	365K		Audio/Video Cable */
    RID_CEA936A_TY_2,	/* 1 1 0 1 1 	442K		CEA936A Type-2 Charger(1) */
    RID_FM_BOOT_OFF_UART,	/* 1 1 1 0 0 	523K		Factory Mode Boot OFF-UART */
    RID_FM_BOOT_ON_UART,	/* 1 1 1 0 1 	619K		Factory Mode Boot ON-UART */
    RID_AUD_DEV_TY_1_REMOTE,	/* 1 1 1 1 0 	1000.07K	Audio Device Type 1 with Remote(1) */
    RID_AUD_DEV_TY_1_SEND = RID_AUD_DEV_TY_1_REMOTE ,		/* 1 1 1 1 0 	1002K		Audio Device Type 1 / Only Send-End(2) */
    RID_USB_MODE,		/* 1 1 1 1 1 	Open		USB Mode, Dedicated Charger or Accessory Detach */
    3
    Thanks, I had a quick look and they no longer use the FSA9480 chip for the USB interface, instead it looks like they use the MAX77693 chip, same as the Galaxy SIII. There is a resistor table for cable detection in the code that has the same values for the car dock etc.:
    Code:
    	ADC_DOCK_VOL_DN		= 0x0a, /* 0x01010 14.46K ohm */
    	ADC_DOCK_VOL_UP		= 0x0b, /* 0x01011 17.26K ohm */
    	ADC_DOCK_PLAY_PAUSE_KEY = 0x0d,
    	ADC_SMARTDOCK		= 0x10, /* 0x10000 40.2K ohm */
    	ADC_AUDIODOCK		= 0x12, /* 0x10010 64.9K ohm */
    	ADC_CEA936ATYPE1_CHG	= 0x17,	/* 0x10111 200K ohm */
    	ADC_JIG_USB_OFF		= 0x18, /* 0x11000 255K ohm */
    	ADC_JIG_USB_ON		= 0x19, /* 0x11001 301K ohm */
    	ADC_DESKDOCK		= 0x1a, /* 0x11010 365K ohm */
    	ADC_CEA936ATYPE2_CHG	= 0x1b, /* 0x11011 442K ohm */
    	ADC_JIG_UART_OFF	= 0x1c, /* 0x11100 523K ohm */
    	ADC_JIG_UART_ON		= 0x1d, /* 0x11101 619K ohm */
    	ADC_CARDOCK		= 0x1d, /* 0x11101 619K ohm */
    #if defined(CONFIG_MUIC_DET_JACK)
    	ADC_EARJACK		= 0x1e, /* 0x11110 1000 or 1002 ohm */

    But there are a lot of conditional compile settings e.g.
    #if !defined(CONFIG_MUIC_MAX77693_SUPPORT_CAR_DOCK)

    So they may have compiled it without this activated for the Note 2. Possibly the SGS III forums have more info?
    I got PM'ed by a user for a feature request on the Note 2, currently by default it is compiled with:

    CONFIG_MUIC_MAX77693_SUPPORT_OTG_AUDIO_DOCK=y
    CONFIG_MUIC_MAX77693_SUPPORT_SMART_DOCK=y

    Car dock entry is missing in the default defconfig. The S3 has none of these options checked:

    # CONFIG_MUIC_MAX77693_SUPPORT_OTG_AUDIO_DOCK is not set
    # CONFIG_MUIC_MAX77693_SUPPORT_SMART_DOCK is not set
    # CONFIG_MUIC_MAX77693_SUPPORT_CAR_DOCK is not set

    Also, keep in mind we're talking international S3, US version has different PMICs.

    So here's a kernel for both devices with all the three options enabled: S3 build upon this kernel, and the N2 on this one (Almost the same).

    Again, both these have:

    CONFIG_MUIC_MAX77693_SUPPORT_OTG_AUDIO_DOCK=y
    CONFIG_MUIC_MAX77693_SUPPORT_SMART_DOCK=y
    CONFIG_MUIC_MAX77693_SUPPORT_CAR_DOCK=y

    I currently have no device/dock to test this functionality other than simple OTG, so I post it here for because of the specificity of the request. If it works I will keep it for both in the stable kernels.

    Edit: I have moved this functionality onto the my main kernels and you should visit the threads linked above for downloads of new versions.
    2
    Some notes about the UART:

    The UART device is /dev/ttySAC2 but you need to create a device node for it as described in this file from the kernel source:
    Documentation/arm/Samsung-S3C24XX/Overview.txt

    So use this command (root required):
    Code:
    mknod ttySAC2 c 204 66

    The UART is switched between the MODEM (radio) and PDA (CPU) by the device /sys/devices/virtual/sec/switch/uart_sel

    You can see what the current state is with this command:
    Code:
    cat /sys/class/sec/switch/uart_sel
        [UART Switch] Current UART owner = PDA

    You can change the state with:
    Code:
       echo PDA> /sys/class/sec/switch/uart_sel
    or
       echo MODEM> /sys/class/sec/switch/uart_sel

    You can tell when it's connected to MODEM because it will respond to AT commands, e.g.
    Code:
    ATI0
     Manufacturer: SAMSUNG
    
     Model: I9000
    
     Revision: I9000XXJPP
    
     IMEI: ***************

    The baud rate is set to 115200 at boot time, I don't know how to change it as yet.
    2
    Hi! After modding USB port to behave as UART, is it possible to use this port for custom data and not just for debug output? For instance, I would like to open ttySAC2 port with putty and enter some text which would then be transferred to my PC.
    Yes the ttySAC2 port works fine. In some configurations the serial port that's connected to the USB pins gets switched to the MODEM after boot and you need to switch it back, like this (from a terminal command line on the phone):

    echo PDA > /sys/class/sec/switch/uart_sel
    echo hi>/dev/ttySAC2 (you should see "hi" on a connected serial terminal).
    2
    Noob question but on the list of resistor values does the */11101 indicate the usb pins to connect? or is it always 4 and 5?
    It is always pins 4 & 5. The binary bits indicate the value in the ADC (Analog to Digital Converter) register on the chip, under "//CR7 : ADC Register" in the fsa9480_i2c.h file.