Table of Contents

UART interface using the C1 Tinkering Kit

There are two UART ports on the C1/C0.

The first one is mapped to /dev/ttyS2 which is connected to 40-pin header Pin #8 & #10.

The second one is mapped to /dev/ttyS0 which is connected to Serial Console Port CON5.

How to test external UART pin on the 40-pin header

You need to prepare below items.

You will connect jumper wire as below picture.
Connect the USB-PORT of USB-UART Module to your HOST PC
The RXD and TXD must be twisted each other.

1. HOST PC setup.
You will open USB Module Device on your HOST PC.
Ubuntu
Install serial comunication utility.

sudo apt-get install minicom

After check your usb serial node, Open serial port.

ls /dev/ttyUSB*
sudo minicom -b 115200 -D /dev/ttyUSB0

2. Target board(ODROID-C1) setup.
Set a serial node on your ODROID-C1

stty -F /dev/ttyS2 115200

3. ODROID-C1 → HOST PC test.
ODROID-C1

echo 1 > /dev/ttyS2

4. HOST PC → ODROID-C1 test.
ODROID-C1

cat /dev/ttyS2

HOST PC
Send characters via minicom.

How to enable another UART /dev/ttyS1 on 40 Pin Header

Pin Map : GPIOX.4[29, TXD], GPIOX.5[18, RXD]

To use the UART(/dev/ttyS1), you first need to update the kernel version to “3.10.104” or higher.

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

1. Install the device-tree compiler package

sudo apt-get install device-tree-compiler

2. Download dts file from our github.

wget https://github.com/hardkernel/linux/raw/odroidc-3.10.y/arch/arm/boot/dts/meson8b_odroidc.dts

3. Edit dts file.

vi meson8b_odroidc.dts

4. find uart_ao & add uart_0 definition.

...
        uart_ao{
                compatible = "amlogic,aml_uart";
                port_name = "uart_ao";
                status = "okay";
                dev_name = "uart_ao";
                pinctrl-names = "default";
                pinctrl-0 = <&ao_uart_pins>;
        };
        
        /* edit & add code */
        uart_0{
                compatible = "amlogic,aml_uart";
                port_name = "uart_a";
                status = "okay";
                dev_name = "uart_0";
                pinctrl-names = "default";
                pinctrl-0 = <&a_uart_pins>;
        };
        /* end add */
        
        uart_1{
                compatible = "amlogic,aml_uart";
                port_name = "uart_b";
                status = "okay";
                dev_name = "uart_1";
                pinctrl-names = "default";
                pinctrl-0 = <&b_uart_pins>;
        };
...

5. find pinmux & add uart_0 pin mux.

...
        ao_uart_pins:ao_uart{
                amlogic,setmask=<10 0x1800>;
                amlogic,pins="GPIOAO_0", "GPIOAO_1";
                amlogic,pullup=<1>;
                amlogic,pullupen=<1>;
        };

        /* edit & add code */
        a_uart_pins:a_uart{
                amlogic,setmask=<4 0x30000>;
                amlogic,pins="GPIOX_4", "GPIOX_5";
                amlogic,pullup=<1>;
                amlogic,pullupen=<1>;
        };
        /* end add */

        b_uart_pins:b_uart{
                amlogic,setmask=<4 0x0300>;
                amlogic,pins="GPIOX_16", "GPIOX_17";
                amlogic,pullup=<1>;
                amlogic,pullupen=<1>;
        };
...

6. save dts file & compile dts file

dtc -O dtb -o ./meson8b_odroidc.dtb ./meson8b_odroidc.dts

7. update dtb file & reboot

sudo cp ./meson8b_odroidc.dtb /media/boot/meson8b_odroidc.dtb && sync
sudo reboot

Pin Map : UART pin on the 4-pin CON5 connector

_____UART____
|           |
|Pin 4 - GND|
|Pin 3 - RXD|
|Pin 2 - TXD|
|Pin 1 - VCC|
|_          |
  |_________|

3.3V LVTTL

Automatically configure the UART settings.

This is an example of default setting for a GPS module which has a 9600bpsN81 UART interface.
Add the following to the end of /etc/rc.local (before the exit 0)

/bin/stty -F /dev/ttyS2 raw 9600 cs8 clocal -cstopb > /dev/null 2>&1

This way the tty port is setup for use with the gps on system boot, without user interaction.

Tips for UART port

How to enable the RTS/CTS