玄人志向「玄箱」で自宅サーバ Part13

このエントリーをはてなブックマークに追加
378193
やっちまった。u-boot書き換え失敗した。
初代玄箱に最新版u-boot-2009.03を無理矢理入れようとしたのが間違いだった。
(´・ω・`)

以下、失敗例。

# diff Makefile.org Makefile
1659,1660c1659
< #linkstation_HDLAN_config \
< # Remove this line when HDLAN is fixed
---
> linkstation_HDLAN_config \

linkstation.hは適当に編集


dd if=u-boot.bin of=/dev/mtdblock1 bs=1k

再起動

シリアルでみると以下で止まってる。
U-Boot 2009.03 ( 5月 30 2009 - 13:41:18) LinkStation / KuroBox

CPU:   MPC8245 Revision 1.4 at 196.608 MHz: 16 kB I-Cache 16 kB D-Cache
DRAM:  64 MB
FLASH:  4 MB
        00  0b  1317  0985  0200  ff
        00  0c  1095  0680  0101  ff
        00  0e  1033  0035  0c03  ff
        00  0e  1033  0035  0c03  ff
        00  0e  1033  00e0  0c03  ff


JTAG(ARM-USB-OCD)で復旧します。
379193:2009/06/04(木) 23:11:31 ID:???
ちょっと長くなるのですまんけど、ARM-USB-OCDで復旧する手順を書くよ。
※自作は切り分け面倒だし、安いパラレルポート対応のやつとか
 レガシーデバイスのは買いたくなかったのでARM-USB-OCD買ったよ。

<初代玄箱のJTAG復旧方法>

■必要なもの
・ARM-USB-OCD:1万ぐらい
・1kΩチップ抵抗 × 1
・2550 コネクタ + ピン × 12 (予備で+6ぐらいしておくといいかも)
・適当なケーブル 15cmぐらい × 6
・2550 ピンヘッダ 2列で40個ぐらい × 1

■すること
・ケーブル作成
 両端を 2550コネクタで加工する。6本作るので結構面倒だよ。
 きっと長さはそろえた方がいいよ。
・R67に1kオームの抵抗を半田付け
 繋がらなくてごちゃごちゃやっているときにつけちゃった。
 必要かどうかは正直分からんよ。(細かい作業だったのでとりたくない)
 誰か試してみてくれると助かる。
・ピンヘッダ
 2x8の16個でパッチン切断して、玄箱の基盤に半田付け。
 前に付けたヒートシンクにぶつかるので、裏から付けて
 間違えないようにピンアサインをマジックで基盤に書いたよ。
 ※ピンアサインが逆になってるので注意して。
380193:2009/06/04(木) 23:31:54 ID:???

■すること
・ARM-USB-OCDのドライバインストール、接続
・作ったケーブルで以下のように接続

KUROBOX ARM-USB-OCD
1 TDO 13
3 TDI 5
4 TRST - (3)使わなくても可
6 detect 1
7 TCK 9
9 TMS 7
13 Vcc -
16 GND 20
13 Vcc -
16 GND 20

KUROBOX(基盤裏につけていることに注意)
玄箱につけたピンを上から見た図
1  3     7  9
A B ■ E F ■ ■ ■
■ C D ■ ■ ■ ■ G
2  4  6              16

ARM-USB-OCDの赤いラインがあってコネクタに▼マークがあるところが1
コネクタの口を正面から見た図
1  3  5  7  9  11 13 15 17 19
D C B F E ■ A ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ G
2  4                       20
381193:2009/06/05(金) 17:48:12 ID:???
(´・ω・`)激しく崩れた。まーいいか。

ちなみにピンアサインはここを参考にさせてもらったよ。ありがとう。
http://f30.aaa.livedoor.jp/~umino/pukiwiki.php?Linkstation%2FJTAG

肝心のアプリだけど、以下を全部試した/試そうとしたんだけど…
・jtag(無料)
 ARM-USB-OCDに対応してない。
