macsbug

Just another WordPress.com site

GPIO Port of ESP32

leave a comment »

NANO32 の GPIO PORT を調べました。             2016.11.09

なんと言っても 最初は「Lチカ」( Blink )ですね。
そして 興味がある GPIO のダイレクト ポート アクセス はどのようにするか?
さらに 最高速はどこまででるか?

ESP32 への 期待は大きく 特に高速性 はどうなのか?
ところが 私の検証方法が間違いなのか 驚きと落胆の結果がでました。


 

準備:Nano32 + Arduino IDE ESP32

「Lチカ」( Blink ) は 定番の記述で動きます。

#define LED 16

void setup() {
  pinMode(LED, OUTPUT);
}
 
void loop() {
  digitalWrite(LED, HIGH);
  delay(250);
  digitalWrite(LED, LOW);
  delay(250);
}

 

Direct Access Port:ダイレクト ポート アクセス
_ GPIOのレジスターに直接アクセスし高速化が可能です。

ダイレクト ポート アクセス による「Lチカ」

#define GPIO *(volatile uint32_t *)0x3FF44020
#define LED 16

void setup() {
  //pinMode(LED, OUTPUT);
}
 
void loop() {
  GPIO =  BIT(LED);     // HIGH << LED;
  delay(250);
  GPIO = !BIT(LED);     // LOW  << LED;
  delay(250);
}

この中の delay() を削除すると最高速がでますが、そうはいかなかった。

参照:
1. ESP8266 の GPIO 速度:各種ボードのの最高速度と方法。
2. ESP8266 Direct Access Port で Lチカ:ダイレクト ポート アクセス方法。
3. ESP8266 で 1MHz 50%duty を出力する:ESP8266で精密な方形波を出力。

espressif.com の ESP32 Technical Reference Manual を参照します。
40 Page,  4.12  Register Summary の中程下。
GPIO_ENABLE_REG は GPIO 0-31 output enable register_REG : 0x3FF44020
と書かれています。
これは「#define GPIO *(volatile uint32_t *)0x3FF44020」と記述すると良い。

ESP8266の場合は 3つのレジスター操作が必要でした。 私の知識不足かも知れ
ませんが ESP32 の場合は 1つで動きました。
Direct Access Port:
_   不勉強ですが GPIO Resistor は以下の3つかと想像しています。
_   1. GPIO_ENABLE_REG
_   2. GPIO_FUNC5_OUT_SEL_CFG_REG
_   3. PERIPHS_IO_MUX_GPIOx_U

GPIO 16:以下の割り付けがありますが これでは動作せず。
IO_MUX_GPIO16_REG   Configuration register for pad GPIO16:0x3FF5304C
GPIO_FUNC0_OUT_SEL_CFG_REG:0x3FF4457C
Configuration for GPIO pin 0_REG:0x3FF440C8

 


高速動作の検証: digitalWrite(), delayMicroseconds() で試す。

delayMicroseconds(1); で試す、、、ところが波形がでません。

100μsec:delayMicroseconds(100); なんとか使えそうな波形。

20μsec:delayMicroseconds(20); 波形が崩れ 電圧が低くなっています
_    これでは使えません。

これでは ダイレクト ポート アクセス どころではなく 検証ができません。


 

感想:
1. ESP8266では 1μsecでも余裕で出ますが ESP32 は 1μsec では出力せず。
_  digitalWrite と delayMicroseconds(1); で出力しないとは どういう事なの
_  でしょうか?
2. これには驚きました。恐らく ESP8266 と同じアーキテクチャーでハードも
_  同様だとの認識では こういう事はありえない。
_  Port を変えてみたり Pull up 抵抗とか試しましたが 同様の為 今回は
_  こういう事だとします。というか今回の記事は間違っていて欲しい。
3. ESP32 に期待する所は 高速性ですが 今回の検証ではむしろESP8266より
_  遅い事になります。
4. CPU Frequency 160MHzで ESP8266 と変わらず。GPIO Port数は多いが
_  ESP8266 より低性能、価格はESP8266の9倍。これでは 買う価値が無い。
_  そうなると 260円 ( $2.48 ) で購入できる WeMos D1 mini で充分という事。
5. 他の方の検証や 今度の進展も含め 今回はこれくらいにしておきます。
6. ラズパイは 780MHz,,1.2GHz と羨ましくなります。
7. EspressifSystem の John Lee氏が ESP32 は 160MHz と述べている。
_  ともの技術メモ:ESP32のβ版がもうすぐリリース!?


 

Written by macsbug

11月 9, 2016 @ 3:35 am

カテゴリー: ESP8266

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。