このページの内容は削除しました。
【速報】電源ONで直接SDスロットから自前ビルドu-bootの起動に成功
タイトルの件、成功
一番先に成功したからってずっと試してたMMCカード。
USBつないでsunxi-fel uboot u-boot-sunxi-with-spl.binでは起動してたのに、
何度書いて試しても起動しない。
(MMCは読みに行ってるけど結局あきらめられてNANDのu-bootが走っちゃってた)
512MBという今となってはちょっと小さい(しかもSDじゃない)ということから
ふと思い立って、数少ない普通に読めてた2GのSDカードに手順通り
Bootable SD card - linux-sunxi.org
書いてスイッチ入れたらいきなりu-boot起動したわ。しかもちゃんとUART2で。
なんだってーーーーーー
いや、さすがにちょっと信じられなくて何度もスイッチON/OFFして確かめちゃったよ。
というわけで、これでKernelをコンパイルして配置すれば単体起動が出来そう。
テンション上がってきた。
起動ログ。MMCのTRACE入ってるから読みにくいわ。
U-Boot SPL 2016.11-rc3-g8cf4582-dirty (Dec 07 2016 - 14:46:32) DRAM: 256 MiB Trying to boot from MMC1 init mmc 0 clock and io mmc 0 set clock to 24000000 create mmc init mmc 2 clock and io mmc 2 set clock to 24000000 create mmc set ios: bus_width: 1, clock: 0 set ios: bus_width: 1, clock: 400000 mmc 0 set clock to 400000 CMD_SEND:0 ARG 0x00000000 mmc 0, cmd 0(0x80008000), arg 0x00000000 mmc resp 0x00000000 MMC_RSP_NONE CMD_SEND:8 ARG 0x00000000 mmc 0, cmd 8(0x80000148), arg 0x000001aa mmc resp 0x000001aa MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:55 ARG 0x00000000 mmc 0, cmd 55(0x80000177), arg 0x00000000 mmc resp 0x00000120 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:41 ARG 0x00000000 mmc 0, cmd 41(0x80000069), arg 0x40300000 mmc resp 0x00ff8000 MMC_RSP_R3,4 0x00000000 CMD_SEND:55 ARG 0x00000000 mmc 0, cmd 55(0x80000177), arg 0x00000000 mmc resp 0x00000120 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:41 ARG 0x00000000 mmc 0, cmd 41(0x80000069), arg 0x40300000 mmc resp 0x80ff8000 MMC_RSP_R3,4 0x00000000 MMC Starup CMD_SEND:2 ARG 0x00000000 mmc 0, cmd 2(0x800001c2), arg 0x00000000 mmc resp 0xdb00ace3 0x006221aa 0x44303247 0x134b4753 MMC_RSP_R2 0x00000000 0x00000000 0x00000000 0x00000000 DUMPING DATA 000 - 00 00 00 00 004 - 00 00 00 00 008 - 00 00 00 00 012 - 00 00 00 00 CMD_SEND:3 ARG 0x00000000 mmc 0, cmd 3(0x80000143), arg 0x00000000 mmc resp 0xb3680520 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:9 ARG 0x00000000 mmc 0, cmd 9(0x800001c9), arg 0xb3680000 mmc resp 0x968000f5 0xedb7ffbf 0x5f5a83a2 0x002f0032 MMC_RSP_R2 0x00000000 0x00000000 0x00000000 0x00000000 DUMPING DATA 000 - 00 00 00 00 004 - 00 00 00 00 008 - 00 00 00 00 012 - 00 00 00 00 CMD_SEND:13 ARG 0x00000000 mmc 0, cmd 13(0x8000014d), arg 0xb3680000 mmc resp 0x00000700 MMC_RSP_R1,5,6,7 0x00000000 CURR STATE:3 CMD_SEND:7 ARG 0x00000000 mmc 0, cmd 7(0x80000147), arg 0xb3680000 mmc resp 0x00000700 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:55 ARG 0x00000000 mmc 0, cmd 55(0x80000177), arg 0xb3680000 mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:51 ARG 0x00000000 mmc 0, cmd 51(0x80002373), arg 0x00000000 trans data 8 bytes cacl timeout 78 msec mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:6 ARG 0x00000000 mmc 0, cmd 6(0x80002346), arg 0x00fffff1 trans data 64 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:6 ARG 0x00000000 mmc 0, cmd 6(0x80002346), arg 0x80fffff1 trans data 64 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:55 ARG 0x00000000 mmc 0, cmd 55(0x80000177), arg 0xb3680000 mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:6 ARG 0x00000000 mmc 0, cmd 6(0x80000146), arg 0x00000002 mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000000 set ios: bus_width: 4, clock: 400000 mmc 0 set clock to 400000 CMD_SEND:55 ARG 0x00000000 mmc 0, cmd 55(0x80000177), arg 0xb3680000 mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:13 ARG 0x00000000 mmc 0, cmd 13(0x8000234d), arg 0x00000000 trans data 64 bytes cacl timeout 78 msec mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000000 set ios: bus_width: 4, clock: 50000000 mmc 0 set clock to 50000000 CMD_SEND:16 ARG 0x00000000 mmc 0, cmd 16(0x80000150), arg 0x00000200 mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:17 ARG 0x00000000 mmc 0, cmd 17(0x80002351), arg 0x0000a000 trans data 512 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:16 ARG 0x00000000 mmc 0, cmd 16(0x80000150), arg 0x00000200 mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:18 ARG 0x00000000 mmc 0, cmd 18(0x80003352), arg 0x0000a000 trans data 367616 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000000 CMD_SEND:12 ARG 0x00000000 mmc cmd 12 check rsp busy MMC_RSP_R1b 0x00000000 U-Boot 2016.11-rc3-g8cf4582-dirty (Dec 07 2016 - 14:46:32 -0800) Allwinner Technology DRAM: 256 MiB MMC: init mmc 0 clock and io mmc 0 set clock to 24000000 create mmc init mmc 2 clock and io mmc 2 set clock to 24000000 create mmc SUNXI SD/MMC: 0, SUNXI SD/MMC: 1 set ios: bus_width: 1, clock: 0 set ios: bus_width: 1, clock: 400000 mmc 0 set clock to 400000 CMD_SEND:0 ARG 0x00000000 mmc 0, cmd 0(0x80008000), arg 0x00000000 mmc resp 0x00000000 MMC_RSP_NONE CMD_SEND:8 ARG 0x000001AA mmc 0, cmd 8(0x80000148), arg 0x000001aa mmc resp 0x000001aa MMC_RSP_R1,5,6,7 0x000001AA CMD_SEND:55 ARG 0x00000000 mmc 0, cmd 55(0x80000177), arg 0x00000000 mmc resp 0x00000120 MMC_RSP_R1,5,6,7 0x00000120 CMD_SEND:41 ARG 0x40300000 mmc 0, cmd 41(0x80000069), arg 0x40300000 mmc resp 0x00ff8000 MMC_RSP_R3,4 0x00FF8000 CMD_SEND:55 ARG 0x00000000 mmc 0, cmd 55(0x80000177), arg 0x00000000 mmc resp 0x00000120 MMC_RSP_R1,5,6,7 0x00000120 CMD_SEND:41 ARG 0x40300000 mmc 0, cmd 41(0x80000069), arg 0x40300000 mmc resp 0x80ff8000 MMC_RSP_R3,4 0x80FF8000 MMC Starup CMD_SEND:2 ARG 0x00000000 mmc 0, cmd 2(0x800001c2), arg 0x00000000 mmc resp 0xdb00ace3 0x006221aa 0x44303247 0x134b4753 MMC_RSP_R2 0x134B4753 0x44303247 0x006221AA 0xDB00ACE3 DUMPING DATA 000 - 13 4B 47 53 004 - 44 30 32 47 008 - 00 62 21 AA 012 - DB 00 AC E3 CMD_SEND:3 ARG 0x00000000 mmc 0, cmd 3(0x80000143), arg 0x00000000 mmc resp 0xb3680520 MMC_RSP_R1,5,6,7 0xB3680520 CMD_SEND:9 ARG 0xB3680000 mmc 0, cmd 9(0x800001c9), arg 0xb3680000 mmc resp 0x968000f5 0xedb7ffbf 0x5f5a83a2 0x002f0032 MMC_RSP_R2 0x002F0032 0x5F5A83A2 0xEDB7FFBF 0x968000F5 DUMPING DATA 000 - 00 2F 00 32 004 - 5F 5A 83 A2 008 - ED B7 FF BF 012 - 96 80 00 F5 CMD_SEND:13 ARG 0xB3680000 mmc 0, cmd 13(0x8000014d), arg 0xb3680000 mmc resp 0x00000700 MMC_RSP_R1,5,6,7 0x00000700 CURR STATE:3 CMD_SEND:7 ARG 0xB3680000 mmc 0, cmd 7(0x80000147), arg 0xb3680000 mmc resp 0x00000700 MMC_RSP_R1,5,6,7 0x00000700 CMD_SEND:55 ARG 0xB3680000 mmc 0, cmd 55(0x80000177), arg 0xb3680000 mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000920 CMD_SEND:51 ARG 0x00000000 mmc 0, cmd 51(0x80002373), arg 0x00000000 trans data 8 bytes cacl timeout 78 msec mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000920 CMD_SEND:6 ARG 0x00FFFFF1 mmc 0, cmd 6(0x80002346), arg 0x00fffff1 trans data 64 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000900 CMD_SEND:6 ARG 0x80FFFFF1 mmc 0, cmd 6(0x80002346), arg 0x80fffff1 trans data 64 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000900 CMD_SEND:55 ARG 0xB3680000 mmc 0, cmd 55(0x80000177), arg 0xb3680000 mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000920 CMD_SEND:6 ARG 0x00000002 mmc 0, cmd 6(0x80000146), arg 0x00000002 mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000920 set ios: bus_width: 4, clock: 400000 mmc 0 set clock to 400000 CMD_SEND:55 ARG 0xB3680000 mmc 0, cmd 55(0x80000177), arg 0xb3680000 mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000920 CMD_SEND:13 ARG 0x00000000 mmc 0, cmd 13(0x8000234d), arg 0x00000000 trans data 64 bytes cacl timeout 78 msec mmc resp 0x00000920 MMC_RSP_R1,5,6,7 0x00000920 set ios: bus_width: 4, clock: 50000000 mmc 0 set clock to 50000000 CMD_SEND:16 ARG 0x00000200 mmc 0, cmd 16(0x80000150), arg 0x00000200 mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000900 CMD_SEND:17 ARG 0x00000000 mmc 0, cmd 17(0x80002351), arg 0x00000000 trans data 512 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000900 CMD_SEND:16 ARG 0x00000200 mmc 0, cmd 16(0x80000150), arg 0x00000200 mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000900 CMD_SEND:17 ARG 0x00000000 mmc 0, cmd 17(0x80002351), arg 0x00000000 trans data 512 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000900 CMD_SEND:16 ARG 0x00000200 mmc 0, cmd 16(0x80000150), arg 0x00000200 mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000900 CMD_SEND:18 ARG 0x00088000 mmc 0, cmd 18(0x80003352), arg 0x00088000 trans data 131072 bytes cacl timeout 78 msec mmc resp 0x00000900 MMC_RSP_R1,5,6,7 0x00000900 CMD_SEND:12 ARG 0x00000000 mmc cmd 12 check rsp busy MMC_RSP_R1b 0x00000900 *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: No ethernet found. starting USB... No controllers found
ニンテンドークラシックミニでSDカードが認識された(一部)
前回の記事
の続きです。
SDカードが認識できました!
ただし、一部のカードは認識して、一部はそうではない、という状態です。
一番左のTranscendの古いMMC 512が一番サクッと認識した気がします。
あと2枚、どれだか忘れましたがw ManufactureID が1bのやつが読めました。
読めたものの情報は以下の3枚です。
手持ちの約10枚中、3枚は読めてます。
違いは何だろうとMMC_TRACEをONにしてにらめっこ中…
ただ、どうもいずれのカードも1ビット(CMD/CLK)だけでの通信はできてて、
CIDやCSDは読めてるっぽいんですが、
---------------------------------------------------------------------------------------------------------------------
最後のほうで、ACMD13に対してだんまりになってしまって、ホストのほうが諦めてる、ように見えてる、ってところまでは来ています。
で、一番さっくり読めてたTrancendの512にu-boot-with-spl.binを放り込んでスイッチを入れたところ、明らかに何も入ってないSDカードより長くあれやこれやした後、もともとのu-bootに戻ってきちゃってるっぽいです。
もしかしたらウォッチドッグに殺られてるのかな?
また、u-bootの起動中のメッセージもまだ出てないのでUART2の初期化が実はうまくいってないとか、binが間違ってるとかの可能性も。
読めるカードからのSD起動と、読めないカードを読めるようにする方法を調査中です。
ニンテンドークラシックミニにSDかーどをつなぐ
追加パッドが判明したので、SDカードをつなげられそうということがわかり頑張っていましたが、成果を焦るばかりにパッドをぶっ壊してしまうということが起きた後、
導電性接着剤を購入し、わずかに残っていたビアに盛ってやることで復活させることができました。
ざっくりと写真です。
ぶっ壊した写真
マスキング
配線をくっつけた後
レビューにあるように、粘性が低いのできっちりマスキングしないと結構漏れてしまうようです。
まぁ今回はこれで間に合ったのでこれ以上触らないことにします。
さて、今回の教訓を生かして、必要なパッドはいったん中継してから引き出すことにします。
ここで、実はRXDとTXD(UART0)とPF2/PF4は同一のピンであることが判明しました。
つまり、普通のブートローダを使いながら、SDカードを使おうとすると競合して使えなくなってしまうということのようです。
なんと、AllwinnerのSoCはいつもこういう仕様のようで、
MicroSD Breakout - linux-sunxi.org
こんなへんちくりんな変換基盤を使うとMicroSD端子からUARTが出ますよ、ということらしい。
普通のユーザはせいぜいSDからのファームアップデートぐらいだし、べつにUARTなんかいらないでしょ、っていうことか。うんこ!。
で、途方に暮れていたものの、まだあきらめられるか、といろいろさがしていた結果
PB0/PB1であり、UART2のTX/RXになるパッドを発見しました!!!!!!
これで、u-bootやカーネルの標準出力をUART2にすることさえできればコンソールを使いつつ、SDカードを使うことができるはずです!
と、そこで、こいつに使われているR16のデータシートが見つからないので、近いはずのA33を見ると、FLASHのブートローダの前に、必ずSDカードを読みますよ、ということが書いてありました。
これは物の試しに、とSDカードをつないでロジアナで覗いてみます。
なんと!MMCモードに入る前のSPIモードでのイニシャライズが始まってるではないか!ktkr!!!
というわけで、UART2 + SDカードでこいつを単体起動させることを目標に、いろいろやっていきます。
最新情報は twitter で。
っていうか!こんだけ書いてたら!Linuxとか詳しい人は!
もうとっくにいろいろできちゃうんじゃないですかね!
Linuxむずかしい。
っていうか、まぁただの組み込みCPUにつながってる何か、だとやっと体になじんできたのでどうにかなるかな。
写真に写ってるSDカードの基板は、8年ぐらい前にトラ技のLPC2388基板とVS1011をつないで、アナログカメラにバーコードを読ませると音声をしゃべる機械を作る、という謎の機械を作った時の残りの部品です。
ニンテンドークラシックミニ bootloaderについて調べる
このページの内容は削除しました。
ニンテンドークラシックミニ シェルに入ってゲームを追加するまで
このページの内容は削除しました。
ニンテンドークラシックミニ テストパッド情報
あぁぁぁっぁぁあああああぁぁあ
なんか、いろいろ調べてたらSD(boot用のcard0)のパターンが残ってるんじゃね?ってなったので適当にはんだ付けしてぶらぶらさせてたら
パターンはがれた!!!!!!
ダメだこれ!!!!!
あぁあぁ、細い線の部分がちぎれて内層からのビアだけになっちゃった…これははんだも乗らない
そうだ!導電性接着剤!(アマゾンポチー
反省。成果を求めて焦るより、きちんといったん中継基板をかませましょう。
ということで、とりあえず残りの配線を傷めないようにやったんだけど、あと一本治るかかなり怪しいです。
あぁぁぁぁぁ
で、悔しいけどパッド情報更新しとくわ。間違えてたらごめんね。
判定にはFELに入って、ホストから sunxi-tools のgpio変更ツールで試した。
シールドケース側
裏面
で、FELにいるときに0x4300000から吸い出したscript.binだと
http://linux-sunxi.org/Sunxi-tools#script-extractor
script-extractor
This device side tool reads the script.bin data from RAM at the magic address 0x43000000 and saves it to a file. This tool gets statically compiled so it can be used on Android as well. Please note that it is only usable with FEX based kernels (as used in the stock Android firmware) and does not make any sense with the devicetree based mainline kernel.
card0が無効になってるんだけど、
CPUのリファレンスを見ると、何が何でもcard0から起動してくれるように思うし、
SD_CLKのピンがパタパタしてるし、カードつないだらCMDで初期化かけてるっぽいんだよね。
だから、なんかできるんじゃないかと思って、導電性接着剤が到着するのを待つ。