・urjtag(無料)
 ARM-USB-OCDに対応してるけど、detectflashでエラーになっっちゃったので
 旧パッチみながらsrc弄ってlinux上やcygwinでコンパイルしたけど駄目だった。
・OpenOCD(無料)
 対応しているのはARMだけ。
・H-JTAG
 玄箱のFlashに対応してない。
・OCDemon Flash Memory Programmer
 ARM-USB-OCDが見つからなかった。アンインストール不可になった。
・Universal Scan
 使おうとしたら変なメールだそうとするのでレジストしなかった。
・MITOUJTAG
 体験版すら手に入らず
・JtagKeyTool(Asagao)
 使い方がさっぱり。
・Cable Server 0.1 for Xilinx Impact
 ARM-USB-OCDに対応してない。

探しまくってTopJTAGってソフト見つけたよ。
This pre-release (BETA) version is available free for a limited period: it expires on 1 October 2009.
ってことでベータ版なので自由に使えるらしい。
かなり安定しているし、色々試した中でも一番使いやすい。
何よりARM-USB-OCDに対応してるし玄箱のFlashに対応してる。
パラメータ関係はかなり苦労したけど、玄箱、FLASHのデータシートとにらめっこして何とか解決。
(姉妹ソフトもいい感じ)
382193:2009/06/05(金) 17:50:18 ID:???
■すること(続き)

・TopJTAG Flash Programmerのインストール
http://www.topjtag.com/flash-programmer/

・BSDLファイルのダウンロード(MPC8241R1BBSDLね)
http://www.freescale.com/webapp/sps/site/overview.jsp?code=DRPPCBSDLFLS

・TopJTAG Flashの設定
メニューのSetup押して設定開始。

【JTAG Chainタブ】
 ・「Examine the chain...」ボタンを押して「Generic FTDI FT2232」,
 「Olimex OpenOCD JTAG A」、「6MHz」を選択する。
 ※勝手に見つけてくれる。「Manufacture」,「IDCODE」はそもそも玄箱が返さない仕様なのでn/aでOK
 ・JTAG Chainの「BSD file : CLICK HERE TO SET」をおして、さっき落としたBSDLファイルをロードする。

【Flash arrayタブ】
 ・「8-bit (1 chip x 8 bit)」と「16-bit capable in 8-bit〜」を選択
 ・「Use Unlock〜」にチェックを入れる。
 後はデフォルトでOKのはず。ちなみに「16-bit〜」ではまりまくった。
