honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

「プリキュアミライパッド」を解析する(3)~追加データに思いをはせる~

「プリキュアミライパッド」を解析する(1) - honeylab's blog

 

honeylab.hatenablog.jp

 前回までの解析で、どうやら「ジュエルポート(仮)」に信号が出ているということがわかりました。

このピンが何なのか、何ができるのかを考えてみます。

 

公式の説明書には

「今後、追加データで遊びを拡張することができるので」

 と書いてあります。

 

f:id:honeylab:20180531213741p:plain

 

電源を入れた状態で信号を解析してみると、以下のようなデジタル信号が出ていることがわかりました。

 

解析にはロジックアナライザ「LAP-C」を使用しています。

16chロジックアナライザ(100MHz,32k) - LAP-C(16032) - ネット販売

 

f:id:honeylab:20180531212522p:plain

これは、”SPI通信”と推測されます。(経験と勘によります)

 

ピンアサインはこんな感じのようです。
ただし、MOSI(Master Out Slave In:親機から子機への出力)は上記のようにわかるのですが、MISO(Master In Slave Out :子機から親機へ)は、当然子機に相当するものがないので推測になります。

f:id:honeylab:20180531212428p:plain

さて、信号はどういう意味があるでしょうか。


まず、一バイト目 0x9Fをマスタから送信した後、3バイト分のクロックが観測されます。
このクロックは、MISO端子から信号を読みだしている動作です。


SPIで0x9F 、これを検索すると、以下のページが見つかりました。

BusPirateを用いてSPI接続するフラッシュメモリを手動で読み出す - DARK MATTER

このページによると、SPI Flashメモリの型番に割り当てられているIDを読みだすコマンドのようです。
つまり、ミライパッドは電源を入れると同時に、このポートに対して

「おーい!誰かいないか??」と呼びかけていることになります。

ここで、

「はい!私はメモリです!メーカは○○で型番はXXです!」などと返事をすれば、
おそらくミライパッドは

「お!おるやんけ!中身読ませてくれ!」と次のフェーズに進むと思われます。


しかし、ここで想定されているメモリのメーカや型番、中身は商品が発売されるまでは全く分かりません。
なので、ここでは以下のことだけ予言しておきます。

 

「ミライパッドのジュエルポート(仮)には、SPI Flashメモリを内蔵した何らかの追加パーツが発売され、中身のデータやアプリをミライパッドにインストールすることができる」

 

当たったらすげぇ!って言ってくださいね。

「プリキュアミライパッド」を解析する(2)

前の続き

honeylab.hatenablog.jp

 

さて、届いたらサクッと分解します が、
まずは気になっていたあからさまにデバッグポート蓋のようなやつを外してみます。

かちっとな

 

ででーん!!

 

ほら!!!だから言ったじゃん!!!なんかあるって(何ができるとは言ってない)

勢いで分解し続けます。

裏蓋を外したところ。

f:id:honeylab:20180525074524p:plain

ここまでではまだ詳しいことはわかりませんが、

やはり「ジュエルポート(私が名付けた)」は電極で間違いありません。

 この端子、果たしてミライクリスタルのようにただのスイッチとは考えられません。

さらに、開発用と思われるコネクタ端子が2つ左上にあります。
ゴムパッドがついているのは電池交換時リセットボタンです。

さて、基板をひっくり返してみます

 

どーん

 

f:id:honeylab:20180525075129p:plain

 

ででーん

だいたい想像どおりでした。
こいつを買うときに一番恐れていたのは、
「すべてがワンチップで全く遊ぶ余地が無いこと」

でした。
少なくともそれは免れたようです。

動作動画を見れば、ふんだんなアニメーションと動画再生ができているため
いきなりただの貧弱なカスタムチップを使っているとは考えにくかったです。

なんらかのミドルウェアが存在するレベルのマイコンが使われているはず、と思っていました。
しかし、メインチップは樹脂封止なので現時点で型番を推定することはできません。
今後、これを明らかにすることはできるでしょうか。

液晶はいわゆる組み込み向けTFT LCD。画素数は明確には記載されていません。
ピン配置から考えると液晶I/Fは

www.aitendo.com

この手のものとほぼ同一のものと考えられます。
抵抗膜型タッチスクリーンであることも共通です。
フレキ部分が極端に弱く、すぐ接触不良になりますので、
この部分はあまりいじらないほうが良さそうです。

その他、基板を調べてわかったことを簡単に書き込んでおきましょう。

f:id:honeylab:20180525140645p:plain

こんなかんじです。
右上に出ている6ピンポート、2本だけGPIOまで配線されていますが、
ポートの直前の保護抵抗が実装されず、NCになっています。
そこに並んでいる残りのCPUピンはミライクリスタルの接点スイッチに配線されていますので、
開発時に何らかのアクションを発生させるものだったのではないかと思われます。


