~~tag>Edge2 UART~~ ====== Edge2 UART ====== ===== Introduction ===== This page introduces the usage of hardware UART on [[products:sbc:edge2:applications:gpio:40pin-header|16-pin Header]]. For Edge2, in order to use the UART , you need to attach the IO extension board. ===== UART Information ===== | ^ UART ^ PIN ^ GPIO Name ^ GPIO Number ^ DT Overlays Node ^ Device Node ^ ^ Edge2 | UART7 | 12(TX) | GPIO3_C0 | 112 | edge2-io-uart | /dev/ttyS7 | | ::: | ::: | 14(RX) | GPIO3_C1 | 113 | ::: | ::: | ===== Enable UART ===== In order to use the UART, you need to enable the UART function via [[products:sbc:common:configurations:device-tree-overlay|Device Tree Overlay]]. Edit ''/boot/dtb/rockchip/rk3588s-khadas-edge2.dtb.overlay.env'' to add uart node to ''fdt_overlays'' node if it doesn't exist. e.g. Enable ''UART7'', you need to add ''edge2-io-uart'' to node ''fdt_overlays'' if it doesn't exist. ```shell fdt_overlays=edge2-io-uart ``` After reboot, you will see the UART device node. ```shell $ ls /dev/ttyS7 /dev/ttyS7 ``` ===== Demo Source Code ===== ```c uart.c #include #include #include #include #include #include // set serial path #define SERIAL_PORT "/dev/ttyS7" int main() { int serial_port; struct termios tty; // open serial_port = open(SERIAL_PORT, O_RDWR | O_NOCTTY); if (serial_port < 0) { perror("Error opening serial port"); return 1; } // Configuration of serial memset(&tty, 0, sizeof(tty)); if (tcgetattr(serial_port, &tty) != 0) { perror("Error getting serial port attributes"); close(serial_port); return 1; } cfsetospeed(&tty, B1500000); // set baud rate cfsetispeed(&tty, B1500000); tty.c_cflag |= (CLOCAL | CREAD); tty.c_cflag &= ~PARENB; tty.c_cflag &= ~CSTOPB; tty.c_cflag &= ~CSIZE; tty.c_cflag |= CS8; // write configration to serial if (tcsetattr(serial_port, TCSANOW, &tty) != 0) { perror("Error setting serial port attributes"); close(serial_port); return 1; } // loop test while (1) { // receive data char received_data[64]; if (read(serial_port, &received_data, sizeof(char)*64)) { // get data printf("Received: %s", received_data); } // Only send "Hello, UART!" char data_to_send[] = "Hello, UART!\n"; write(serial_port, data_to_send, strlen(data_to_send)); // sleep 100ms usleep(100000); } // close close(serial_port); return 0; } ``` Compile test code: ``` $ gcc uart.c -o uart ``` Run ''uart'' ``` $ ./uart ``` After connecting PIN12(STX), PIN14(CSO) and GND to PC, open ttyUSBX and input hello ``` 1 hello 2 Hello, UART! ``` Check output data: ``` $ ./uart Received: hello ``` ===== Disable UART to Use GPIO ===== If you want to use normal GPIO instead of UART, you can remove the UART node in [[products:sbc:common:configurations:device-tree-overlay|Device Tree Overlay]].