Lilygo TTGO T-Display-GD32について

2020年11月29日日曜日

Longan Nano

t f B! P L
Lilygo TTGO T-Display-GD32(以下Lilygo T-Display-GD32)は、Sipeed Longan Nano(以下Longan Nano)クローンのRISC-Vコア搭載ボードです。Aliexpressで購入しました。
Lilygo TTGO T-Display-GD32

Sipeed Longan Nanoとの差分

Longan Nanoとの違いは以下になります。
  • 物理的形状
  • ピン配置(電源関連ピンの追加のみ)
  • LCDの解像度、LCDドライバ
  • LCDのバックライトコントロール
  • microSDカードスロット
  • USB Type-C接続 及び プログラムダウンロードの注意点(重要)
使用されているSoCはLongan Nanoと全く同じGD32VF103CBT6で、ボードのピン配置もほぼ同じですが、LCDのドライバの違いおよびバックライトコントロールの有無の違いにより、LCDを使用する場合は、Longan Nano用プログラムを修正する必要があります。

物理的形状

Longan NanoのPCBサイズは46mm x 20mmに対して、Lilygo T-Display-GD32では搭載LCDが大きくなっている影響でPCBサイズも51mm x 26mmとなっています(共にコネクタなどの突起部を除く)。Longan Nanoでは主な部品の実装面の上にLCDが配置する形になっており、LCDの固定方法がSoCの上に両面テープを付着するという若干難のある方法でしたが、Lilygo T-Display-GD32では、主な部品の実装面は裏側に回って、LCDはPCBに直接固定されておりすっきりしています。一方でLCDコネクタは廃止されており基本的にはLCDの着脱は不可です。

ピン配置(電源関連ピンの追加のみ)

ピン配置はLongan Nanoの配置位置、順序をほぼそのまま踏襲していますが、PCBサイズに余裕があることで、3.3Vピンが1本追加されて合計2本、GNDピンが3本追加されて合計5本になっています。またLongan Nanoでは、microSDスロットの対辺側に表面実装のランドが表裏4個ずつの8個ありこれを挟み込むような形でヘッダピンを実装していましたが、Lilygo T-Display-GD32では8本のスルーホールのランドにL字型のヘッダピンを取り付ける形になっています。

LCDの解像度、LCDドライバ

Longan Nanoでは0.96inch 160x80ピクセルでLCDドライバとしてST7735Sが使用されていました。Lilygo T-Display-GD32では、1.14inch 240x135ピクセルで、LCDドライバはST7789Vが使用されています。ピクセル画素数のアスペクト比は16:9ですが、描画領域のサイズは24.912mm x 14.864mmなので、画素ピクセルのアスペクト比(PAR = Pixel Aspect Ratio)は1.0:1.06程度となり、正方形を描画した際に若干縦長になる点は注意が必要です。またLCDドライバが異なるため、初期化処理を変更する必要があります。

LCDのバックライトコントロール

Longan NanoではLCDのバックライトは常時ONでしたが、Lilygo T-Display-GD32では、PB10ピンに接続されたトランジスタを介して制御可能になっています(PB10ピン Hドライブでバックライト点灯)。バックライトLEDは3.3Vを直接トランジスタでON/OFFする回路となっているため、常時ONでは明るすぎるのと、過電流になる可能性があるので、後述するPWMによる制御を行うと良いと思います。

microSDカードスロット

Longan Nanoでは差し込みロックがない小型の簡易型のスロットが搭載されており、カード挿入状態の保持に多少の不安がありましたが、Lilygo T-Display-GD32では差し込むとカチッと音がしてロックされ、もう一度押すと取り出される形の通常のスロットが搭載されています。

USB Type-C接続 及び プログラムダウンロードの注意点(重要)

