UART on Galaxy S3 and Note 2

Over the next few months (years?) I plan on working on porting several Android-based Exynos 4412-based devices - namely, the Galaxy S3 (of which there are three Exynos4412-based variants), and the Galaxy Note 2 (of which there are two variants). The first step, I figured, was probably to get UART working on the vendor-provided Linux 3.0 kernel: Fortunately, I was not the first person to attempt this, and there are a few guides on constructing a cable suitable for the process.

Note, the UART output is multiplexed over the MicroUSB port by a MAX77693 MUIC, not an FSA9485 as the XDA guide suggests.

So, equipped with the knowledge I needed, I went shopping (yay!). I bought a CP1202 USB-to-UART adapter, and a microUSB cable with a 523kΏ resistor. After a lot of waiting, both pieces finally arrived, and I could get hacking. I tore apart carefully cut the cable - only the microUSB end is of any use.

Making it work

Before soldering, I thought it might be good idea to use some jumper wires (conveniently packaged alongside the UART adapter) to check that my wiring was connect.

This was not a good idea.

It turns out, UART is pretty reliant on having a stable ground connection (who would've thought?). Jumper cables don't make providing such a connection easy. After much fighting with the cables, I managed to get a couple of lines of semi-readable output on the UART console - the trick was to solder the USB cable connectors to the relevant ports on the UART, and to swap the TX and RX cables around.

So, I end up with this:

White GND
Black RXD
Green TXD

Or, in photographic form (I cannibalised some jumpers to ease the soldering process):

uart cable


After successfully soldering the cable, I plugged my hand-crafted UART cable into the computer and launched a serial console (sudo screen /dev/ttyUSB0 115200). Next, I powered off the phone, and plugged it in - success! The phone starts to boot, and I get this on the UART console:

PMIC rev = PASS2(4)
BUCK1OUT(vdd_mif) = 0x06
BUCK3DVS1(vdd_int) = 0x28
[MMC] there are pending interrupts 0x00010000
cardtype: 0x00000007
mmc->card_caps: 0x00000311
mmc->host_caps: 0x00000311
mmc_initialize: mmc->capacity = 30777344

Unfortunately, at this point the UART seems to cut out (outputting ) until about four seconds into the kernel boot sequence. I have no idea why, but this means that dropping into the bootloader shell is not possible for now.

So, I guess the next step is to get a mainline serial console (and more?) working.