====== UART interface using the Tinkering Kit ====== There are two UART ports on the C2. \\ They are 3.3Volt (LVTTL) interface and there is no 5Volt tolerance. The first one is mapped to /dev/ttyS1 which is connected to 40-pin header Pin #8 & #10 & ground pin.\\ 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. * **ODROID-C2** * USB-UART Module Kit * jumper wire x4 * serial comunication utility on your Host PC 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.**\\ {{:en:c1:odroidc1_uart.jpg?300|}} 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-C2**) setup.\\ Set a serial node on your **ODROID-C2** stty -F /dev/ttyS1 115200 3. **ODROID-C2** -> HOST PC test.\\ **ODROID-C2** echo 1 > /dev/ttyS1 4. HOST PC -> **ODROID-C2** test.\\ **ODROID-C2** cat /dev/ttyS1 HOST PC\\ Send characters via minicom. ==== 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 ==== Another UART port on 40pin header ==== If you don't use an I2C interface(i2c-1) on pin#3 & pin#5, you can use them to activate the UART2.\\ Just follow **campbell**'s development note to have a new UART2 port via /dev/ttyS2.\\ Note that Pin#3(SDA1) is mapped to Tx and Pin#5(SCL1) is Rx.\\ [[http://forum.odroid.com/viewtopic.php?f=139&t=25371|How to enable a third UART ttyS2 by "campbell"]] ==== 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 === [[http://forum.odroid.com/viewtopic.php?f=115&t=17279|How to enable the RTS/CTS]] ==== How to enable UART_B and UART_C ports ==== Up to 4 ports can be used for UART in ODROID-C2---UART_A0(Serial console), UART_A, UART_B and UART_C.\\ There are UART_A, UART_B and UART_C in [[http://odroid.com/dokuwiki/doku.php?id=en:c2_hardware#expansion_connectors|expansion connectors of ODROID-C2]]. * //// | //// * UART_A TX | 8 * UART_A RX | 10 * UART_B TX | 3 * UART_B RX | 5 * UART_C TX | 32 * UART_C RX | 26 In order to enable UART_B and UART_C ports, it is necessary to modify the //meson64_odroidc2.dts// file. 1. Kernel source download sudo apt-get update sudo apt-get install git git clone --depth 1 https://github.com/hardkernel/linux.git -b odroidc2-3.14.y 2. Delete I2C_A definition I2C_A uses same pins as UART_B by pinmux. So, i2c_a definition needs to be removed. * //($LINUX)/arch/arm64/boot/dts/meson64_odroidc2.dts// iff --git a/arch/arm64/boot/dts/meson64_odroidc2.dts b/arch/arm64/boot/dts/meson64_odroidc2.dts index e6a25b0..db09b04 100755 --- a/arch/arm64/boot/dts/meson64_odroidc2.dts +++ b/arch/arm64/boot/dts/meson64_odroidc2.dts @@ -813,18 +813,6 @@ }; -&i2c_a { - status = "okay"; - - /* Hardkernel I2C RTC */ - pcf8563: pcf8563@51 { - status = "disabled"; - compatible = "nxp,pcf8563"; - reg = <0x51>; - #clock-cells = <0>; - }; -}; - &i2c_b { status = "okay"; 3. Add UART_B and UART_C definitions * //($LINUX)/arch/arm64/boot/dts/meson64_odroidc2.dts// diff --git a/arch/arm64/boot/dts/meson64_odroidc2.dts b/arch/arm64/boot/dts/meson64_odroidc2.dts index e6a25b0..fd41552 100755 --- a/arch/arm64/boot/dts/meson64_odroidc2.dts +++ b/arch/arm64/boot/dts/meson64_odroidc2.dts @@ -31,6 +31,8 @@ aliases { serial0 = &uart_AO; serial1 = &uart_A; + serial2 = &uart_B; + serial3 = &uart_C; }; gpu_dvfs_tbl: gpu_dvfs_tbl { @@ -459,6 +461,32 @@ pinctrl-0 = <&a_uart_pins>; }; + uart_B: serial@c11084dc { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc11084dc 0x0 0x18>; + interrupts = <0 75 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + pinctrl-0 = <&b_uart_pins>; + resets = <&clock GCLK_IDX_UART1>; + }; + + uart_C: serial@c1108700 { + compatible = "amlogic, meson-uart"; + reg = <0x0 0xc1108700 0x0 0x14>; + interrupts = <0 93 1>; + status = "okay"; + clocks = <&clock CLK_XTAL>; + clock-names = "clk_uart"; + fifosize = < 64 >; + pinctrl-names = "default"; + pinctrl-0 = <&c_uart_pins>; + resets = <&clock GCLK_IDX_UART2>; + }; + canvas { compatible = "amlogic, meson, canvas"; dev_name = "amlogic-canvas"; * [[https://gist.githubusercontent.com/bkrepo/ae548109e3f94fd41fed2defa270057b/raw/b50265071e0c4bfe22fcc418aba938bf843bfa8a/meson64_odroidc2.dts|meson64_odroidc2.dts]] 4. Install modified dtb file make odroidc2_defconfig make dtbs sudo cp -f arch/arm64/boot/dts/meson64_odroidc2.dtb /media/boot/ sudo reboot 5. Done