2010年04月15日

Neo Slim 3000 GPIO まとめ

dingoo-linux は A-320 の GPIO の解析を ここでまとめている。

同じようにまとめておかないと、よくわからなくなるので、ここを使って記録していこうと思う。

まず、Neo Slim 3000 は Jz4725B を使用している。128 ピンもある LQFP なのだが、SDRAM や LCD など 決まったピン割り当てがあるので、自由になるピンは意外に少ない。

例えば、自由になりそうな PWM は、PC15/PWM5 のみ。ここから LCD のバックライトが これに割り当たっているのではないかと推測できる。

    実際に PC15/PWM5 であった。初期状態は L 。これを H にすると バックライトが点灯。


それ以外でも 自由になりそうな GPIO は 数本しかないようだ。これだけ厳しいと ボタンを LCD のデータ線と共有するのも理解できる。

ちなみに 最低限度必要そうな GPIO は、

  • ボタン -- 詳細不明だが、LCD のデータ(PD0-PD15)と共用
  • スピーカー アンプ ON/OFF
  • バックライト LED ON/OFF (+PWM)
  • SDカード CS
  • DC電源のセンス
  • アナログスティック制御 (たぶん GPIO 1つと ADC 1つ)
  • LED 左 (赤) (ハード結線)
  • LED 右 (青) (ハード結線)
  • 電源スイッチのセンス (WKUP/PB31のはず)
  • 電源 OFF (PWRON のはず)

ぐらいか。GPIO で 5 個必要そうだが、自由になりそうな GPIO の数も(TxD/RxDを除くと) 8個 しかない。