383193:2009/06/05(金) 17:52:10 ID:???
【Signal Pinsタブ】
 MPC8245UM.pdfみながら設定したけどここが一番苦労したよ。
 データシートには記載があるので設定してるけど
 Flash 4Mしか積んでないのに32Mまで指定できるようになっちゃうからA22〜A24まではいらないかも。

 設定が多いのでコンフィグファイルそのもの。
 何となく設定して保存して〜.topflashファイルをテキストエディタで開いて同じになっていればOK

  <Pins>
    <SignalPin Name="CE" Device="0" PortName="RCS0_L" PortIndex="-1" Inverted="0"/>
    <SignalPin Name="OE" Device="0" PortName="FOE_L" PortIndex="-1" Inverted="0"/>
    <SignalPin Name="WE" Device="0" PortName="WE_L" PortIndex="-1" Inverted="0"/>
    <SignalPin Name="A0" Device="0" PortName="SDMA0" PortIndex="-1"/>
    <SignalPin Name="A1" Device="0" PortName="SDMA1" PortIndex="-1"/>
    <SignalPin Name="A2" Device="0" PortName="SDMA" PortIndex="2"/>
    <SignalPin Name="A3" Device="0" PortName="SDMA" PortIndex="3"/>
    <SignalPin Name="A4" Device="0" PortName="SDMA" PortIndex="4"/>
    <SignalPin Name="A5" Device="0" PortName="SDMA" PortIndex="5"/>
    <SignalPin Name="A6" Device="0" PortName="SDMA" PortIndex="6"/>
    <SignalPin Name="A7" Device="0" PortName="SDMA" PortIndex="7"/>
    <SignalPin Name="A8" Device="0" PortName="SDMA" PortIndex="8"/>
    <SignalPin Name="A9" Device="0" PortName="SDMA" PortIndex="9"/>
    <SignalPin Name="A10" Device="0" PortName="SDMA" PortIndex="10"/>
    <SignalPin Name="A11" Device="0" PortName="SDBA0" PortIndex="-1"/>
    <SignalPin Name="A12" Device="0" PortName="PAR_AR" PortIndex="7"/>
    <SignalPin Name="A13" Device="0" PortName="PAR_AR" PortIndex="6"/>
    <SignalPin Name="A14" Device="0" PortName="PAR_AR" PortIndex="5"/>
    <SignalPin Name="A15" Device="0" PortName="PAR_AR" PortIndex="4"/>
    <SignalPin Name="A16" Device="0" PortName="PAR_AR" PortIndex="3"/>
    <SignalPin Name="A17" Device="0" PortName="PAR_AR" PortIndex="2"/>
    <SignalPin Name="A18" Device="0" PortName="PAR_AR" PortIndex="1"/>
    <SignalPin Name="A19" Device="0" PortName="PAR_AR" PortIndex="0"/>
    <SignalPin Name="A20" Device="0" PortName="SDBA1" PortIndex="-1"/>
    <SignalPin Name="A21" Device="0" PortName="SDMA" PortIndex="11"/>
    <SignalPin Name="A22" Device="0" PortName="SRESET_L" PortIndex="-1"/>
    <SignalPin Name="A23" Device="0" PortName="TBEN" PortIndex="-1"/>
    <SignalPin Name="A24" Device="0" PortName="CHKSTOP_IN_L" PortIndex="-1"/>
    <SignalPin Name="D0" Device="0" PortName="MDH" PortIndex="7"/>
    <SignalPin Name="D1" Device="0" PortName="MDH" PortIndex="6"/>
    <SignalPin Name="D2" Device="0" PortName="MDH" PortIndex="5"/>
    <SignalPin Name="D3" Device="0" PortName="MDH" PortIndex="4"/>
    <SignalPin Name="D4" Device="0" PortName="MDH" PortIndex="3"/>
    <SignalPin Name="D5" Device="0" PortName="MDH" PortIndex="2"/>
    <SignalPin Name="D6" Device="0" PortName="MDH" PortIndex="1"/>
    <SignalPin Name="D7" Device="0" PortName="MDH" PortIndex="0"/>
  </Pins>

【Static Pinsタブ】
 色々試しまくったけど、結局何もいらないみたい。
 (´・ω・`)
384193:2009/06/05(金) 17:55:23 ID:???
・設定保存してINFOボタンを押してみる
 ちゃんとCFIの情報がとれればOK
・READボタンを押してu-bootが格納されてるアドレス300000から458752バイト読み込んでみる。
 u-bootとか文字列見つかればOk。
 ※1分ぐらいで読み込めるはずだよ。4Mだったら10〜15分ぐらいで読み込めるよ。
・読み込んだデータをとりあえずセーブする。
・u-boot-lsppchd-flash-1.2.0-r2.binを準備。(無ければ外人さんのサイトから落として)
・読み込みボタンを押してu-boot-lsppchd-flash-1.2.0-r2.binを読み込む
・Programボタンを押して
 Erase Optionを「300000h - 36FFFFh」を削除するように設定。
 Verifyも設定して、「Ignore the data〜」に「300000」を設定して実行する。
 10分ぐらいだったかで終了するよ。
・再起動してシリアル接続でu-bootの環境変数を修正する。
・reset…復活\(^O^)/

長文失礼しました。