Open3

Maix Amigoの液晶を使いたい

okuokuokuoku

データシートとソースコードを集める

Maix AmigoのLCDは、いわゆる8080 MCUインターフェースに接続されていて、 CPUからI/Oポートを使って制御を行うことになる。 ... CPU時間がもったいないからSPIとかにしてくれ〜 SPI0のoctalモードが使えるようだ。

https://qiita.com/fukuebiz/items/59915590a124a83061f1

これベースで読んでいくのが良いかな。 Arduinoの有名なライブラリ TFT_eSPI ベースで書かれている。

okuokuokuoku

SoC側の設定項目

LCDを駆動するには

  1. I/O電圧を設定して
  2. SPI0をoctalモードに設定し
  3. I/OのCLK、リセット、コマンド/データ切り替え ピンをそれぞれ設定する

必要がある。

Qiitaの例 が一番まとまっているかな。

I/O電圧の設定

    sysctl_set_power_mode(SYSCTL_POWER_BANK6, SYSCTL_POWER_V18);
    sysctl_set_power_mode(SYSCTL_POWER_BANK7, SYSCTL_POWER_V18);

ドキュメント によれば、

  • BANK6 = Power domain 6,contain IO36-IO41
  • BANK7 = Power domain 7,contain IO42-IO47

結線図によると、IO36等がLCDのI/Oに接続されていて、 データシート によるとSPI0のoctal専用pinは1.8v固定だから BANK6 も1.8vに設定するのは正しそう。

... BANK7 を設定している理由が謎だな。。これらはカメラに繋がっていて、まぁどうせカメラも使うから設定しっぱなしで良いとは思うけど。

SPI0のプロトコル設定

    fpioa_set_function(36 /* LCD_CS */, FUNC_SPI0_SS3);
    fpioa_set_function(39 /* LCD_WR */, FUNC_SPI0_SCLK);
    fpioa_set_function(38 /* LCD_DC */, FUNC_GPIOHS0 + DCX_GPIONUM /* 38 */);
    fpioa_set_function(37 /* LCD_RST */, FUNC_GPIOHS0 + RST_GPIONUM /* 37 */);
    sysctl_set_spi0_dvp_data(1);

sysctl_set_spi0_dvp_data に関してはドキュメントが無いので完全に不明。。最終的には、

spi_init(0, SPI_WORK_MODE_0, SPI_FF_OCTAL, 8, 0)

のように octalモードにして使う ことになるが、そもそも何で専用ピンが有るんだ。。?I/Oピン節約のため。。?