コンテンツにスキップ

ハードウェア

narya-board の各端子・ピン配置の仕様をまとめます。

Note

回路図・KiCAD 設計データ・基板写真は narya-board リポジトリ を参照してください。

概要

項目 内容
メイン MCU (fmrb-core) ESP32-S3-WROOM-1-N16R8(16MB Flash + 8MB PSRAM)
サブ MCU (fmrb-graphics-audio) ESP32-WROVER-E/IE(PSRAM 搭載)
MCU 間通信 UART1(921600 bps、CTS/RTS フロー制御)
映像出力 NTSC コンポジット (LovyanGFX CVBS 実装)
音声出力 I2S DAC(NES APU エミュレータ)
ストレージ 内蔵 LittleFS (16MB) + SD カード (FAT32, SPI 接続)

電源

項目
入力 USB Type-C (5V / ~500mA)
内部レギュレータ 3.3V
推奨電源 安定した USB 給電(PC、スマホ用 5V アダプタ等)

Warning

USB 周辺機器(マウス、キーボード、ゲームパッド)を本体に接続する場合は、5V 系の電流を多く消費します。USB ハブ経由か、外部給電 USB を使ってください。

映像出力

項目
コネクタ RCA(ピンジャック、黄色)
信号方式 NTSC コンポジット
標準解像度 320 x 224(オーバースキャンに収まる範囲)
カラー RGB332(256 色)

CRT モニタ/キャプチャデバイスの個体差で色味が変わる場合は、FmrbGfx#set_output_level / set_chroma_level で調整できます。

音声出力

項目
コネクタ 3.5mm ステレオミニジャック
信号 I2S → DAC でアナログ出力
出力レベル ライン出力相当

NES APU エミュレータが動いており、矩形波 2 系統 + 三角波 + ノイズ + DPCM の 5 チャンネルで音を鳴らせます。詳細は FmrbAudio音声ファイルフォーマット を参照。

USB

項目
機能 USB Host
プロトコル USB HID
対応デバイス キーボード、マウス、ゲームパッド(HID 互換)

USB Hub 経由で複数デバイスを同時接続できます。安価なマウスで稀に再接続が必要なケースが既知ですが、ホットプラグ対応済みです。

ストレージ

デバイス パス prefix 容量
内蔵 LittleFS ルート相対(例 /data/foo.txt 16MB
SD カード /mnt/sd/... カード次第(FAT32 推奨)

/mntDir.open するとマウント点 sd が見える仮想ディレクトリになっているので、ls /mnt/sd のような Unix 風の歩き方ができます。ファイルシステム API は ファイル・I/O を参照。

ボタン

基板上に 3 つの物理ボタンがあります。

ボタン GPIO 用途
UP GPIO 6 カーソル上
DOWN GPIO 7 カーソル下
ENTER GPIO 8 決定

これらはシステム側で監視されており、HID イベントとしてアプリに通知されます。

LED

LED GPIO 用途
STATUS GPIO 4 起動状態・正常動作
ERROR GPIO 39 エラー表示

拡張 I/O ピン

外部回路と接続できる端子:

I2C

バス SDA SCL 備考
I2C1 GPIO 14 GPIO 21 RTC (RX8900) が共有
I2C2 GPIO 47 GPIO 48 自由用途

I2C.new(unit: "ESP32_I2C0", ...) 等で利用します(周辺機器 ▸ I2C 参照)。

自由 GPIO

下記以外の GPIO は通常ユーザーアプリから自由に使えます。

システム予約ピン(ユーザーは触らない)

GPIO 用途
0 UART リフラッシュ用ストラッピングピン
3 JTAG プルダウン
5 WROVER リセット
9〜13 WROVER との通信 (UART1)
15〜18 SD カード SPI3
19, 20 USB D-, D+
35, 36, 37 PSRAM
38 SD カード検出
45, 46 ストラッピングピン

内蔵機能で使われているピン

GPIO 用途
1 USB 電源制御
4 Status LED
6, 7, 8 ボタン UP / DOWN / ENTER
14, 21 I2C1
39 Error LED(JTAG MTCK と共有)
47, 48 I2C2

利用可否の確認方法

FmrbHw.pin_available?(pin) で実行時にピンが空いているかを確認できます。tool/gpio_viewer.app.rb で全ピンの状態を一覧できます。

unless FmrbHw.pin_available?(10)
  Log.error("Pin 10 in use")
  return
end

詳細は FmrbHw を参照。

RTC (リアルタイムクロック)

基板に RX8900 RTC IC(I2C アドレス 0x32、I2C1 経由)が搭載されています。電池で時刻保持されます。

i2c = I2C.new(unit: "ESP32_I2C0")
rtc = RX8900.new(i2c)
rtc.sync_system_clock

詳細は RX8900 API を参照。

関連