フラッシュはNANDかと思いましたが、NORフラッシュと言うものらしいです。

MX29LV640EBTI-70G | Macronix, 64Mbit フラッシュメモリ, 2.7 → 3.6 V, 48-Pin TSOP | Macronix 【通販RS】


ちょっと本気出せばNORフラッシュに直付けして直接アクセスか、
CPUのアクセス中にプローブする形で画像データなどに直接アクセスしたりはできそうですがなかなかハードルが高いですね。
裏にあるデバッグコネクタからなにかできればいいのですが、今の所
CPUも特定できていませんし、これもまだ先になりそうです。
とりあえず、オーディオアンプの近辺を改造してイヤホン穴を付けたり、とかは簡単にできそうなんですがね。

で、気になってたことのもう一つ「ジュエルポート(仮称)」です。
こちらについて、なにか信号が出ていることが確認されました。


今後記事にしますのでお待ち下さい。

 

「プリキュアミライパッド」を解析する(1)

皆さん HUGっとプリキュア 見てますか。

www.toei-anim.co.jp

今シーズンのプリキュアには我らが王国民の姫が出演ということで
珍しく初回から日曜の朝早くに起きて見ています。

f:id:honeylab:20180525065105p:plain

 

はじめのうちはなかなか姫が出てこなくて、あっれー?ってなってたんですが
突然のルールー回からの巨大ロボット化予告にウズウズしている一週間です。

それにしても16話、演出も脚本もものすごいクオリティでした…なんだったんだ…

 

さて、そのHUGっとプリキュアに登場するおもちゃアイテム「ミライパッド」
今では全国の量販店で手に入れられるようになったようです(※おもちゃです)

f:id:honeylab:20180525065437p:plain

ちょっと気になったので調べてみると「ミライクリスタル」という物理デバイスによる機能開放があるようです。

precure.channel.or.jp

ここまで読んでいる方はすでに知っているかと思いますが、ミライクリスタルの裏には
最大5本の突起があり、それが「ミライパッド」の物理スイッチに作用することで
ミライパッドが反応するようになっています。
当然、それに気づいた先人方がこれを物理ハックして全機能開放を実現しているようです。

animedorama.com

しかし、全機能開放にはかなり強力なネタバレが含まれているため、
その内容についてはここでは触れません

が、先人の動画へのリンクを張っておきますので、どうしても気になる方はそちらへどうぞ。

【※超絶ネタバレ注意】 HUGっと!プリキュア プリキュアミライパッド キュアアムール キュアマシェリ 追加プリキュア ネタバレ CureAmour CureMacherie Release - YouTube

 

さて、今回私もうっかりこの「ミライパッド」を購入してしまいました。

その理由はこちらの動画なんです。

www.youtube.com

いわゆる開封動画なんですが…

 

こちらの動画の作成者の方、

f:id:honeylab:20180525065821p:plain


電池ボックスエリアにあるあからさまなデバッグポート隠し蓋を全力スルーー!!!

 

いや、まって、そこ開けて!!そこになんかあるから

 

さらに

f:id:honeylab:20180525065923p:plain

…なにその今後の拡張性を示唆するポート!!!

説明書を読んでみると

f:id:honeylab:20180525070053p:plain

「今後、追加データであそびを拡張することができるので」

 

なんだってー??

ミライクリスタルは単純なフラグの成立によって内部データを開放する仕組みでした。
しかし、動画を見る感じ、ここにはきちんと電極があり、外部との通信が示唆されています。

うーん…

…しゃぁない自分で買うか…ということで無事着弾しました。

f:id:honeylab:20180525070442p:plain

ミライパッド!これで私もぷぃきゅぁ!!!!

 

というわけで、さっそく分解します(続く)

ニンテンドーラボのToy-Conガレージで任意の周波数の音を出す回路(DTMFを出力する)

ちょっと予算とかで悩んでたんですが、さっさと買ってなんか面白いもの作れと嫁に煽られたのでぽちぽちといじっています。

まぁ、普通にいろいろする分は普通の人に任せるとして、変態的にはどんな使い方ができるかを考えてみています。

ニンテンドーラボではIRカメラやJoyCon,ToyConなど入力に関しては様々なものが扱えますが、
出力に関しては画面と音、振動、IRLEDなどで、外部機器との連携は難しいようです。

IRLEDの点灯もあまり高速には行えないようです。

 そこで、音による出力を検討してみますが、出力した音を分析して連携するには
外付けの機器では少々重たいものが必要になってしまいます。

そこで思いついたのがDTMF音。一昔前のプッシュホンで使われていた
ピポパ音のことです。

DTMFは電話のダイヤルのほかに、無線によるコード通信などにも使われているため
ワンチップでデコードできるICがリリースされています。