上記以外でも GPIO を使っている可能性がある。思いつくのは、

  • POPノイズ低減
    Ben-NanoNote の回路図をみたが イヤホンを直結せずに MOS FET スイッチを入れていた。MOS FET らしきものはないようだから、可能性はなさそうだ。
  • ソフト I2c
    FM ラジオの制御を I2Cインターフェイスではなく GPIO で行っている可能性がある。GPIO が余っていればそうしてもおかしくはない。... のだが、よく考えたら FM ラジオモジュールの裏まで I2C の線が来ているのは確認済み。わざわざ別の線を付ける理由はないので、I2C を普通に使っているはずだ。

    補足:

    LED は ソフトで制御していなかった。USB-BOOT の時点で点灯している。
    電源の制御自体も GPIO ではなく専用の線がある。

    左右 LED メモ:



    右のLED, 左のLED の順。両方 左から アノード-カソード。LED のサイズは 1608。

    右のLED は青で抵抗が 102(1KΩ)、左のLED は赤で 201(200Ω)。抵抗が逆ではないかというのはサテオキ、左に注目すると太い線 - 抵抗 - LED と接続されている。この太い線はたぶん USB から供給される 5V そのもので GPIO で 供給されているかどうかを GPIO でセンスしているはず。

    FMラジオモジュールメモ:



    チップは違うが、FMレシーバモジュール(AR1010)を ストロベリーリナックスで扱っている。データシートを見るとピンアサインは、

    1 アンテナ (右上)
    2 N.C.
    3 L-OUT
    4 R-OUT
    5 GND (右下)
    6 VCC (左下)
    7 Write/Read
    8 Busmode (L: I2C / H: SPI)
    9 Clock
    10 Data (左上)

    となっている。(左右逆の番号割り当てなので注意) SPI を使うピンの余裕などないとすれば、I2C を使っているはずで、それは Busmode の電圧で判断できる。ピンアサインが合っているとすれば、6(VCC) と 8 が同じではないのでたぶん GND -- なら I2C のはず。 L-OUT/R-OUT はアナログなので、LINEIN に入るのではないかと思えるが、未確認。

    I2C でアクセスするレジスタの仕様は AR1000 なら サンプルコードから推測できる。使用している RDA5807P と互換性があるのかどうかは不明。RDA5800C なら aitendo で扱っているのでデータシートは入手できる。仕様が RDA5807P と近いことは想像できるが、どれぐらい違うのかは不明。

    ところで、RDA5800C はデータシートの情報だけでは 動かないそうだ。→ 参考
    ChaN さんのサンプルプログラムを参照しないと扱えない。RDA5807P は、データシートすら入手できていない。なかなか使うのは難しそうだ。まぁこういうのは最後にしたほうが良さそう。

    アナログスティック周り:

    ADC が 1 つしかないのに、2個必要になるアナログスティックをつなげているのが不思議だったのだが.. どうも SOT23 のIC が 3つあるところに接続されているようだ。



    IC の マークは、A2sSH , As1SH, WW1 -- 調べてみるとどうも A2sSH が Nch MOS FET(AO3402 互換?), A1sSH が Pch MOS FET(AO3401 互換?), WW1 が ショットキーバリア ダイオード2 個入り(BAT54C 互換?) らしい。

    実際の回路はわからないが、この組み合わせなら 1つの GPIO で切り替えられそうだ。

    電子工作しているとデスクリート IC が相対的に高いので、アナログ SW などを使ったりするのだが、こうやって 3 つも使っているのを見ると恐ろしく単価が低いのかも知れない。

    LED ドライバ周り:



    この IC が バックライト LED 用の DC/DC コンバータ。1番 pin がダイオードに接続されていて LX 。2 番 pin が GND 。裏には 22uH のインダクタ。12 Ωと低い抵抗値の抵抗があり、電流制限用に思える。バックライト LED は、 2 並列 2 直列 みたいだから 40mA ぐらい流すはず。そう仮定すると FB の電圧は 12 x 0.04 = 0.48V となるが、ちょっと中途半端。

    それはともかく、どうも aitendo で扱っている XZ5121のような IC のようだ。..とすると PWM 制御用の GPIO は 4 番 pin に接続されているはず。-- 0 Ωのジャンパが入っていたりしてどうもそれっぽい。

    ところで、XZ5121 のように OVP 端子がある IC でないと 定電流駆動は危険。LCD なしだと電圧が上がりすぎて コンデンサや IC そのものが壊れてしまう。まぁ大丈夫だと思うが 一応コンデンサの両端の電圧をチェックしておいた方が良いかも知れない。

      あまり信用できないテスターなのだが、5V ぐらいだった。とりあえずは大丈夫そうだ。


    電源制御のピンについて:

    RTC には、次のようなピンがある。


    84 PPRST(RTC) - power on reset / reset
    85 WKUP(RTC)/PB31 - wakeup signal after power down
    86 PWRON(RTC) - power on/off control of main power.


    WKUP は普通 電源ボタンに接続されるようだ。で PWRON は 出力で 電源ON は L レベル。--- GPIO を探さなくとも 電源を切ることができるのはありがたい。

    PPRST は いわゆるリセット。だがスイッチはないので、パワーオンリセット だけしか使えない。

    ... ブートプログラムやカーネルのテストで途中で暴走したりすれば、リセットもできず 電源も切れないことになりそうだ。WDT - Watch Doc Timer 機能は RTC に あるが、最初はなにもないところから始めるし --- バッテリーがない方が便利そうだ。ある程度まで行けば 、(Reset がわりの)電源断に頼らないようにできるだろうが...

      WDT reset がかかって立ち上がってきたときに、電源スイッチが Off側だったら電源を切るとかすれば、安心できるか。

      そういう対策は必要だが、それを作るまで裸のままというのもどうかと思う。よくよく考えれば バッテリーの線にスイッチを付けてしまえば、ソフトで対応しなくともバッテリー自体は切れる。

      RESET をどう引き出すか悩んでいたのだが、これなら電子工作としては難しくないし ... これでいいや。

    Nand Flash メモ:

    ピンをどういう風に接続するのものなのか Board_Design_Guide から

    49 PC9 A16(SRAM)/AL(NAND) → ALE
    50 PC8 A15(SRAM)/CL(NAND) → CLE
    51 PC29 FWE(NAND) → WE#
    52 PC28 FRE(NAND) → RE#
    53 PC27 FRB(NAND) → R/B#
    55 PC22 CS2(SRAM) → CE# (?)
    56 PC21 CS1(SRAM) → CE# (?)

    + DATA D0 - D7


    NAND FLASH 用のピンは全部使っているようだ。それに加えて CS1 or CS2 を CE# に接続するらしい。で、NAND FLASHは 空きパターンもあるから たぶん CS1/CS2 両方使っている。

    そういえば... 不要になった eeePC の 4GN/8GB SSD モジュールがいくつかある。K9GAG08U0M が 2 つ載ったやつと 4 つ載ったやつ。

    0.5mm ピッチなので 0.8mm ピッチの SDRAM より載せ替えが難しいが覚えておこう。4GB にもできるかも知れない。-- だからといって格別便利になったりはしないと思うが 壊した時修理できる可能性がある。自分でカーネルを作ったりすれば愛着が湧いたりするので、重要かも。

    SDRAM メモ:

    SAKC も参照してみたが、次の配線になるはず。

    10 PB16 DCS(SDRAM) → CS#
    11 PB17 RAS(SDRAM) → RAS#
    12 PB18 CAS(SDRAM) → CAS#
    13 PB19 SDWE(SDRAM)/BUFD → WE#
    14 PB20 WE0(SDRAM) → DQML
    15 PB21 WE1(SDRAM) → DQMU
    16 PB24 CKO(SDRAM) → CLK
    17 PB25 CKE(SDRAM) → CKE

    D0-D15 → D0-D15
    A0-A12 → A0-A12
    A13 → BA0
    A14 → BA1

    空いているピンなどはないようだ。ちなみに、512Kbit の SDRAM にしたとしても同じピンアサイン。

    そういえば、512Mbit (16MB x 8bit x 4bank) の SDRAM x 2 なら 2 段マウントで 128MB になるかも。0.8mm ピッチとはいえ 8bit 分ジャンパしなければならないから工作的に難しいが Jz4725B が対応しているかどうかぐらいは調べておこう。

      Jz4725(B) 自身は Column 12bit /raw 13bit/4 bank まで対応している。上の SDRAMは column 11bit / raw 13 bit 。

      この設定は、ブートローダで行う。linux カーネルは基本触らない。ブートローダがメモリにロードするわけで そのときには設定済みでないといけないわけだ。

      RESET 時の設定というものもある。上位アドレスはつかえないが、とりあえず下位だけはアクセスできるような設定のようだ。

      実をいうと チップ取りを目的に 512MB の SO-DIMM を買ってしまった。中古でなく新品が3000円ぐらいだったのだが、中身は 8bit の HYB39S512800A x 8 だった。いずれトライしてみたい。

      ところで 元々付いている SDRAM は、256Mb (4M x 16bit x 4bank)。column 9bit/row 13bit 。

      ついでに書いておくと BANK は常に最上位ビット。したがって Jz4725(B) はインターリーブできない。


    LCD用ピンアサイン:

    2 PD18 LCD_PCK(LCD)
    108 PD20 LCD_VSYNC(LCD)
    109 PD19 LCD_HSYNC(LCD)
    110 PD21 LCD_DE(LCD)
    LCD_D0 - D15 => R5G6B5

    GPIO候補

    102 PD23 LCD_SPL(LCD)
    103 PD22 LCD_CLS(LCD)
    105 PD25 LCD_REV(LCD)
    107 PD24 LCD_PS(LCD)
    111 PD17 LCD_D17(LCD)
    112 PD16 LCD_D16(LCD)

    LCD 用のピンは全部は使っていない。使っていないピンは GPIO として使われているはず。



    そのあたりの写真。右から 97,98... と並んでいる。
    102,103 は見えない。105 ,107 はすぐ上でスルーホール。111,112 も見えない。



    裏からみた写真。上に伸びているのが BOOT_SEL1 で 右のスルーホール。で、105,107 がその右に並んでいるはずなのだが、裏からみても見えない。

    Smart LCD 用のピンについて :

    電子工作ネタになるが、高速な I/O をしたいとするならば、LCD のコネクタを使う以外にないので、ちょっと調査してみた。

      Smart LCD は、コマンドがあるタイプの LCD 。コマンドかデータは (9bit シリアル以外は) RS 線で 指定する。サポートしている機能は、データを一方的に送るのみで READ 系はサポートしていない。必要なら GPIO を操作して読み込めということだろう。

      サポートしている Smart LCD はパラレル以外に シリアルも。


      109 PD19 LCD_HSYNC(LCD) → SLCD_RS
      108 PD20 LCD_VSYNC(LCD) → SLCD_CS
      2 PD18 LCD_PCK(LCD) → SLCD_CLK (Serial Only)
      113 PD15 LCD_D15(LCD) → SLCD_DATA (Serial Only)


      Smart LCD を使う場合は、LCD のピンが上のように切り替わる。LCD のピンが切り替わるだけだから、改造して LCD のコネクタの先に別の装置を接続するようなときに、Smart LCD も直結できる。パラレルなら SLCD_LCK しか物理的には余らないが、コマンドが 16bit とは限らないので、FPGA などを使う場合 RS を使って多重化できる。また、シリアルを使えば、D0-D14 が別の目的に使えることになる。

      ちなみに、LCD でも 8bit-Serial RGB というモードもある。D0-D7 に R/G/B を順番に出力していくモードで、D8-D15 を別の目的に使える。(ちなみに このタイプは、Ben-NanoNote で使われている)

      あと IPU を使用する場合、サポートできるフレームバッファのフォーマットは R8G8B8 とか R5G6B5 とかに限られる。smart LCD の場合好きなように使うと IPU が使えないかも知れないので注意。


    TV OUT 用のピンについて :

    JZ4725B のデータシートには TV エンコーダの機能などない。ボードを見ても TV OUT 用のチップは載っていない。

    にも関わらず、TV OUT のメニューがあったりする。また、"PMP-3000" という ベースが同じ 製品 の仕様には TV OUT があったりする。

    さらに "PMP-3100" は、"PMP-3000" より少しだけ高い価格で JZ4725B を使っていると思えるのだが、TV OUT 用のコネクタまで持っている。

    また、Linux などでは JZ4725B は JZ4750L として管理している。そして、JZ4750 , JZ4755 は TV エンコーダというハードウェアを持っていたりする。

    これはどういうことだろう? ちょっと気になったりしている。

    SDカードセンス:

    カードを入れてみると GPIO の状態が変わった。PD14 が L になっている。

    おどろいたことに、SD カードのセンスなんてものまで LCD の出力と共用していた。

    まとめ



      Neo Slim 3000 JZ4725B ピンアサイン表 (作成中)

      凡例 : x 割り当てに選択の余地がないピン
      o Neo Slim 3000 固有の割り当てで判明したピン
      ? 不明なピン

      Jz4725 Jz4725B
      x 1 PD0 LCD_D0(LCD)
      x 2 PD18 LCD_PCK(LCD)
      x 3 GND
      x 4 VDDCORE(1.8V)
      x 5 PB3 A3(SDRAM)
      x 6 PB2 A2(SDRAM)
      x 7 PB1 A1(SDRAM)
      x 8 PB0 A0(SDRAM)
      x 9 PB10 A10(SDRAM)
      x 10 PB16 DCS(SDRAM)
      x 11 PB17 RAS(SDRAM)
      x 12 PB18 CAS(SDRAM)
      x 13 PB19 SDWE(SDRAM)/BUFD
      x 14 PB20 WE0(SDRAM)
      x 15 PB21 WE1(SDRAM)
      x 16 PB24 CKO(SDRAM)
      x 17 PB25 CKE(SDRAM)
      x 18 PB12 A12(SDRAM)
      x 19 PB11 A11(SDRAM)
      x 20 GND
      x 21 VDDCORE(1.8V)
      x 22 PB9 A9(SDRAM)
      x 23 PB8 A8(SDRAM)
      x 24 VDDIO(3.3V)
      x 25 GND
      x 26 PB7 A7(SDRAM)
      x 27 PB6 A6(SDRAM)
      x 28 PB5 A5(SDRAM)
      x 29 PB4 A4(SDRAM)
      x 30 PB13 A13(SDRAM)
      x 31 PB14 A14(SDRAM)
      x 32 PA8 D8(SDRAM)
      x 33 PA9 D9(SDRAM)
      x 34 PA10 D10(SDRAM)
      x 35 PA11 D11(SDRAM)
      x 36 PA12 D12(SDRAM)
      x 37 PA13 D13(SDRAM)
      x 38 PA14 D14(SDRAM)
      x 39 PA15 D15(SDRAM)
      x 40 PA0 D0(SDRAM)
      x 41 PA1 D1(SDRAM)
      x 42 PA2 D2(SDRAM)
      x 43 PA3 D3(SDRAM)
      x 44 PA4 D4(SDRAM)
      x 45 PA5 D5(SDRAM)
      x 46 PA6 D6(SDRAM)
      x 47 PA7 D7(SDRAM)
      ? 48 PC15 PWM5
      x 49 PB16 A16(SRAM)/AL(NAND)
      x 50 PB15 A15(SRAM)/CL(NAND)
      x 51 PC29 FWE/MSC0_D1
      x 52 PC28 FRE/MSC0_D0
      x 53 PC27 FRB/MSC0_D2
      ? 54 PC20 WAIT(SRAM)
      x 55 PC22 CS2/MSC0_D3
      x 56 PC21 CS1
      ? 57 PC13 PWM3/UART0_RxD(UART)
      ? 58 PC12 PWM2/UART0_TxD(UART)
      ? 59 PC11 PWM1/I2C_SCK(I2C)
      ? 60 PC10 PWM0/I2C_SDA(I2C)
      x 61 PD28 MSC1_D0(MSC)
      x 62 PD26 MSC1_CLK(MSC)
      x 63 PD27 MSC1_CMD(MSC)
      x 64 EXCLK(CPM)
      x 65 EXCLKO(CPM)
      x 66 VDDIO(3.3V)
      x 67 PBAT/ADIN0
      ? 68 ADIN1
      x 69 VSSADC(CPM)
      x 70 VDDADC(CPM)
      x 71 AVDDPLL(CPM)
      x 72 AVSSPLL(CPM)
      x 73 VDDPLL(CPM)
      x 74 VSSPLL(CPM)
      x 75 VDDA(USB)
      x 76 RREF(USB)
      x 77 VDDUSB(USB)
      x 78 DM0(USB)
      x 79 DP0(USB)
      x 80 VSSUSB(USB)
      x 81 RTCLK(RTC)
      x 82 RTCLKO(RTC)
      x 83 VDDRTC(RTC)
      x 84 PPRST(RTC)
      x 85 PB31 WKUP(RTC)
      x 86 PWRON(RTC)
      x 87 VDDHP(CODEC)
      x 88 RHPO(CODEC)
      x 89 VSSHP(CODEC)
      x 90 LHPO(CODEC)
      x 91 VDDLHP(CODEC)
      x 92 VSSCDC(CODEC)
      x 93 VDDCDC(CODEC)
      x 94 VREF(CODEC)
      x 95 VDDCDC2(CODEC)
      x 96 VSSCDC2(CODEC)
      x 97 LLINEIN(CODEC)
      x 98 RLINEIN(CODEC)
      x 99 MICIN(CODEC)
      x 100 BOOT_SEL0
      x 101 BOOT_SEL1
      ? 102 PD23 LCD_SPL(LCD)
      ? 103 PD22 LCD_CLS(LCD)
      x 104 VDDIO(3.3V)
      ? 105 PD25 LCD_REV(LCD)
      x 106 GND
      ? 107 PD24 LCD_PS(LCD)
      x 108 PD20 LCD_VSYNC(LCD)
      x 109 PD19 LCD_HSYNC(LCD)
      x 110 PD18 LCD_DE(LCD)
      ? 111 PD17 LCD_D17(LCD)
      ? 112 PD16 LCD_D16(LCD)
      x 113 PD15 LCD_D15(LCD)
      x 114 PD14 LCD_D14(LCD)
      x 115 PD13 LCD_D13(LCD)
      x 116 PD12 LCD_D12(LCD)
      x 117 PD11 LCD_D11(LCD)
      x 118 PD10 LCD_D10(LCD)
      x 119 PD9 LCD_D9(LCD)
      x 120 PD8 LCD_D8(LCD)
      x 121 PD7 LCD_D7(LCD)
      x 122 PD6 LCD_D6(LCD)
      x 123 PD5 LCD_D5(LCD)
      x 124 PD4 LCD_D4(LCD)
      x 125 GND
      x 126 PD3 LCD_D3(LCD)
      x 127 PD2 LCD_D2(LCD)
      x 128 PD1 LCD_D1(LCD)



      Neo Slim 3000 判明ピン

        バックライトの制御
      48 PC15 PWM5/A18(SRAM)
        SDカードのセンス
      114 PD14 LCD_D14(LCD)
        "L" ボタン
      85 PB31 WKUP(RTC)
        "R" ボタン
      124 PD4 LCD_D4(LCD)
        "↑" ボタン
      1 PD0 LCD_D0(LCD)
        "↓" ボタン
      128 PD1 LCD_D1(LCD)
        "←" ボタン
      127 PD2 LCD_D2(LCD)
        "→" ボタン
      126 PD3 LCD_D3(LCD)
      101 BOOT_SEL1
        "▲" ボタン
      117 PD11 LCD_D11(LCD)
        "×" ボタン
      118 PD10 LCD_D10(LCD)
        "■" ボタン
      116 PD12 LCD_D12(LCD)
        "○" ボタン
      119 PD9 LCD_D9(LCD)

      Neo Slim 3000 調査対象ピン

      バックライトの制御候補

      ? 48 PC15 PWM5/A18(SRAM)

      専用機能
      ? 57 PC13 PWM3/UART0_RxD(UART)
      ? 58 PC12 PWM2/UART0_TxD(UART)
      ? 59 PC11 PWM1/I2C_SCK(I2C)
      ? 60 PC10 PWM0/I2C_SDA(I2C)
      ? 68 ADIN1

      電源制御
      x 84 PPRST(RTC)
      x 85 PB31 WKUP(RTC)
      x 86 PWRON(RTC)

      GPIO 候補
      ? 54 PC20 WAIT(SRAM)
      ? 102 PD23 LCD_SPL(LCD)
      ? 103 PD22 LCD_CLS(LCD)
      ? 105 PD25 LCD_REV(LCD)
      ? 107 PD24 LCD_PS(LCD)
      ? 111 PD17 LCD_D17(LCD)
      ? 112 PD16 LCD_D16(LCD)
      + UART ?
  • posted by すz at 21:39| Comment(0) | TrackBack(0) | Jz47xx(機種解析)
    この記事へのコメント
    コメントを書く
    お名前: [必須入力]

    メールアドレス: [必須入力]

    ホームページアドレス: [必須入力]

    コメント: [必須入力]

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


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

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