桜のはなびらどっとねっとロゴ

桜のはなびらどっとねっと

Raspberry Pi 2でSPI接続のグラフィック液晶の制御

この記事は1年以上前に投稿された記事です。 この警告表示について

前回グラフィック液晶の制御を実施しました。この液晶はパラレル接続で全部で20本のピンヘッダがあり、データ転送及び制御で合計14本のGPIOポートを専有していました。
Raspberry Pi 2(とPi B+)はGPIOポートが26本あるのでそれなりに余裕がありますが、初代モデル(Pi ModelA/B)はGPIOポートが17本しかないので3本しか残りませんね。

そこで今回はSPI接続のグラフィック液晶を使用してみたいと思います。

関連記事リンク

用意するもの

必要なものは配線類を除けば SPI接続のグラフィック液晶ディスプレイのみで特別必要な物はありません。今回は秋月電子で買える超小型グラフィック液晶 AQM1248Aを使用しました。
この液晶はSPI接続+制御線2本で制御でき、3.3Vで消費電力1mAという仕様。
バックライトはついていません。

ちなみに…(2018年1月21日追加

どうやらバックライトの搭載されたタイプが発売されたみたいです。見た感じバックライトが追加されただけのようですので、こちらを使ってみるのも良いでしょう。

SPI通信とは

モトローラ社が提唱した接続方式で送受信2本、クロック、スレーブ選択信号にGNDの計5本でデバイス間の通信を可能としたシンプルなシリアル通信方式である。

古くから使われている形式でデファクトスタンダードとなっているものです。
この規格は決まりがいい加減で汎用性が高いのが特徴で、低速通信から数十Mbpsの高速通信まで対応したインターフェイスです。スレーブ側になるデバイスは数Mbpsの接続に対応した製品が多いようです。

また、一般的なパラレルとシリアルの比較になりますが、SPIとパラレル接続の比較として

  • 信号線が少ない
    データ線はパラレル通信は8bitバスの場合は8本16bitバスの場合は16本もあるのに対し、シリアル通信ではシリアルなので何bitのバスであろうと信号線は1本です。
  • 通信速度が速い
    低速通信の場合は8本のデータ線を使って通信をするパラレル接続のほうが高速ですが、高速通信をしようとすると全ポートにデータが到着するのを待ってそれを処理する必要が出てくるため、シリアル通信の方が数Gbps以上の高速化が容易になるようです。
    この程度のグラフィック液晶を制御する場合においてはそこまで気にする必要もないと思います。実際にインターフェイスの後はパラレル接続になっているものが多いみたいなので。

という2つが大きな特徴でしょう。

というわけで信号線が少なくて済むSPIインターフェイスの液晶を今回は制御したいと思います。

ちなみにもっと本数が少なくて済むI2Cという通信規格も存在します。こちらは転送速度が1Mbps程度のあまり高速な通信速度を必要としない機器向けで、その代わり信号線は3本(クロックとデータ送受信にGND)で済むという規格です。Raspberry PiはI2Cにも対応してますのでこちらもそのうち使ってみたいと思います。

接続方法

gpoio

Raspberry PiのSPI接続用のポートは決まっていて、物理品の19、21、23とスレーブ選択およびデバイス選択の24、26番を使用します。GPIO番号で言うと12、13、14と10or11ということになります。

それぞれ名称として MOSI MISO SCLK CE0/1と名付けられていてそれぞれのピンは

  • MOSI(Master-Out Slave-In)
    マスター(制御をする側)がスレーブ(制御される側)にデータを転送するためのポートです。Raspberry Piから見ると「送信」ポートになります。なお、このポートのみを使用して双方向通信をする事もできます。 RS-232Cで言うところのTxDですね。
  • MISO(Master-In Slave-Out)
    マスターにスレーブがデータを転送するためのポートです。Raspberry Pi側から見ると「受信」ポートになります。 RS-232Cで言うところのRxDになります。 ちなみに今回の液晶は「受信専用」なのでこのポートは使いません。宙ぶらりんにするなり、GNDに接続するなり、MOSIとループバックするなり好きにしてください。
  • SCLK(Serial Clock)
    データ転送タイミングを合わせるためのクロックです。
    この線で出力されるクロックによって決められたタイミングでデータを送る事によってシリアル通信を実現しています。
  • CE0/CE1
    本来はマスターとスレーブを決定する信号線のようですが、今回使用する液晶やセンサー類などの基本的にスレーブにしかなりえないデバイスの場合はそのデータをどのデバイスが受け取るのかを決めるための信号となっている場合が多いようです。

となっていて、このピンに+GNDでデータ転送をしています。

その配線に加え、この液晶を制御するにはリセット信号とレジスタ選択信号が必要になります。

接続

 

 

こんなかんじで接続しました。

この後の問に <はい> → <了解> → <はい> → <了解> で設定を終了させてリブートしたら設定完了。

再起動後、「ls -l /dev/spidev*」と「lsmod」コマンドを実行して、
「/dev/spidev0.0」と「/dev/spidev0.1」、「spi_bcm2708」が表示されていたらSPIが使えるようになっているはずです。

 

なお、もしこの設定で使えない場合は手動でファイルを変更する必要があります。その方法は以下のとおりです。

1. /etc/modprobe.d/raspi-blacklist.conf から spi-bcm2708 が含まれている行を削除
2./etc/modules に spidev を追加する
3.再起動する

動作させてみる

上のコードを使ってBMPを表示してみます。

12848

例えばこのBMPファイルを液晶に転送してみると以下のようになります。

 

ちなみにこの液晶で連続的にBMPを転送して見たところ、かなりかくかくしていました。何か方法があるのかもしれないけど…。

以下に完成したコードを載せておきます。

 

“Raspberry Pi 2でSPI接続のグラフィック液晶の制御” への1件のコメント

  1. […] 基本的には前回の白黒グラフィック液晶のコマンドコードと転送量が増えるだけですので結線は同じ。SPIの3線にRS信号とリセット信号。そしてGNDだけ。これは他のST7735R搭載の液晶でも同じはず。 […]

コメントを残す

メールアドレスが公開されることはありません。