今回はみんなの部品箱 秋月電子で入手できる CM8870PIを使うことにします。

DTMFレシーバー CM8870PI: 半導体 秋月電子通商 電子部品 ネット通販

長らく我が家の部品箱に眠っていました。

 

さて、DTMFを出力するにはどうすればいいか。

ニンテンドーラボでは、簡単に音階の音を出せるモジュールが準備されていますが、
DTMFを出力するには、周波数を設定して音を出さなければなりません。

DTMF - Wikipedia

f:id:honeylab:20180426224222p:plain

これをどうすればいいか。

 

ニンテンドーラボのモジュール間接続に用いられる信号は、デジタル(0・1)もしくはアナログ(0-1)があるようです。
発音モジュールはデジタル入力を受けたときは単純に発音しますが、
アナログ入力を受けた場合、それを音量変化もしくは周波数変化として扱うことができます。

つまり、ラの音(440Hz)のモジュールに 0.5 を入力し、周波数変化として扱った場合、440 x 0.5で220Hzの音を出力することができます。

 

f:id:honeylab:20180426232420j:plain

さて、では0.5を入力するにはどうすればいいか。

ラボには「カウンタ」と呼ばれる、0-100までのカウントアップをするモジュールがあります。
カウンタは0-100までの値に応じて、0.00-1.00までの値を出力するようです。
(初期設定の場合。設定を変更して上記のマッピングを調整することができます)

つまり、カウンタを目的の値で止めてやればいいわけですが、
カウンタの通常動作は、ボタンなどが一回押されると1加えられる「トリガ」と
一回押されると100まで上昇しきってしまう「ホールド」があります。

めんどくさくなってきたので、実際の組み合わせ回路をもとに説明します。

f:id:honeylab:20180426233828p:plain

① NOT 

 入力を反転する機能がありますが、入力を開放したときには常にデジタル1が出力されます。1固定の定数として使っています。

② Bボタン

 コントローラのBボタンが押されたときに1を出力します。開発中にカウンタの設定を変更した場合、リセットするために配置してあります。

③ AND

 「④のDカウンタで設定する条件が満たされている間⑤のAカウンタを上昇させる」を実現するためのAND条件です

④ A(アナログ出力)カウンタです。

 この回路では79になったときに停止されます。
 0-100のカウント値が0-1に変換されるように設定されています。

f:id:honeylab:20180426234400j:plain

⑤ D(デジタル)カウンタ

 このカウンタの設定がミソです。
 ①の出力を受けて、0-78の間は1を出力しますが、
 79をカウントしたときに出力が0になります。

 この出力は④のカウンタに接続されていて、カウンタ同士は同期して動作するため、④のカウンタは79で停止することになります。

f:id:honeylab:20180426234351j:plain

⑥ AND

 このAND回路は、タッチなどのトリガを受けてカウンタの出力を
 発音モジュールに接続する役割を持ちます。

 ここでちょっと不思議に思ったのが、カウンタからの出力は0.00から1.00のアナログ値。しかし、タッチなどのトリガはデジタル値です。このANDとは一体?

 その答えが↑でした。良く出来てるなこれ。

⑦ 発音モジュール

f:id:honeylab:20180426232421j:plain

さて、これらの出力がうまくミックスされると、

 880Hz x 0.79 = 695.2 の音が出力されるはずです。

実際に出力し、iPhoneFFTアプリで観測してみると

 

åç 2018-04-26 23 55 43.png

…ちょっとずれてる?まぁSwitchとiPhone、どちらも音響機器では無いですから、
計測にもずれもあるかもしれません。まぁまぁ計算通り出ているようです。

基準となる音階とカウンタの比率を調整することで、より正確な周波数が出せると思いますが、DTMF用としては十分かと思います。

 

これを縦横マトリクス分生成してやるとこんなかんじ

f:id:honeylab:20180426232412j:plain

さて、実際にDTMFを出力し、デコーダICに食わせて出力をArduino+LCDで受け取っている様子がこちらになります。

 できたできた。

SHARP 太陽光発電 エネルギーモニタ JH-RWL7のLinux起動ログが取得できた

https://bitbucket.org/snippets/bakueikozo/Rey9j6

タイトルの通りです。

U-Boot 2009.08 (10月 25 2013 - 15:15:40)
  
  CPU:   Freescale i.MX25 at 398 MHz
  mx25 cpu clock: 398MHz
  ipg clock     : 66498560Hz
  Board: i.MX25 - Solar-System JHRWL3 board
  I2C:   ready
  RAM Configuration:
   Bank #0: 80000000 128 MB
   Bank #1: 90000000 128 MB
  SDRAM Test Aread 90000000 - 90100000
  SDRAM test phase 1:
  SDRAM test phase 2:
  SDRAM Test Aread 94000000 - 94100000
  SDRAM test phase 1:
  SDRAM test phase 2:
  SDRAM test passed.
  NAND:  Manufacturer      : Micron (0x2c)
  Device Code       : 0x38
  Cell Technology   : SLC
  Chip Size         : 1 GiB
  Pages per Block   : 128
  Page Geometry     : 4096+218
  ECC Strength      : 8 bits
  ECC Size          : 512 B
  Data Setup Time   : 25 ns
  Data Hold Time    : 15 ns
  Address Setup Time: 10 ns
  GPMI Sample Delay : 6 ns
  tREA              : Unknown
  tRLOH             : Unknown
  tRHOH             : Unknown
  Description       : MT29F8G08ABABA
  Bad block table found at page 262016, version 0x01
  Bad block table found at page 261888, version 0x01
  1024 MiB
  MMC:
  In:    serial
  Out:   serial
  Err:   serial
  Bank 0 - EEPROM Magic Check ....OK(0x9510107)
  Bank 0 - EEPROM CRC Verify ....OK
  Net:   FEC0
  Hit any key to stop autoboot:  0
  +++ Barner +++++++++++++++++++++++++++++++++++
   Kernel Image Address : 0x200000
                Version : 11.00
          Build Version : 0001
  ++++++++++++++++++++++++++++++++++++++++++++++
  
  NAND read: device 0 offset 0x200000, size 0x800000
   8388608 bytes read: OK
  ## Booting kernel from Legacy Image at 80800000 ...
     Image Name:   Linux-2.6.34.9-WR4.2.0.0_standar
     Created:      2015-10-20   8:18:25 UTC
     Image Type:   ARM Linux Kernel Image (uncompressed)
     Data Size:    6262528 Bytes =  6 MB
     Load Address: 80008000
     Entry Point:  80008000
     Verifying Checksum ... OK
     Loading Kernel Image ... OK
  OK
  
  Starting kernel ...
  
  Initializing cgroup subsys cpuset
  Initializing cgroup subsys cpu
  Linux version 2.6.34.9-WR4.2.0.0_standard (solar@solar-server) (gcc version 4.4.1 (Wind River Linux Sourcery G++ 4.4a-333) ) #315 PREEMPT Tue Oct 20 17:18:21 JST 2015
  CPU: ARM926EJ-S [41069264] revision 4 (ARMv5TEJ), cr=00053177
  CPU: VIVT data cache, VIVT instruction cache
  Machine: Sharp MX25 Solar Remote Controller
  Memory policy: ECC disabled, Data cache writeback
  Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 64768
  Kernel command line: console=ttymxc0,115200 ubi.mtd=8,1024 root=ubi0:rootfs_a rootfstype=ubifs ro bootcmd=normal
  PID hash table entries: 1024 (order: 0, 4096 bytes)
  Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
  Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
  allocated 2359296 bytes of page_cgroup
  please try 'cgroup_disable=memory,blkio' option if you don't want memory and blkio cgroups
  Memory: 128MB 128MB = 256MB total
  Memory: 250740k/250740k available, 11404k reserved, 0K highmem
  Virtual kernel memory layout:
      vector  : 0xffff0000 - 0xffff1000   (   4 kB)
      fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
      DMA     : 0xfde00000 - 0xffe00000   (  32 MB)
      vmalloc : 0xd8800000 - 0xf4000000   ( 440 MB)
      lowmem  : 0xc0000000 - 0xd8000000   ( 384 MB)
      modules : 0xbf000000 - 0xc0000000   (  16 MB)
        .init : 0xc0008000 - 0xc0086000   ( 504 kB)
        .text : 0xc0086000 - 0xc05a7000   (5252 kB)
        .data : 0xc05cc000 - 0xc0600f00   ( 212 kB)
  SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
  Hierarchical RCU implementation.
  RCU-based detection of stalled CPUs is enabled.
  NR_IRQS:208
  MXC GPIO hardware
  MXC IRQ initialized
  Clock input source is 24000000
  Console: colour dummy device 80x30
  Calibrating delay loop... 198.65 BogoMIPS (lpj=397312)
  Security Framework initialized
  Mount-cache hash table entries: 512
  Initializing cgroup subsys debug
  Initializing cgroup subsys ns
  Initializing cgroup subsys cpuacct
  Initializing cgroup subsys memory
  Initializing cgroup subsys blkio
  Initializing cgroup subsys devices
  Initializing cgroup subsys freezer
  CPU: Testing write buffer coherency: ok
  Init trace_clock_cyc2ns: precalc_mult = 250000, precalc_shift = 9
  devtmpfs: initialized
  regulator: core version 0.5
  NET: Registered protocol family 16
  AIPS1 VA base: 0xfc000000
  CPU is i.MX25 Revision 1.0
  mxc_pwm_device registered
  pwm-backlight device registered
  Using SDMA I.API
  MXC DMA API initialized
  check_res_of_trace_clock: sched_clock() low resolution
  check_res_of_trace_clock: trace_clock_read64_ns() has high resolution
  bio: create slab <bio-0> at 0
  CSPI: spi_imx-0 probed
  MXC I2C driver
  cfg80211: Calling CRDA to update world regulatory domain
  regulator: REG1_BKLT: 4500 <--> 5500 mV at 5000 mV
  regulator: REG2_CPU: 2640 <--> 3877 mV at 3300 mV
  regulator: REG3_CORE: 1160 <--> 1703 mV at 1450 mV
  regulator: REG4_DDR: 1440 <--> 2115 mV at 1800 mV
  regulator: REG5_PERS: 2640 <--> 3877 mV at 3300 mV
  mc34704 0-0054: Loaded
  Switching to clocksource mxc_timer1
  NET: Registered protocol family 2
  IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
  TCP established hash table entries: 8192 (order: 4, 65536 bytes)
  TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
  TCP: Hash tables configured (established 8192 bind 8192)
  TCP reno registered
  UDP hash table entries: 256 (order: 0, 4096 bytes)
  UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
  NET: Registered protocol family 1
  RPC: Registered udp transport module.
  RPC: Registered tcp transport module.
  RPC: Registered tcp NFSv4.1 backchannel transport module.
  Bus freq driver module loaded
  i.MXC CPU frequency driver
  VFS: Disk quotas dquot_6.5.2
  Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
  Registering unionfs 2.5.4 (for 2.6.34-rc0)
  JFFS2 version 2.2. (NAND) c 2001-2006 Red Hat, Inc.
  fuse init (API version 7.13)
  Btrfs loaded
  yaffs Oct 20 2015 17:15:19 Installing.
  msgmni has been set to 489
  alg: No test for stdrng (krng)
  Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
  io scheduler noop registered
  io scheduler deadline registered
  io scheduler cfq registered (default)
  LTT : ltt-relay init
  pwm_backlight_update_status(): bl_power=0 brightness=0
  pwm_config(): duty_ns=0 period_ns=5000000
  pwm_config(): [MXC_PWMSAR] 00000000
  pwm_config(): [MXC_PWMPR ] 0000d878
  pwm_config(): [MXC_PWMCR ] 03c20050
  pwm_disable(): [MXC_PWMCR ] 03c20050
  _update_lcdc : bpp setting 32(default=32) bpp = pcd is 0x3
  mxc_sdc_fb mxc_sdc_fb.0: fb0: DISP0 BG fb device registered successfully.
  mxc_sdc_fb mxc_sdc_fb.0: fb1: DISP0 FG fb device registered successfully.
  ML22823 Power Up
  ML22823 Power Down
  ML22823 probed
  Serial: IMX driver
  imx-uart.0: ttymxc0 at MMIO 0x43f90000 (irq = 45) is a IMX
  console [ttymxc0] enabled
  imx-uart.1: ttymxc1 at MMIO 0x43f94000 (irq = 32) is a IMX
  imx-uart.2: ttymxc2 at MMIO 0x5000c000 (irq = 18) is a IMX
  brd: module loaded
  at24 0-0050: 256 byte 24c02 EEPROM (writable)
  MXC MTD nand Driver 2.5
  NAND device: Manufacturer ID: 0x2c, Chip ID: 0x38 (Micron NAND 1GiB 3,3V 8-bit)
  RedBoot partition parsing not available
  Creating 9 MTD partitions on "NAND 1GiB 3,3V 8-bit":
  0x000000000000-0x000000080000 : "nand.bootloader0"
  0x000000080000-0x000000100000 : "nand.bootloader1"
  0x000000100000-0x000000180000 : "nand.bootenv0"
  0x000000180000-0x000000200000 : "nand.bootenv1"
  0x000000200000-0x000000a00000 : "nand.kernel_a"
  0x000000a00000-0x000001200000 : "nand.kernel_b"
  0x000001200000-0x000001a00000 : "nand.kernel_c"
  0x000001a00000-0x000002200000 : "nand.kernel_d"
  0x000002200000-0x000020000000 : "nand.ubi0"
  UBI: attaching mtd8 to ubi0
  UBI: physical eraseblock size:   524288 bytes (512 KiB)
  UBI: logical eraseblock size:    520192 bytes
  UBI: smallest flash I/O unit:    4096
  UBI: sub-page size:              1024
  UBI: VID header offset:          1024 (aligned 1024)
  UBI: data offset:                4096
  UBI: attached mtd8 to ubi0
  UBI: MTD device name:            "nand.ubi0"
  UBI: MTD device size:            478 MiB
  UBI: number of good PEBs:        956
  UBI: number of bad PEBs:         0
  UBI: max. allowed volumes:       128
  UBI: wear-leveling threshold:    4096
  UBI: number of internal volumes: 1
  UBI: number of user volumes:     7
  UBI: available PEBs:             15
  UBI: total number of reserved PEBs: 941
  UBI: number of PEBs reserved for bad PEB handling: 9
  UBI: max/mean erase counter: 1104/562
  UBI: image sequence number: 745870485
  UBI: background thread "ubi_bgt0d" started, PID 958
  FEC Ethernet Driver
  fec_enet_mii_bus: probed
  console [netcon0] enabled
  netconsole: network logging started
  input: gpio-keys as /devices/platform/gpio-keys/input/input0
  rtc-pcf8563 0-0051: chip found, driver version 0.4.3
  rtc-pcf8563 0-0051: rtc core: registered rtc-pcf8563 as rtc0
  i2c i2c-0: ACK not received
  rtc-rx8025 0-0032: Unable to read registers #14..#15
  i2c i2c-0: probing for rx8025 failed
  rtc-rx8025: probe of 0-0032 failed with error -121
  i2c /dev entries driver
  MXC WatchDog Driver 2.0
  MXC Watchdog # 0 Timer: initial timeout 127 sec
  PMIC Character device: successfully loaded
  i.MX ADC at 0x50030000 irq 46
  mxsdhci: MXC Secure Digital Host Controller Interface driver
  mxsdhci: MXC SDHCI Controller Driver.
  mmc0: SDHCI detect irq 97 irq 9 INTERNAL DMA
  TCP cubic registered
  NET: Registered protocol family 17
  lib80211: common routines for IEEE802.11 drivers
  Static Power Management for Freescale i.MX25
  on-off key pressed
  regulator_init_complete: incomplete constraints, leaving REG5_PERS on
  regulator_init_complete: incomplete constraints, leaving REG1_BKLT on
  input: imx_adc_ts as /devices/virtual/input/input1
  i.MX ADC input touchscreen loaded.
  mmc0: new high speed SDIO card at address 0001
  UBIFS: recovery needed
  UBIFS: recovery deferred
  UBIFS: mounted UBI device 0, volume 1, name "rootfs_a"
  UBIFS: mounted read-only
  UBIFS: file system size:   104558592 bytes (102108 KiB, 99 MiB, 201 LEBs)
  UBIFS: journal size:       10469376 bytes (10224 KiB, 9 MiB, 21 LEBs)
  UBIFS: media format:       w4/r0 (latest is w4/r0)
  UBIFS: default compressor: lzo
  UBIFS: reserved for root:  0 bytes (0 KiB)
  VFS: Mounted root (ubifs filesystem) readonly on device 0:13.
  devtmpfs: mounted
  Freeing init memory: 504K
  UBIFS: recovery needed
  UBIFS: recovery completed
  UBIFS: mounted UBI device 0, volume 3, name "data_a"
  UBIFS: file system size:   59301888 bytes (57912 KiB, 56 MiB, 114 LEBs)
  UBIFS: journal size:       9883648 bytes (9652 KiB, 9 MiB, 19 LEBs)
  UBIFS: media format:       w4/r0 (latest is w4/r0)
  UBIFS: default compressor: lzo
  UBIFS: reserved for root:  0 bytes (0 KiB)
  UBIFS: recovery needed
  UBIFS: recovery completed
  UBIFS: mounted UBI device 0, volume 4, name "data_b"
  UBIFS: file system size:   18206720 bytes (17780 KiB, 17 MiB, 35 LEBs)
  UBIFS: journal size:       4681729 bytes (4572 KiB, 4 MiB, 9 LEBs)
  UBIFS: media format:       w4/r0 (latest is w4/r0)
  UBIFS: default compressor: lzo
  UBIFS: reserved for root:  0 bytes (0 KiB)
  UBIFS: mounted UBI device 0, volume 5, name "config"
  UBIFS: mounted read-only
  UBIFS: file system size:   18206720 bytes (17780 KiB, 17 MiB, 35 LEBs)
  UBIFS: journal size:       4681729 bytes (4572 KiB, 4 MiB, 9 LEBs)
  UBIFS: media format:       w4/r0 (latest is w4/r0)
  UBIFS: default compressor: lzo
  UBIFS: reserved for root:  0 bytes (0 KiB)
  UBIFS: recovery needed
  UBIFS: recovery completed
  UBIFS: mounted UBI device 0, volume 6, name "log"
  UBIFS: file system size:   26529792 bytes (25908 KiB, 25 MiB, 51 LEBs)
  UBIFS: journal size:       5722112 bytes (5588 KiB, 5 MiB, 11 LEBs)
  UBIFS: media format:       w4/r0 (latest is w4/r0)
  UBIFS: default compressor: lzo
  UBIFS: reserved for root:  0 bytes (0 KiB)
  BackLight Power On ....
  BackLight Max Level 5 ....
  pwm_backlight_update_status(): bl_power=0 brightness=255
  pwm_enable(): clk_enable
  pwm_enable(): [MXC_PWMCR ] 03c20051
  pwm_config(): duty_ns=5000000 period_ns=5000000
  pwm_config(): [MXC_PWMSAR] 0000d878
  pwm_config(): [MXC_PWMPR ] 0000d878
  pwm_config(): [MXC_PWMCR ] 03c20051
  setting brithness level is 255
  error: /etc/logrotate.conf:30 unknown group 'utmp'
  error: found error in /var/log/wtmp , skipping
  mlan driver install  : mlan: module license 'Marvell Proprietary' taints kernel.
  Disabling lock debugging due to kernel taint
  [ OK ]
  sd8787 driver install  : wlan_sdio mmc0:0001:1: firmware: requesting mrvl/sd8787_uapsta.bin
  WLAN FW is active
  [ OK ]
  console=ttymxc0,115200 ubi.mtd=8,1024 root=ubi0:rootfs_a rootfstype=ubifs ro bootcmd=normal
  Copy /backup/ts/pointercal.bak /etc ... Not Found
  Copy /data/ts/pointercal /etc ... [ OK ]
  +++++++++++++++++++++++++++++++++++
   Last Reset : [ H/W-Reset ]
  +++++++++++++++++++++++++++++++++++
  
  ---------------------------------------
  Version      : 11.00
  Build number : 0001
  Date         : 2017/05/10 11:44
  ---------------------------------------
  
  Speech A-Volume Setting
  low = 0x26,  mid = 0x2b,  mid_high = 0x31,  high = 0x37
  RTC Initialize
  2018/02/08 08:32:08
  ********************
     Mode: [Normal]
  ********************
  START !!!!
  
  JH-RWL7 login: mlan0     deepsleep:0
  mlan0     regioncode:65
  mlan0     httxcfg:0
  mlan0     htcapinfo:67108864
  1970-01-01 09:00:14: (log.c.166) server started
  1970-01-01 09:00:14: (server.c.968) WARNING: unknown config-key: url.access-deny (ignored)
  ioctl[SIOCSIWPMKSA]: Invalid argument
  ioctl[SIOCSIWESSID]: Invalid argument
  ioctl[SIOCSIWPMKSA]: Invalid argument
  pwm_backlight_update_status(): bl_power=0 brightness=255
  pwm_enable(): [MXC_PWMCR ] 03c20051
  pwm_config(): duty_ns=5000000 period_ns=5000000
  pwm_config(): [MXC_PWMSAR] 0000d878
  pwm_config(): [MXC_PWMPR ] 0000d878
  pwm_config(): [MXC_PWMCR ] 03c20051
  udhcpc (v1.15.3) started
  Sending discover...
  Sending select for 192.168.0.4...
  Sending select for 192.168.0.4...
  Lease of 192.168.0.4 obtained, lease time 3600
  deleting routers
  adding dns 192.168.0.1
  pwm_backlight_update_status(): bl_power=0 brightness=204
  pwm_enable(): [MXC_PWMCR ] 03c20051
  pwm_config(): duty_ns=4000000 period_ns=5000000
  pwm_config(): [MXC_PWMSAR] 0000ad2c
  pwm_config(): [MXC_PWMPR ] 0000d878
  pwm_config(): [MXC_PWMCR ] 03c20051
  slotCtrlConditionsEvt() 0x2
  slotCtrlConditionsEvt() END 0x40
  slotCtrlConditionsEvt() 0x40
  slotCtrlConditionsEvt() END 0x0
  QStateMachine::start(): already running

 

 ログインシェルは動いてますが、rootにパスワードがちゃんと設定されていますね。
