1 of 18

Tamagotchi Uniを分解して�カスタムファームを動かす

JA1TYE/Ryota Suzuki(@JA1TYE)

2 of 18

自己紹介

鈴木 涼太(@JA1TYE)

  • 組み込み系エンジニア
  • 個人のWebサイトでガジェット分解記事や�JLCPCBとのコラボBlogなどを公開しています
  • Web: https://t-techlab.com

1

Special Thanks:

サイバーおかん⚡タナゴ(@1_design)さん

3 of 18

発売前から狙っていました

  • Tamagotchi Uniの存在はインプレスの記事で知った

  • AWS IoTということは�何かしらWiFi対応のマイコンが�載っているだろうとにらんで予約

  • 外箱の記載でESP32-S3が搭載されて�いることが分かり余計に気になった

2

https://www.watch.impress.co.jp/docs/news/1506532.html

4 of 18

数日遅れで到着

  • Amazonで予約していたが発売日当日には届かず…�数日遅れで入手

3

このエリア選択はタイムゾーン選択…?

5 of 18

早速分解

  • 山崎(@tomorrow56)さんの分解情報を参考に分解
    • 液晶とフレームを分離するところだけ慎重にやったほうがいいかも

4

6 of 18

UARTを当ってみる

  • ひろみつ(@bakueikozo)さんの情報を参考に�UARTと書き込みモード用ピンを線出し
  • 案の定書き込みモードは無効化されていた

5

7 of 18

気を取り直して基板を見てみる

  • ESP32-S3を換装して遊ぶにしても�接続周りの情報は必要なので基板を観察した

  • インダクタが搭載されていない!
    • まさかバッテリ直でESP32-S3に給電!?�…と思いきや、DCDCでなくLDOだった
    • ESP32シリーズを使うときに便利そうなので�すかさずJLCPCB Part Libraryで注文

  • 搭載されている各種部品の型番は�TLの皆さんが解析済だった
    • 山崎(@tomorrow56)さん
    • Slinky Ramune(@GMMan_BZFlag)さん
      • なんとカナダ勢の模様!きゅーびっつも分解してて超面白い

6

USBからの5V入力周り

液晶

液晶

LDO

Load

SW

Charger

AMP

DAC

加速度

RTC用

水晶

8 of 18

接続状況を追っていく

  • ESP32-S3と周辺回路の接続を�テスターと目視でのパターン追跡で解析
    • 白基板で見づらいが両面基板なので�じっくり見ていけば追える
    • マジョカアイリスの多層基板のような�テクニックは不要

  • 解析結果はGoogleスプレッドシートで�公開中�Tamagotchi Uni ESP32-S3ピン配置
    • ESP32-S3取り外し後に追加で確認し�全ピンの結線を確認済

7

9 of 18

純正ファームの挙動を見る

  • ESP32-S3を外す前にI2CとSPIの信号を見てみる
    • LCD etc.を動かす前に参考にするため
  • 結線解析結果に基づいてESP32-S3から線出し�ロジアナにつないで見てみる

8

10 of 18

SPIを見る

  • まずは液晶ドライバの型番を確定させるために液晶用のSPIバスを観測
    • LovyanGFX(https://github.com/lovyan03/LovyanGFX)で動かせると�いいなと思い…
  • 0x11,0xB1,0xB2,0xB3,0xB4…とコマンドを送っていた
  • コマンド種別と引数の数からST7735S/Rと判断

9

11 of 18

I2Cを見る(1/2)

  • I2Cはスレーブアドレス0x10と0x30にアクセスしている
  • 0x10はES8156(DAC)が使っていると分かっていたので�0x30が型番不明の加速度センサと推定
  • ES8156のレジスタマップは非公開だがEspressifのESP-ADFに�ドライバがあり制御内容は似通っていた

10

12 of 18

I2Cを見る(2/2)

  • 加速度センサらしきスレーブアドレス0x30へのアクセスは�そんなに数は多くなかった
    • 取説を読むに加速度センサは常時ONではなさそうなので�多分起動時は最低限の初期化しかしていない
  • パッケージサイズとレジスタマップから加速度センサの品番の�特定にトライ→特定できず…
    • ピン配置はBoschっぽいが刻印が違う/レジスタマップも違う
    • レジスタマップはSTっぽいが刻印/ピン配置が違う
    • 中国系部品ECであるLCSCを見るとそれっぽい中国メーカーのセンサが�ヒットするがどれも微妙に違う

11

13 of 18

ESP32-S3を交換する

  • ロジアナで信号を観測できたのでESP32-S3を交換した
  • 電池を外してリワーク用のホットプレートで基板を焼く
    • はんだが融けたタイミングを狙ってESP32-S3を外す
  • 外したあとは秋月で買ったESP32-S3を取り付ける
    • 秋月にあるのはPSRAM付きだがピン配置の関係でPSRAMは使用不可

12

14 of 18

LCDを動かす

  • ピン配置の解析結果とコマンドから判明したドライバIC情報から�LCDの制御にトライした

  • LovyanGFXを使い以下の設定で動かせた!
    • ST7735R/S
    • 4線SPIモード
    • X/Yの画素オフセット 2pixel

  • バックライト制御(LovyanGFXで可能)�の他にLCD自体の電源制御もある
    • 電池持ち改善のために制御している模様

13

15 of 18

スピーカーを鳴らす

  • 画面が出たところで次は音を出す
  • ESP32-S3の他に関係するICは2つ
    • ES8156(DAC)
    • GPY0031A-HS011(Audio Amp)

  • ES8156はロジアナでの観測結果をもとにI2Cで初期化
  • GPY0031A-HS011はシャットダウンピンがあり制御が必要
    • 液晶と同じく電池持ち対策と思われる

  • I2Sフォーマットで16bitデータを流し込むと発音できた
  • ESP-ADFのソースを読んで制御すれば音量制御etc.もできるはず

14

16 of 18

加速度センサを動かす

  • 最後の大物、品番不明の加速度センサに挑戦
  • アクセスしているレジスタは0x57と0x20
    • 加速度センサでアドレス0x57までレジスタがある品種は珍しい
  • メーカーやECのサイトをひたすら調査…

  • STのLIS3DSHが0x57までレジスタを�持っていることを発見
    • ただピン配置が違うしReset Valueも違う…
  • LIS3DSHをリスペクト(?)したセンサと�想定して制御したところ加速度らしき値が�出た!
    • 検出軸の向きがちょっと不思議な気もするけど…
    • ±2g設定になっている模様

15

17 of 18

所感

  • ホビーユーザーも買えるESP32-S3のモジュールが載っているのは�ちょっとワクワクした

  • 一番驚いたのはDCDCコンバータではなくLDOを採用している点
    • 電池モノなら電池の電力を最後の一滴まで絞りたいところ
    • そこをあえて3.4V近辺までしか使わないのは思い切った設計
    • たまごっちでの電力消費パターンをよく考えて決めていそう
    • 「自分ならどう作るか?」を考えてみるのも面白い

  • 各周辺回路は徹底的に節電を意識している
    • こまめに電源を落とせるような回路になっている

16

18 of 18

まとめ

  • 新発売のIoTたまごっち”Tamagotchi Uni”を分解して�カスタムファームウェアを動かした
    • ESP32-S3を換装して液晶・スピーカー・加速度センサを動かした

  • 解析ポイントがいっぱいあり発見もある分解しがいのある一品

  • 部品換装を除けばLiPo採用で液晶付きの遊びやすいキット(?)と�いえそう

  • そのうちGitHubにサンプルコード公開します

  • ワールドワイドで販売される製品の分解の楽しさ
    • 世界に広がる分解の輪!

17