Port RS232 pada Dragino MS48-LR ternyata tidak langsung aktif setelah sistem operasi berjalan. Hal ini dapat menyebabkan perangkat yang terhubung melalui RS232 tidak dapat berkomunikasi meskipun dokumentasi atau wiki Dragino menyebutkan bahwa port RS232 menggunakan device /dev/ttyS2.
Pada tutorial ini akan dijelaskan cara mengaktifkan UART2 yang digunakan oleh port RS232 pada Dragino MS48-LR menggunakan Device Tree Overlay.
Tutorial ini cocok digunakan apabila ketika mengakses /dev/ttyS2 muncul error:
stty: /dev/ttyS2: Input/output error
Masalah tersebut dapat terjadi karena UART2 pada Device Tree berada dalam kondisi:
status = "disabled";
Dengan mengaktifkan UART2 melalui Device Tree Overlay, perangkat /dev/ttyS2 dapat digunakan kembali untuk komunikasi serial RS232.
1. Masalah Awal
Pada MS48-LR, RS232 menggunakan:
RS232 → UART2 → /dev/ttyS2
Namun ketika dicek:
cat /proc/tty/driver/serial
hasilnya seperti ini:
0: uart:16550A mmio:0x01C28000 irq:51
1: uart:16550A mmio:0x01C28400 irq:52
2: uart:unknown port:00000000 irq:0
Artinya ttyS2 memang ada, tetapi UART hardware belum aktif.
Akibatnya:
stty -F /dev/ttyS2 -a
menghasilkan:
stty: /dev/ttyS2: Input/output error
Kondisi tersebut menunjukkan bahwa device /dev/ttyS2 tersedia pada sistem, tetapi UART yang menjadi sumber hardware-nya belum diaktifkan.
2. Menemukan Penyebab
MS48-LR menggunakan:
Ubuntu 22.04.5 LTS
Kernel 5.15.43-draginohp0z
Board: sun8i-h3-dragino-hp-zero
Device Tree yang digunakan:
/boot/dtb-5.15.43-draginohp0z/sun8i-h3-dragino-hp-zero.dtb
Setelah Device Tree diperiksa, ditemukan:
serial@1c28800 {
compatible = "snps,dw-apb-uart";
...
status = "disabled";
...
reg = <0x1c28800 0x400>;
pinctrl-0 = <0x1f>;
pinctrl-names = "default";
};
Inilah akar masalahnya:
status = "disabled";
Padahal UART2 memiliki pin:
uart2-pins {
pins = "PA0\0PA1";
function = "uart2";
};
Jadi hardware dan pinmux tersedia, tetapi UART2 tidak diaktifkan.
Dengan kata lain, masalah bukan karena /dev/ttyS2 tidak tersedia, melainkan karena UART2 pada Device Tree masih berstatus disabled.
3. Backup Konfigurasi
Sebelum melakukan perubahan, lakukan backup terlebih dahulu:
cp /boot/armbianEnv.txt /boot/armbianEnv.txt.backup
Backup ini diperlukan agar konfigurasi sebelumnya masih dapat dikembalikan apabila terjadi kesalahan konfigurasi.
4. Buat Device Tree Overlay
Buat:
nano /boot/overlay-user/uart2-enable.dts
Isi:
/dts-v1/;
/plugin/;
/ {
compatible = "allwinner,sun8i-h3";
fragment@0 {
target = <&uart2>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&uart2_pins>;
status = "okay";
};
};
};
Simpan dengan:
Ctrl + O
Enter
Ctrl + X
Overlay tersebut digunakan untuk mengubah status UART2 dari:
disabled
menjadi:
okay
sehingga kernel dapat mengaktifkan UART2 ketika proses boot berlangsung.
5. Compile Overlay
Pastikan dtc tersedia:
which dtc
Kemudian compile:
dtc -@ -I dts -O dtb \
-o /boot/overlay-user/uart2-enable.dtbo \
/boot/overlay-user/uart2-enable.dts
Cek:
ls-lh /boot/overlay-user/uart2-enable.*
Hasilnya:
uart2-enable.dts
uart2-enable.dtbo
File .dts merupakan source Device Tree Overlay, sedangkan .dtbo merupakan hasil kompilasi yang nantinya akan digunakan oleh sistem ketika boot.
6. Aktifkan Overlay di Armbian
Buka:
nano /boot/armbianEnv.txt
Sebelumnya:
user_overlays=sun8i-h3-i2c1
ubah menjadi:
user_overlays=sun8i-h3-i2c1 uart2-enable
Jadi contohnya:
verbosity=1
bootlogo=false
console=both
disp_mode=1920x1080p60
overlay_prefix=sun8i-h3
rootfstype=ext4
user_overlays=sun8i-h3-i2c1 uart2-enable
rootdev=UUID=52dce95a-cf6b-4667-92df-d5eb89f31ab0
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
Perubahan tersebut memberitahu Armbian agar menggunakan overlay:
uart2-enable
pada saat proses boot.
7. Reboot
Jalankan:
reboot
Tunggu MS48-LR boot kembali dan SSH lagi.
8. Verifikasi UART2
Jalankan:
cat /proc/tty/driver/serial
Sebelumnya:
2: uart:unknown port:00000000 irq:0
Setelah berhasil:
2: uart:16550A mmio:0x01C28800 irq:53
Pada MS48-LR Anda hasil aktualnya:
0: uart:16550A mmio:0x01C28000 irq:51
1: uart:16550A mmio:0x01C28400 irq:52
2: uart:16550A mmio:0x01C28800 irq:53
Ini membuktikan UART2 sudah aktif.
Perubahan paling penting yang perlu diperhatikan adalah:
uart:unknown
menjadi:
uart:16550A
serta UART2 sekarang memiliki alamat MMIO:
0x01C28800
dan IRQ:
53
9. Verifikasi Kernel
Jalankan:
dmesg | grep-Ei'1c28800|ttyS2|uart'
Hasil yang benar:
1c28800.serial: ttyS2 at MMIO 0x1c28800 (irq = 53, base_baud = 1500000) is a 16550A
Output tersebut menunjukkan bahwa kernel Linux telah mendeteksi UART2 sebagai:
ttyS2
dengan hardware UART:
16550A
10. Verifikasi /dev/ttyS2
Jalankan:
ls-l /dev/ttyS2
Kemudian:
stty -F /dev/ttyS2 -a
Jika berhasil, tidak lagi muncul:
Input/output error
dan akan muncul konfigurasi serial seperti:
speed 9600 baud
cs8
-parenb
-cstopb
-crtscts
Pada tahap ini, /dev/ttyS2 sudah dapat digunakan sebagai interface serial untuk komunikasi RS232.
11. Konfigurasi RS232
Contoh untuk perangkat dengan:
Baudrate : 9600
Data : 8 bit
Parity : None
Stop : 1
Flow : None
gunakan:
stty -F /dev/ttyS2 9600 cs8 -cstopb -parenb -crtscts -ixon -ixoff
Konfigurasi tersebut adalah:
9600 8N1
Jika perangkat Anda menggunakan baudrate berbeda, sesuaikan.
Contoh:
stty -F /dev/ttyS2 19200 cs8 -cstopb-parenb-crtscts
atau:
stty -F /dev/ttyS2 115200 cs8 -cstopb-parenb-crtscts
Parameter serial harus disesuaikan dengan perangkat RS232 yang terhubung. Jika baudrate, parity, data bit, atau stop bit tidak sesuai, komunikasi serial dapat gagal meskipun UART2 sudah aktif.
12. Mengirim Data Melalui RS232
Untuk mengirim string:
echo-ne"TEST\r\n" > /dev/ttyS2
atau:
printf 'TEST\r\n' > /dev/ttyS2
Ini berguna untuk perangkat yang membutuhkan command/request.
Dengan demikian, setelah UART2 berhasil diaktifkan dan /dev/ttyS2 dapat diakses, MS48-LR dapat digunakan untuk melakukan komunikasi dengan perangkat eksternal melalui port RS232.
Kesimpulan
Masalah RS232 pada Dragino MS48-LR dalam kasus ini bukan disebabkan oleh tidak adanya device /dev/ttyS2.
UART2 sebenarnya tersedia pada hardware, tetapi pada Device Tree ditemukan konfigurasi:
status = "disabled";
Akibatnya sistem Linux mengenali entry /dev/ttyS2, tetapi hardware UART belum aktif dan menghasilkan:
uart:unknown port:00000000 irq:0
Setelah membuat dan mengaktifkan Device Tree Overlay, UART2 berubah menjadi:
uart:16550A mmio:0x01C28800 irq:53
dan kernel mendeteksinya sebagai:
ttyS2 at MMIO 0x1c28800
Dengan demikian, port:
RS232 → UART2 → /dev/ttyS2
sudah dapat digunakan untuk komunikasi serial.
Ringkasan Alur
RS232 tidak berfungsi
↓
Cek /proc/tty/driver/serial
↓
ttyS2 = uart:unknown
↓
Periksa Device Tree
↓
status = "disabled"
↓
Buat uart2-enable.dts
↓
Compile menjadi uart2-enable.dtbo
↓
Tambahkan uart2-enable ke armbianEnv.txt
↓
Reboot
↓
UART2 = 16550A
↓
/dev/ttyS2 aktif
↓
Konfigurasi baudrate / 8N1
↓
RS232 siap digunakan