当方のPC環境依存の問題かもしれませんが、なんとUSB Type-Cの接続時に表裏を気を付ける必要があります。USB Type-CコネクタはA面B面に対称配置を施すことによって表裏を気にせずに使用することができるのですが、Lilygo T-Display-GD32のUSB Type-Cコネクタの配線においてA面B面で異なる点があります。具体的にはDevice側を示すためCC関連のピンはpull-downされているべきなのですが、Lilygo T-Display-GD32ではオープンになっているピンがあります。
USB Type-Cコネクタの配線の違い

このため差し込みの表裏の違いによって、DFUデバイスとして認識したりしなかったりします。またこのことが直接原因かどうかは不明ですが、PlatformIO環境のDFUプラグインでは正常に書き込みが完了したように見えてできていない場合が多発します。一方でGigaDeviceからリリースされているGD32 MCU Dfu Tool (v3.8.1.5784) では、Type-Cの表裏の向きが合っていれば常に正常に書き込みができますので、PlatformIO環境でビルドしたプロジェクトもプロジェクトフォルダ\.pio\build\sipeed-longan-nano\firmware.binファイルをGD32 MCU Dfu Tool にてダウンロードして使用しています。
Dfu Toolによるダウンロード

サンプルプロジェクト

Lilygoの公式?に以下のサンプルプロジェクトがあります。
platformio.iniのboardの部分を以下のように変更する必要がありました。
; board = sipeed-longan-nano-lite
board = sipeed-longan-nano

resourceフォルダにあるlogo.binをmicroSDのルートフォルダに配置して起動することでLilygoのロゴ動画が見れるサンプルとなっています。

PWMによるバックライト制御

PWMによるバックライト制御をするためには、Timer1 Ch2を有効にしてPB10ピンをAlternate FunctionモードかつTimer1のPartial Remapモード1に設定する必要があります。
Timer1 Remap割り当て


10KHzのPWM信号を生成の初期化とON時間の割合を0 ~ 100 (%)で指定する関数を以下のように準備しました。
// PWM for PB10 (Timer1 Ch2: partial remap1, alternate function)
void timer1_pwm_init(void)
{
    timer_parameter_struct tpa;

    rcu_periph_clock_enable(RCU_TIMER1);
    timer_struct_para_init(&tpa);
    tpa.prescaler = 108 - 1;        // prescaler (108MHz -> 1MHz)
    tpa.period = 100 - 1;           // max value of counting up (1MHz -> 10KHz = 100us)
    timer_init(TIMER1, &tpa);
    timer_channel_output_state_config(TIMER1, TIMER_CH_2, TIMER_CCX_ENABLE); // channel output enable
    timer_channel_output_mode_config(TIMER1, TIMER_CH_2, TIMER_OC_MODE_PWM0);
    // default PWM ratio = 50 / 100
    timer_autoreload_value_config(TIMER1, 99);
    timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2, 50);
    timer_enable(TIMER1);

    rcu_periph_clock_enable(RCU_AF);
    gpio_pin_remap_config(GPIO_TIMER1_PARTIAL_REMAP1, ENABLE);
    rcu_periph_clock_enable(RCU_GPIOB);
    gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
}

// on_term: 0 ~ 100 (%)
void timer1_pwm_set_ratio(uint16_t on_term)
{
    timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2, on_term);
}
PWMバックライト制御対応とmicroSDのexFAT対応を含めたLilygoのサンプルプロジェクトを改変したものを以下に置いておきます。
PWMのON時間の割合は50でも非常に明るく、1にしても暗いところでは充分に見えるレベルです。サンプルでは0~50の間を往復するようにしてあります。

PWMバックライト制御サンプル

その他の情報


その他はLongan Nano用の情報がそのまま流用可能です。


自己紹介

自分の写真
電子工作&プログラミング、オーディオ・音楽

注目の投稿

Raspberry Pi Pico Wで電波時計を合わせる (JJY標準電波エミュレータ)

Raspberry Pi Pico Wのアプリケーションとして 最少の周辺部品で電波時計むけJJYエミュレータ(時刻合わせ用)を製作しました。 ※2023年6月6日: ソースコード修正の内容を反映させました。 時刻合わせ風景 概要 電波時計は電波が届くところで使...

QooQ