U-bootが動いているので、ここからカーネルイメージ引っこ抜いたら解析できたりするんでしょうか…?

SHARP 太陽光発電 エネルギーモニタ JH-RWL7を分解する(2)

 

普段様々な機械を分解・解析していますが、
そんなことをやったことがない人にとっては何をしているかわからないと思います。
せっかくなのでどんなふうにやっているのか書きながらやってみます。

 

さて、組み込みLinuxだと仮定するとまず見たいのが起動ログです。

UARTを探すために闇雲にピンを当たっても仕方がないので
データシートを参考に当たりをつけてみます。

f:id:honeylab:20180203111729j:plain

CPU周辺の配線はこんな感じ。
そして、データシートによるピン配置は以下の表のようになっていました。

f:id:honeylab:20180203230938p:plain

まず、本当にこのパターンであっているのかを検討します。

空きパターンになっているCPUの真下、実装されている発振子の隣の部分。
これは直感として32KHz RTC用の発振子パターンです。

f:id:honeylab:20180203231402p:plain f:id:honeylab:20180203231526p:plain

 

表を見るとたしかにこのあたりにありますね。間違いなさそうです。

ルータなんかを分解するとしっかりUARTのピンが出ていたりするんですが、
ここまでで明確に出てきている様子はありません。
では真ん中に堂々と実装されているコネクタを推測してみます。
ピン数は10。おそらくJTAGなのではないかと思っていますがどうでしょう。

f:id:honeylab:20180203231843p:plainf:id:honeylab:20180203232243p:plain

JTAGに必要な信号線がこの辺からまとめて取り出されているイメージができるでしょうか。
コネクタピンアサインをパターンから推測すると

1:GND 
2: 
3:
4:
5:
6:
7:
9:VCC
10:VCC
この時点で不明信号は7本。これが赤で囲まれたピンに割り当てられていると推測できます。
しかし、JTAGなんかは純正開発ツールでも使わない限りあまり使いません。
そして、明確にピンが建てられているパッドのいずれもUARTではないことがわかりました。

とは言え、全く出てないというのは少々不可解。
再びピンアサイン表からUARTを探してみるとこの辺とのこと。

f:id:honeylab:20180203233329p:plain

これはチップの位置としてはこの辺ですが…

f:id:honeylab:20180203233540p:plain

あれ!うにょーんって伸びてどっかに行ってますねこれ。
どこだろう…

今のところ私の勘では下の黄色いところのどれかです。

f:id:honeylab:20180203233736p:plain


ちょっと離れすぎてる気もしますが、これはJTAGのコネクタとも近いので
デバッグ用の信号がまとめられていると考えれば不自然ではない感じもします。
このあたりにプローブを当てて起動試験をしてみようかと考えています。

 

