Mengaktifkan RS232 pada Dragino MS48-LR

Mengaktifkan RS232 pada Dragino MS48-LR

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

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *