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:
USB | UART |
---|---|
White | GND |
Black | RXD |
Green | TXD |
Or, in photographic form (I cannibalised some jumpers to ease the soldering process):
Success!
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 SB_MMC_HS_52MHZ_1_8V_3V_IO 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.