※追記※

よく見たら全然堂々と4ピンパッドがあったのを見逃してた…
これあんまり長時間外してるの怖いから写真ベースでやってたら
たまたま端っこで写ってなかったの見逃してたわ…
絶対ここじゃんUART…

f:id:honeylab:20180203111622j:plain

    ↑ 4本ピンあった…

 

SHARP 太陽光発電 エネルギーモニタ JH-RWL7を分解する(2)

 

普段様々な機械を分解・解析していますが、
そんなことをやったことがない人にとっては何をしているかわからないと思います。
せっかくなのでどんなふうにやっているのか書きながらやってみます。

 

さて、組み込みLinuxだと仮定するとまず見たいのが起動ログです。

UARTを探すために闇雲にピンを当たっても仕方がないので
データシートを参考に当たりをつけてみます。

f:id:honeylab:20180203111729j:plain

CPU周辺の配線はこんな感じ。
そして、データシートによるピン配置は以下の表のようになっていました。

f:id:honeylab:20180203230938p:plain

まず、本当にこのパターンであっているのかを検討します。

空きパターンになっているCPUの真下、実装されている発振子の隣の部分。
これは直感として32KHz RTC用の発振子パターンです。

f:id:honeylab:20180203231402p:plain f:id:honeylab:20180203231526p:plain

 

