بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم

Untuk bisa mengendalikan sebuah LCD TFT, tentu saja mikrokontroler (MCU) harus dihubungkan dengan LCD sesuai dengan antarmuka LCD tersebut. Tentu saja MCU tidak langsung mengendalikan piksel-piksel di modul LCD, MCU akan “berhubungan” dengan sebuah kendali (display controller) untuk mengendalikan LCD. Kendali inilah yang akan menentukan antarmuka apa yang cocok untuk digunakan dalam mengendalikan LCD.

Sistem Aplikasi LCD

Selain itu diperlukan juga memori untuk menyimpan data piksel yang akan ditampilkan ke LCD. Memori ini dinamakan dengan graphic RAM (GRAM) atau biasa disebut juga dengan frame buffer. Kendali display ini akan membaca data dari frame buffer dan menampilkannya ke LCD misal dalam kecepatan 60 kali per detik (60 Hz). Ukuran frame buffer ini tergantung dari resolusi LCD yang digunakan. Ukuran frame buffer ditentukan dengan rumus

Ukuran Frame buffer = jumlah piksel x bit per piksel

Sebagai contoh sebuah LCD dengan resolusi 320×240 24 bit RGB (3×8 piksel) akan membutuhka frame buffer 225 KB, 320x240x24 byte. Dalam aplikasi kadang digunakan 2 kali frame buffer (double buffer) atau bahkan 3 kali buffer. Hal ini biasa digunakan agar saat saat refresh buffer tidak menimbulkan efek di LCD dan bisa digunakan untuk menampilkan efek scroll, slide saat pergantian dari tampilan satu ke tampilan yang lain.

Sebuah LCD bisa dikemas dengan kendali display dan GRAM di dalamnya. LCD seperti ini secara teori bisa dihubungkan dengan mikrokontroler apa saja, tapi biasanya harganya akan lebih mahal. Ada juga LCD yang hanya mempunai kendali low level untuk men-drive piksel-piksel dan tidak mempunyai GRAM. LCD seperti ini biasanya memerlukan mikrokontroler khusus atau mungkin tambahan kendali eksternal. GRAM bisa menggunakan RAM internal mikrokontroler atau bisa juga menggunakan RAM eksternal (SRAM atau SD RAM), tentu saja dengan mempertimbangkan ukuran frame buffer yang dibutuhkan.

Antarmuka LCD

Aliansi MIPI (Mobile Industry Processor Interface) adalah sebuah organisasi global yang anggotanya terdiri dari pabrikan semikonduktor atau komponen elektronik lain, pabrikan elektronik (handphone dan lain-lain), perusahaan software atau lainnya yang bertugas untuk mendefinsikan antarmuka (interface) untuk perangkat mobil (bergerak), misal handphone, kamera dan lain-lain. MIPI ini akan mengembangkan dan menstandarkan antarmuka-antarmuka untuk display, kamera, atau komponen lain. Standar baru biasanya dikembangkan terutam ketika dibutuhkan transfer data dengan kecepatan lebih tinggi di mana antarmuka yang sudah ada tidak bisa menanganinya. MIPI juga menstandarkan antarmuka yang sudah ada. Berikut adalah standar MIPI untuk antarmuka display (LCD)

MIPI Display Bus Interface (MIPI-DBI)

MIPI-DBI biasa digunakan untuk modul LCD dengan kendali dan GRAM yang terintegrasi (internal). MIPI-DBI bisa menggunakan antarmuka paralel maupun serial (SPI). Ada 3 jenis MIPI-DBI:

  • Tipe A, berdasarkan bus Motorola 6800 (paralel)
  • Tipe B, berdasarkan antarmuka bus Intel 8080 (paralel)
  • Tipe C, berdasarkan antarmuka SPI (Serial Perperal Interface)
MIPI-DBI Paralel
MIPI-DBI SPI

