TFT shield 2,8 inci bergaya Arduino dapat menempatkan LCD dan socket microSD pada PCB yang sama, tetapi keduanya tidak harus memakai interface elektrik yang sama. Label pin adalah petunjuk paling cepat untuk membedakannya.
Pada shield seperti yang terlihat di gambar, sisi LCD mengekspos DB0 sampai DB7 bersama LCD_WR, LCD_RD, LCD_RS, LCD_CS, dan LCD_RST. Sinyal tersebut membentuk interface display paralel 8-bit bergaya 8080. Sementara itu, SD_MOSI, SD_MISO, SD_SCK, dan SD_SS adalah milik socket microSD.
Adanya pin SD tersebut tidak membuat LCD berubah menjadi display SPI. Menghubungkan MOSI, MISO, SCK, dan satu chip-select saja mungkin membuat SD card dapat diakses, tetapi TFT tetap tidak terhubung ke bus yang dibutuhkan controller-nya.
Baca PCB sebagai dua bus
Shield tersebut dapat disederhanakan menjadi dua jalur independen:
ESP32-C6
|
+-- LCD: DB0..DB7, WR, RS/DC, CS, RST, RD
|
+-- microSD: MOSI, MISO, SCK, SD_CSJalur LCD memindahkan satu byte melalui delapan data line sekaligus. WR melakukan strobe write ke display controller. RS, yang pada modul lain sering disebut DC, membedakan byte command dari byte data. CS memilih LCD controller.
RD dipakai ketika host membaca bus LCD. Desain write-only mungkin tidak memerlukan pembacaan LCD, tetapi sinyal tersebut tetap harus berada pada level elektrik inactive yang disyaratkan shield dan controller, bukan dibiarkan floating.
Jalur microSD adalah SPI biasa. Serial signal-nya tidak berhubungan dengan LCD DB0..DB7, walaupun kedua perangkat berada pada board yang sama.
ESP32-C6 memakai PARLIO, bukan native LCD I80
ESP32-C6 tidak mengekspos peripheral native LCD I80 yang tersedia pada beberapa varian ESP32 lain. Chip ini memiliki peripheral Parallel IO, atau PARLIO.
ESP-IDF saat ini menyediakan driver panel I/O PARLIO pada esp_lcd yang dapat menghasilkan interface bergaya I80 8-bit. Espressif juga secara khusus mencantumkan ESP32-C6 sebagai chip yang dapat menggerakkan LCD I80 dengan mensimulasikan timing-nya melalui PARLIO.
Jalur hardware-assisted-nya menjadi:
framebuffer / LVGL
|
v
driver LCD controller
|
v
esp_lcd panel IO
|
v
PARLIO, data_width = 8
|
+--> DB0..DB7
+--> WR
+--> RS/DC
+--> CSJalur ini berbeda dari esp_lcd_new_i80_bus(). Kode untuk target yang memiliki peripheral native I80 LCD tidak dapat dipindahkan ke ESP32-C6 hanya dengan mengganti nomor GPIO. Transport layer harus memakai API PARLIO yang didukung target tersebut.
PARLIO dipetakan langsung ke sinyal shield
Untuk display 8-bit, field penting pada esp_lcd_panel_io_parl_config_t berbentuk seperti ini:
#include "esp_lcd_io_parl.h"
esp_lcd_panel_io_parl_config_t io_config = {
.dc_gpio_num = PIN_LCD_RS,
.clk_gpio_num = PIN_LCD_WR,
.cs_gpio_num = PIN_LCD_CS,
.data_gpio_nums = {
PIN_LCD_D0, PIN_LCD_D1, PIN_LCD_D2, PIN_LCD_D3,
PIN_LCD_D4, PIN_LCD_D5, PIN_LCD_D6, PIN_LCD_D7,
},
.data_width = 8,
.pclk_hz = LCD_WRITE_CLOCK_HZ,
.lcd_cmd_bits = 8,
.lcd_param_bits = 8,
};Di sini, clk_gpio_num menggerakkan write strobe WR pada display I80. Delapan elemen data_gpio_nums dipetakan ke DB0..DB7. Reset LCD biasanya ditangani oleh konfigurasi panel, bukan bus PARLIO itu sendiri.
Write clock harus mengikuti batas timing display controller dan board. Mengambil frekuensi dari modul SPI yang tidak terkait bukan dasar yang valid karena SPI clock dan I80 write strobe adalah interface berbeda.
Controller tetap harus diidentifikasi
Foto layout shield saja tidak cukup untuk memastikan bahwa controller-nya adalah ILI9341. Shield 2,8 inci dengan bentuk serupa pernah menggunakan berbagai LCD controller, dan sebagian library Arduino mengidentifikasi controller dengan membaca register saat runtime.
Bus dan controller adalah dua keputusan terpisah:
bus elektrik bergaya I80 8-bit
|
v
command set khusus controller
|
v
LCD glassPARLIO menyelesaikan bagian pertama. Panel driver menyelesaikan bagian kedua.
Jika board memang memakai ILI9341, driver panel esp_lcd yang kompatibel dengan ILI9341 dapat ditempatkan di atas handle PARLIO. Controller lain dapat memerlukan initialization command, penanganan register, pengaturan orientasi, dan perilaku pixel format yang berbeda walaupun wiring DB0..DB7, WR, dan RS terlihat sama.
Inilah salah satu penyebab layar putih yang umum: bus paralel sudah toggle dengan benar, tetapi initialization sequence ditujukan untuk controller yang salah.
microSD tetap merupakan perangkat SPI
Socket SD dapat memakai SPI host ESP32-C6 secara independen dari PARLIO:
ESP32-C6 SPI TFT shield SD
------------- -------------
MOSI --> SD_MOSI
MISO <-- SD_MISO
SCK --> SD_SCK
GPIO --> SD_SS / SD_CSTransfer display dapat ditangani melalui esp_lcd dan PARLIO, sedangkan akses filesystem memakai stack SD SPI. LCD dan SD card tidak berbagi kabel sinyal tersebut.
Kebutuhan GPIO adalah batas board-level
Shield paralel 8-bit memakai banyak sinyal. Koneksi LCD yang berorientasi write membutuhkan delapan GPIO data ditambah WR, RS/DC, CS, dan biasanya RST. Jika RD ikut dirutekan, satu sinyal lagi diperlukan. SD card kemudian membutuhkan sinyal SPI dan chip select terpisah.
Development board ESP32-C6 yang digunakan menentukan pin yang benar karena sebagian GPIO dapat sudah dipakai atau dibatasi oleh flash, USB, boot strapping, LED, atau peripheral lain. Buat pin map dari schematic board yang sebenarnya, bukan dari daftar GPIO ESP32-C6 generik.
Jika GPIO yang sesuai tidak mencukupi, mengganti shield dengan modul TFT yang benar-benar mengekspos interface SPI LCD controller dapat lebih sederhana daripada mengadaptasi Arduino parallel shield. Itu merupakan perubahan interface hardware, bukan setting library.
Periksa tegangan pada boundary shield
Nama pin format Arduino tidak menentukan tegangan yang diterima setiap pin IC. Sebagian shield memiliki regulator atau rangkaian level shifting; yang lain mengekspos sinyal dengan lebih langsung.
ESP32-C6 memakai power domain 3,3 V. Sebelum shield bergaya Arduino dihubungkan, periksa schematic atau rangkaian input untuk mengetahui tegangan supply shield yang diizinkan, apakah input LCD melewati level shifter, apakah output shield dapat melebihi batas GPIO ESP32-C6, serta tegangan yang digunakan rangkaian microSD.
Karena itu, instruksi umum seperti “hubungkan VCC shield ke 3,3 V” tidak aman tanpa mengetahui revisi shield yang tepat. Supply voltage dan GPIO logic voltage adalah dua karakteristik berbeda.
Mulai port dari boundary bus
Port yang andal mengikuti hardware yang benar-benar diekspos:
- Identifikasi sinyal LCD:
DB0..DB7,WR,RD,RS,CS, danRST. - Perlakukan
SD_MOSI,SD_MISO,SD_SCK, danSD_SSsebagai bus SPI terpisah. - Identifikasi LCD controller, jangan menebaknya dari ukuran layar.
- Verifikasi supply dan rangkaian logic-level pada revisi shield yang digunakan.
- Alokasikan GPIO dari schematic development board ESP32-C6 yang sebenarnya.
- Gunakan jalur
esp_lcdberbasis PARLIO pada ESP32-C6 untuk display bergaya I80 8-bit. - Konfigurasikan SD card secara terpisah melalui SPI.
Batas utamanya terlihat langsung pada shield: delapan LCD data line berarti display mengekspos bus paralel. Empat pin dengan nama SPI adalah milik SD card. Mempertahankan pemisahan ini mencegah wiring SPI yang tampak masuk akal tetapi berakhir dengan TFT yang terus menampilkan layar kosong.