表を見るとたしかにこのあたりにありますね。間違いなさそうです。

ルータなんかを分解するとしっかりUARTのピンが出ていたりするんですが、
ここまでで明確に出てきている様子はありません。
では真ん中に堂々と実装されているコネクタを推測してみます。
ピン数は10。おそらくJTAGなのではないかと思っていますがどうでしょう。

f:id:honeylab:20180203231843p:plainf:id:honeylab:20180203232243p:plain

JTAGに必要な信号線がこの辺からまとめて取り出されているイメージができるでしょうか。
コネクタピンアサインをパターンから推測すると

1:GND 
2: 
3:
4:
5:
6:
7:
9:VCC
10:VCC
この時点で不明信号は7本。これが赤で囲まれたピンに割り当てられていると推測できます。
しかし、JTAGなんかは純正開発ツールでも使わない限りあまり使いません。
そして、明確にピンが建てられているパッドのいずれもUARTではないことがわかりました。

とは言え、全く出てないというのは少々不可解。
再びピンアサイン表からUARTを探してみるとこの辺とのこと。

f:id:honeylab:20180203233329p:plain

これはチップの位置としてはこの辺ですが…

f:id:honeylab:20180203233540p:plain

あれ!うにょーんって伸びてどっかに行ってますねこれ。
どこだろう…

今のところ私の勘では下の黄色いところのどれかです。

f:id:honeylab:20180203233736p:plain


ちょっと離れすぎてる気もしますが、これはJTAGのコネクタとも近いので
デバッグ用の信号がまとめられていると考えれば不自然ではない感じもします。
このあたりにプローブを当てて起動試験をしてみようかと考えています。