Tipe A dan tipe B bisa diakses sebagai memori (memory mapped), LCD akan dianggap sebagai memori dengan alamat. Akses seperti ini akan memberikan transfer data yang cukup cepat, saya pernah membuat sebuah player video dengan LCD tipe ini menggunakan STM32F207, resolusi 320×240. Dibutuhkan mikrokontroler dengan periperal untuk mengakses memori eksternal (FMC) untuk mengakses LCD seperti ini, tetapi interface ini masih memungkinkan diakses dengan teknik bit banging, jadi mikrokontroler apa pun masih bisa mengakses LCD dengan tipe ini, tetapi tentu saja kecepatannya akan jauh berkurang. Kalau meminjam istilah Arduino, Software MIPI-DBI Paralel. Pas awal-awal belajar LCD TFT juga saya mengaksesnya secara software (bit banging) karena belum punya mikrokontroler dengan periperal FMC.

Video Player dengan STM32F207 + LCD MIPI-DBI Paralel
LCD dengan Mode Bit Banging

Antarmuka DBI tipe A dan B terdiri dari port data (16 bit), pin baca/tulis (WR/RD), pin RS (untuk memilih ngirim data ke display atau kontrol data ke kendali display),Biasanya dihubungkan ke port alamat. Dan pin CS (chip select) untuk memilih atau mengaktifkan LCD. Dan pin RST untuk me-reset LCD.

Contoh Antarmuka MIPI-DBI Type B

MIPI-DBI tipe C lebih mudah untuk diakses, karena sebagian besar mikrokontroler mempunyai periperal SPI. Kecepatannya tergantung clock SPI yang digunakan. Memang sih tidak bisa secepat tipe A dan tipe C, tapi masih cukup cepatlah, saya melihat ada beberapa yang membuat video player dengan LCD tipe ini.

Antarmuka DBI, dengan kecepatan maksimal yang bisa ditanganinya, mungkin hanya bisa menangani display dengan resolusi rendah, terutama DBI-SPI, walaupun clocknya tinggi, tetap saja tidak bisa menyamai kecepatan data paralel. Faktanya ketika antarmuka ini sudah ada, jauh sebelum aliansi MIPI ada. MIPI hanya mengadopsi dan menjadikannya sebagai standar kemudian membuat standar baru agar bisa menangani LCD dengan resolusi tinggi.

MIPI Display Parllel Interface (MIPI-DPI)

Dalam antarmuka DPI, data display ditransmisikan dalam format RGB 16 sampai 24 bit, selain itu diperlukan juga sinyal kendali dan sinkronisasi, seperti sinkronisasi vertikal (VSYNC), sinkronisasi horisontal (HSYNC), sinyal enable (EN) dan clock (LCD_CLK). Diperlukan cukup banyak pin untuk interface jenis ini. Dan juga memerlukan mikrokontroler khusus yang mempunyai periperal jenis ini.

Antarmuka DPI

LCD dengan antarmuka DPI biasanya tidak GRAM internal, sehingga mikrokontroler harus menyediakan frame buffer sendiri (internal maupun eksternal). Hal ini juga mengaharuskan mikrokontroler secara terus menerus dan real time mengirim data dari frame buffer ke LCD. Walaupun mikrokontroler cukup cepat untuk mengirim data agar tidak ada efek flicker/kedip di LCD, tapi tentunya membutuhkan waktu CPU yang tinggi (bandwidth) dalam prosesnya. Dengan tidak adanya GRAM dan hanya kendali low level, jenis LCD ini bisa lebih murah.

Contoh Skematik LCD dengan MIPI-DPI, Perhatikan banyak Pin di Konektor LCD

MIPI Display Serial Interface (MIPI-DSI)

MIPI-DSI dibuat untuk mengurangi kebutuhan pin yang ada di MIPI-DPI. DSI mengubah antarmuka paralel menjadi serial dengan menggunakan physical link yang dinamakan MIPI D-PHY. Agar bisa mentransfer data dengan kecepatan tinggi, maka sinyal DSI dibuat menjadi sinyal diferensial (ada sinyal plus dan sinyal minus). Ini juga memerlukan periperal khusus di mikrokontroler.

DSI hanya memerlukan pin clock (P dan N) dan pin data (juga P dan N). Data ini dinamakan dengan lane, dan DSI merupakan protokol yang mendukung multi-lane. Walaupun untuk antarmuka ke display 2 lane sudah cukup.

Antarmuka DSI
Contoh Skematik LCD dengan Antarmuka DSI

Antarmuka dengan STM32

