南無ちゃんのブログ    https://namva.net

天下御免の夢中人=南無ちゃんは、今日も元気で明るく楽しく逞しく生きてゆく。

Arduino for ESP32のSPIライブラリ

2020-03-29 16:18:26 | 電子工作
 FPGAからのデータをESP32で読み取るためのインタフェースとして、SPIを使おうと考えています。理由は、配線数が少なくて済み、かつFPGAでのインプリメンテーションが簡単そうだからです。SPIというのはSerial Periphral Interfaceの略で、Motorolaが規格を制定したとのことですが、様々なインプリメンテーションがあり、縛りの緩い規格のようです。昨日試したNokia 5110もSPIでインタフェースしています。
 色々調べたところ、ESP32用ArduinoのSPIライブラリで標準的にサポートされるピンは、18(SCK)、19(MISO)、23(MOSI)、5(SS)のようなので、Nokia 5110と共存できるようです。
 周波数カウンターのデータは32ビットで一度に読み込みたいので、それが可能かどうかも実験してみました。Arduino UNOなどのAVRマイコン用のSPIライブラリにはSPI.transerおよびSPI.transfer16というメソッドがあり、8ビットおよび16ビットでデータをリード・ライトできます。ESP32はその名の通り32ビットCPUなので、SPI.transfer32というのが使えるんじゃないかと思って試したところ上手くいきました。
 テストプログラムを以下に示します。
#include <SPI.h>

void setup() {
  SPI.begin(18, 19, 23, 5);
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3));
  Serial.begin(9600);
}

unsigned long outData = 0x55aa55aa;

void loop() {
  unsigned long inData;

  Serial.print("write to SPI ");
  Serial.println(outData, HEX);
  digitalWrite(SS, LOW);
  inData = SPI.transfer32(outData);
  digitalWrite(SS, HIGH);
  Serial.print("read from SPI ");
  Serial.println(inData, HEX);
  delay(2000);
  outData++;
}
 クロック(SCK)は、1MHzにしました。MOSI信号(出力)をMISO信号(入力)に接続することで、自分の出力した信号をリードバックできる筈です。期待した通り、シリアルモニタには次のように表示されました。
write to SPI 55AA5721
read from SPI 55AA5721
 MOSI-MISO間の配線を外すと、 read from SPI 00000000と表示され、リードバックされているデータであることが確認できました。
 オシロスコープで、SCK(黄色)とMOSI(水色)の波形を観測しました。MODE3に指定しているので、クロックはノーマルハイ、立下りエッジの後でMOSI信号が変化しています。データは正論理でMSBファーストで送信されていることが分かります。

コメント    この記事についてブログを書く
« ESP32にNokiaの液晶パネル | トップ | FPGAとESP32を接続 »
最新の画像もっと見る

コメントを投稿

電子工作」カテゴリの最新記事