This page introduces the usage of hardware UART on 16-pin Header.
For Edge2, in order to use the UART , you need to attach the IO extension board.
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 |
In order to use the UART, you need to enable the UART function via 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.
fdt_overlays=edge2-io-uart
After reboot, you will see the UART device node.
$ ls /dev/ttyS7
/dev/ttyS7
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <termios.h> // 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
If you want to use normal GPIO instead of UART, you can remove the UART node in Device Tree Overlay.