STM32, dengan berbagai jenis atau variannya, telah dilengkapi dengan periperal untuk dihubungkan dengan semua antarmuka LCD tersebut, walaupun tidak semua STM32 dilengkapi semua periperal itu, mengingat jumlah pin yang dibutuhkan cukup banyak, hanya STM32 dengan jumlah pin lebih dari 90 yang mempunyai setidaknya periperal tersebut. Terkecuali MIPI-DBI SPI dipastikan semua STM32 memilikinya.

Antarmuka dengan MIPI-DBI Tipe A dan B

Untuk mengendalikan LCD dengan antarmuka jenis ini, STM32 mempunyai periperal FMC (Flexible Memory Controller) atau FSMC (Flexible Static Memory Controller). FMC/FSMC sebenarnya adalah periperal untuk mengakses memori eksternal (flash maupun RAM), namun seperti telah dijelaskan LCD dengan tipe ini bisa diakses sebagai memori (dengan pengalamatan melalui pin CS), maka LCD ini bisa dihubungkan dengan FMC ini. FMC/FSMC ini ada di STM32 dengan jumlah pin minimal 90 (WLCSP 90).

Pin STM32F103 untuk Antarmuka LCD melalui FSMC
Konfigurasi FSMC untuk Antarmuka LCD

Antarmuka dengan MIPI-DPI

Untuk antarmuka dengan MIPI-DPI, STM32 mempunyai LTDC (LCD TFT Display Controller). LTCD mendukung LCD DPI sampai 24 bit (RGB 24 bit). LTDC bertindak sebagai master di sistem bus AHB yang mempunyai akses untuk membaca data dari RAM internal maupun eksternal (yang dijadikan frame buffer). LTDC mempunyai 2 lapisan (layer) yang independen yang masing-masing mempunyai FIFO sehingga pengaturan menjadi lebih fleksibel.

LTDC secara otonomus membaca data grafik dengan kecepatan sama dengan bus AHB dari frame buffer, data ini kemudian di simpan di FIFO dari lapisan internal kemudian dikirimkan ke LCD. LTDC dirancang proses pengendalian ini LCD tidak terlalu melibatkan CPU, hal ini bisa dilakukan dengan bantuan Chrome-Art Accelerator (DMA2D), yang pada dasarnya adalah sebuah DMA.

Tidak banyak tipe STM32 yang dilengkapi dengan periperal LTDC. Berikut adalah daftarnya.

Oleh karena LCD jenis ini tidak mempunyai GRAM, maka STM32 dengan periperal LTDC dibekali RAM internal yang cukup besar, selain itu dilengkapi juga dengan peripeal FMC untuk menambah RAM eksternal jika RAM internal tidak mencukupi. Aplikasi LCD biasanya menampilkan banyak gambar sehingga juga dibutuhkan memori flash yang cukup sehingga ukuran memori flashnya juga cukup besar (sampai 2 MB). Ada juga antarmuka Quad/Octo SPI agar bisa menambahkan flash memori eksteral untuk menyimpan gambar-gambar yang dipakai di aplikasi. Terutama jika resolusi LCD yang digunakan cukup tinggi.

Pin LTDC di STM32F429
Pengaturan LTDC
Pengaturan Layer LTDC
Pengaturan DMA2D

Antarmuka dengan MIPI-DSI

STM32 dilengkapi dengan periperal DSI Host untuk menghubungkan dengan LCD DSI. Mungkin hanya beberapa type STM32 yang dilengkapi dengan DSI Host diantaranya STM32F469/479, STM32F7x8/F7x9, STM32H7 (tidak semua). DSI Host bekerja seperti LTDC, menggunakan DMA2D dan juga mendukung 2 layer.

STM32 mendukung DSI sampai 2 lane (D0 dan D1), sehingga hanya dibutuhkan 6 pin untuk koneksi ke LCD. Di STM32 pin-pin DSI adalah dedicated pin, pin-pin memang khusus untuk dipakai sebagai pin DSI dan tidak bisa dijadikan sebagai GPIO.

Port DSI

Artikel yang cukup panjang. Insya Allah di artikel berikutnya akan diberikan contoh aplikasi dari masing-masing LCD, namun sayang untuk yang DSI saya belum mempunyai eval board atau LCDnya.

Semoga bermanfaat.

One thought on “Pemrograman GUI di STM32 (Bagian 2): Antarmuka STM32 dengan LCD TFT”

Leave a Reply

Your email address will not be published.