前回で手順1番目が終わり、今回は作業手順の2番目、ESP-WROOM-32のSPIです。
- Windows PC上でFPGAを操作するためのバイト列を作ってWifiで送信
- ESP-WROOM-32で受信したバイト列をSPIでFPGAに送信
- FPGAで受信したバイト列をデコードしてボード上のLEDを点滅
Windows PC →(Wifi)→ ESP-WROOM-32 →(SPI)→ EP2C5T144の内、SPIの部分を実装します。
#include <SPI.h> #include <WiFi.h> /* Set these to your desired credentials. */ //const char *ssid = "ESPap"; //const char *password = "thereisnospoon"; const char* ssid = "your-ssid"; const char* password = "your-password"; WiFiServer server(2002); WiFiClient client; #define SPI_BUF_LEN 1024 byte spiBuf[SPI_BUF_LEN]; byte spiReadBuf[SPI_BUF_LEN]; void setup() { Serial.begin(57600); SPI.begin(); SPI.setFrequency(24000000); SPI.setDataMode(SPI_MODE1); SPI.setBitOrder(MSBFIRST); pinMode(SS, OUTPUT); digitalWrite(SS, HIGH); // Serial.println(); // Serial.print("Configuring access point..."); // /* You can remove the password parameter if you want the AP to be open. */ // WiFi.mode(WIFI_AP); // WiFi.softAP(ssid, password); // IPAddress myIP = WiFi.softAPIP(); // Serial.print("AP IP address: "); // Serial.println(myIP); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); //WiFi.mode(WIFI_STA); // Disable Access Point WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); Serial.println("Server started"); } void loop() { if (!client.connected()) { // try to connect to a new client client = server.available(); } else { // read data from the connected client int n = client.available(); if (n > 0) { //Serial.print("available: "); //Serial.println(n); if (n > SPI_BUF_LEN) { n = SPI_BUF_LEN; } // transfer data to/from SPI client.readBytes(spiBuf, n); digitalWrite(SS, LOW); SPI.transferBytes(spiBuf, spiReadBuf, n); digitalWrite(SS, HIGH); // return data to client client.write(spiReadBuf, n); } } }
ESP-WROOM-32のMISO(ピンD19)とMOSI(ピンD23)を繋いでループバックにしています。動作確認用のWindowsアプリは前回と同じで結果の表示内容も前回と同じになります。
オシロスコープで信号を確認しましたが、オシロスコープの帯域が足りません。配線がいい加減なせいなのか、オシロスコープのせいなのか判りません。青色がSCLK、黄色がMOSIです。
SSラインの様子も見てみました。16バイトをまとめて送っている例です。青色がSCLK、黄色がSSです。