Mobile Action MA-8230P

Some time ago I bought a Mobile Action MA-8230P serial USB data cable and charger for my Samsung X460 cellular phone thinking that it might work fairly easily in Linux. This turned out not to be true. While the device registers as a well know serial-port converter it still has to be massaged to actually do something useful.

Be reverse engineering the windows tool for the cable I came up with 2 simple programs that utilizes the functions of the cable: charge and serial.


One of the neat features of this cable is that it has a built in charger - unfortunately this has to be activated by software. In Windows this is done with a small program (charger.exe) which I did not manage to get working in Wine.


I duplicated the actions of charger.exe as accurately as possible in charge.c:

To compile it:

gcc -o charge charge.c
Run it like this:

Serial port

The other major feature of the cable is to act as a serial cable. The following program activates the cable as USB to serial converter running at 115200 bps.

Run this program prior to attempting to communicate with the phone using something like say Gammu or Bitpim.



To compile it:

gcc -o serial serial.c
Run it like this:

Protocol snooping

In order to learn what it is that the windows tools are doing with the data cable I installed action on the serial port using the serial port snooping util Portmon. I had to select the "show hex data" option to get the hex values of non-ASCII chars.


Charger.exe is the small tool to enable the built-in charger. The captured log (portmon-charge.LOG) shows the Windows tool reading and setting to port parameters. Essentially this is what goes on:

  1. Set parameters
  2. Set RTS and DTR high
  3. Set RTS high and DTR low
  4. Send 'U' 'U' 'U' 'U' 0x4 0x1
  5. Close port

PhMgr.exe PhMgr.exe is the tool that manages the phone book, calendar, ring tones, etc. from the PC. It seems to more of the same RTS/DTR toggling nonsense:
  1. Set parameters (rate 115200, 9600)
  2. clear RTS, clear DTR
  3. Set parameters
  4. clear RTS, set DTR
  5. Set parameters
  6. set RTS, set DTR
  7. Write \r "ATE0" \r
  8. Flush
  9. set RTS, clr DTR
  10. Write "UUUU" 0x05
  11. Flush
  12. Read (11): "UU" 0xA5 \b "MA-CABLE"
  13. set RTS, clr DTR
  14. Write "UUUU" 0x06
  15. Flush
  16. Read (9): U 0xA5 0x06 0x03 0x00 0x01 0xFF 0x06
  17. set RTS, clr DTR
  18. Write UUUU 0x07
  19. Flush
  20. Write (16): DB 68 D2 D3 C0 1D CB E3 E5 F1 C2 DF 88 7D 00 C1
    (an other run returned 1B E2 B9 24 C4 2E 3F 8F CA 84 46 9E 6C 77 21 2C)
  21. Flush
  22. Read (12): 55 A5 09 46 BB 93 DB F1 94 4E DC 6B
    (an other run returned 55 A5 0C DF 08 C9 63 16 0C 42 81 FB 02 F6 42 )
  23. Close
  24. Open
  25. Set parameters: chars same, timeout different, rate: 115200
  26. ATZ
  27. AT+CGMM
What's inside?

Thinking that I might learn something I opened the beast, which didn't tell me nearly as much as I had hoped for. I found two ICs inside PL2303 (USB-to-RS232 bridge) and an EM78P153S (and 8 bit MCU). It is not clear to me why a small microprocessors is required, but it could explain why a software tool is required to enable the charger.

I was clumsy enough to tear the cables and had to reattach them - this is the order should you be misfortunate enough to do the same.

1 Black
2 Red
3 Blue
4 Orange
5 Yellow Charge + (~5V)
6 Brown GND
Copyright © 2006 Martin Leopold Created on January 12, 2006
Last modification on May 16, 2007