2016年10月26日

ESP32について(IO関係)

さて、ESP-WROOM-32(ESP-32S) というモジュールを入手したとして、どうやって使うのだろうか?開発用基板を作るつもりなので、それに最低限必要なことを整理していきたい。

I/O ピンの機能について
I/O ピンは、IO0 〜 IO39 がある。この I/O ピンの機能を、いくつかから選択する(IO MUX)。その中には GPIO もあるし、そのピンにだけ割り当てられた機能もある。 GPIO を選択すれば、GPIO に割り当て可能な機能から選べる(GPIO Matrix)。GPIO に割り当て可能な機能は、なんと 229 種類もある。

それとは別に boot の動作に必要なピン、SPI Flash に接続されたピンがある。これらの使用には制限がある。

使えない機能・使わない機能
まず、イーサネットを使いたいとは思わないので無視する。次に SPI Flash に接続されたピンが必要な機能は使えないと決め打ちしてしまおう。

SPI Flash に接続されたピンは、SD1 とか SD 関係のようで、調べてみると SD slave が使えないようだ。それ以外だと、Parallel QSPI という機能が使えないようだ。HS1_DATA7 とかの信号名があるので、8bit までのSPI らしいが、使うとは思えないので無視しよう。

しかしこれらの機能はどうやって使うものなのだろう? HOST との接続が前提で 常に download boot を使うのだろうか?気にはなるが、他の機能の把握が先なので忘れてしまおう。


ピンの割り当てが決まっている機能

SD host
 IO2 SD_DATA0
 IO4 SD_DATA1
 IO12 SD_DATA2
 IO13 SD_DATA3
 IO14 SD_CLK
 IO15 SD_CMD

JTAG
 IO12 MTDI
 IO13 MTCK
 IO14 MTMS
 IO15 MTDO

いきなり SD host とぶつかっている。と...なると JTAG はどうやって使うのだろうか?それはともかく、無視したのを除くと、これとアナログ系。

IO32 32K_XP, (32.768 kHz crystal oscillator input)
IO33 32K_XN,(32.768 kHz crystal oscillator input)

RTC 機能があり、Deep-sleep mode (RTC timer + RTC memories) で 20 uA。センサーからの入力で起動する設定だと、25 uA だそうだ。

IO36 SVP
IO39 SVN

60dB gain の ADC だそうだ。

IO25 DAC_1
IO26 DAC_2

8bit DAC が2つある。(10bit かも?)

IO0,IO2,IO4,IO12,IO13,IO14,IO15,IO27,IO32,IO33 TOUCH0-9

タッチパネル 10個まで。

IO34 ADC1_CH6
IO35 ADC1_CH7

上記のアナログ関係のピン以外で ADC があるのはこの2つ。ADC は、12bit SAR だそうだ。

後はすべて、制限なしに GPIO として使えるのかというと そうでもない。

IO0 1=SPI Flash Boot , 0=download Boot (with IO2=0)
IO2
IO12(MTDI) 0=Voltage of Internal LDO (VDD_SDIO) 3.3V
IO15(MTDO) 1=Debugging Log on U0TXD During Booting
IO3(U0RX) download Boot
IO1(U0TX) download Boot

これらが、重要な制限。
IO0 , IO3(U0RX), IO1(U0TX), と EN の4つを使って Arduino 的な使い方が出来る。

GPIO に割り当て可能な機能

SPI (master,slave) x2
UART x3
I2C (master,slave) x2
PWM x4
LED PWM (16ch)
RMT(IrDA, 8ch)
I2S x2 (+LCD,camera)

詳細までは把握できてない。... が、一番分からないのが RMT(IrDA) 。IrDA のために設計されて 38kHz フィルタも内蔵されたものなのだが ... 何故 8ch もあるのか? なにやら気になる。



以上を踏まえて、開発用ボードを作ることを検討してみる。

基本は、ピッチ変換ボードに 3.3V電源 を付けたようなものを考えている。あと回路を少々付加。でもUSB シリアルを内蔵するのは、やめようかと思う。今 SPI Flash 書き換えには必要なんだが、いずれは、他の手段が充実して来るだろう。使うとしても (ラズパイのような) Linux SBC で開発するなら USB 変換は不要だったりする。

電源回路
Wi-Fi Tx 使用時で 260mA と書いてある。それだけで済むとは思えないので、余裕を持った電源回路を組み込もう。
最近は、DC/DCコン モジュールが安く買える。MP2307 採用の これなどは、10 個で 659円。

その他、中華PMP を色々調べたときによく使われていた、中華IC の HX1001-GES も使ってみたい。これは、aliexpress で安価に入手できる。

形状
USB シリアル付きで ピンが両サイドに出ている開発ボードが多いが、どうも使いにくそうな。Arduino 的な形状でピンソケットを付けるのが良さそうだと思える。
以前 5cm x 5cm の基板にしたものを作ったので、それをベースにしようかと。
ピン割り当て
A0-A5 , D0-D13 までは決まった。

A5 IO36 SVP
A4 IO39 SVN
A3 IO34
A2 IO35
A1 IO32 32K_XP
A0 IO33 32K_XN

D0 IO23
D1 IO22
D2 IO21
D3 IO19
D4 IO18
D5 IO5
D6 IO4 SD_DATA1
D7 IO2 SD_DATA0

D8 IO15 SD_CMD
D9 IO13 SD_DATA3
D10 IO12 SD_DATA2
D11 IO14 SD_CLK
D12 IO26 DAC_2
D13 IO25 DAC_1

付加回路

32k 水晶 パターンだけ付ける
USB
 USB D- IO16
 USB D+ IO17
電源コネクタとして MICRO USB を使うが、D-/D+ に一応 IO を割り当ててみた。使えるようになるかも知れない。逆に ピンコネクタ側から電源を供給して HOST として使えないかとも思っている。

SPI Flash 書き込み
ボタン EN,IO0
IO3(U0RX) download Boot
IO1(U0TX) download Boot

DTR L での EN ↓↑ IO0 L

正規の回路が別にあるのだが、DTR + RTS が必要で利便性に欠ける。ちょっと使えるかどうか自信がないが DTR のみのやつを付けてみた。もしこれが上手くいくなら、IO0 のボタンを他の IO に変えられるよう工夫も入れる。

LED(L で点灯) IO27,IO10(SD3)

SD3 は、SPI Flash の /WP に接続されたピン。書き込み時に光るかも。ダメだとしても /WP なら適当に使っても大丈夫そう。


RMT(IrDA, 8ch) について。

ちょっと説明を見てるのだが、波形を生成できる機能のようだ。
メモリ上の 32bit ディスクリプタで、ON 時間(1 - 32768 clock) と OFF 時間(1 - 32768 clock) を指定する。それが最大 512 エントリの配列になっている。clock には、APB_CLK が使用でき 80MHz も可能。

そして、受信の方は ON 時間/OFF 時間 を測定するわけだ。

うまく使えば ΣΔ DAC にもなりそうだし、USB 受信で フレームを取り込むのにも使えるかも知れない。(low speed だと、1フレームの最長は 109bit )
posted by すz at 02:00| Comment(0) | TrackBack(0) | ESP32
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/177390967
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック