SDメモリカードを抜き差しせずイメージを書き換えRaspberry Piをブートするツール(eMMC版作成編)
これまでの経緯
前々回、PCBをKiCad使って設計、部品の実装し、SDカードスロットに差して、Raspberry Piが起動するまでの試行錯誤を書きました。
前回は、赤外線コントロールの部分のソフトウェアの実装でした。
一応、これで目的は果たせたのですが、4GBのRaspberry Pi OSのイメージを書き込むのに8分以上かかります。この書き込み時間をなんとか時短できないかと作ったのがこのeMMC版です。
eMMC版 GitHub
いろいろ調べてみると、SDカードはMMCモードで起動していて、eMMCは、MMCのembedded(組み込み)規格でした。つまり、SDカードのスロットからeMMCにアクセスできることを意味します。データ転送速度は、SSDには劣りますが、SDカードより速くなると期待できます。
すでにそういう製品は世の中にあり、SDスロットに差してeMMCで起動できるものはありました。見ると、ほぼ直結で動きそうです。ならば、このツールのSDカードスロット部分をeMMCに変えてみようと考えました。
部品さがし
eMMCがまず、入手できるのか探してみます。DigiKeyで、32GBで$16くらいからありました。eMMCは、JEDECで規格が標準化され、ピン配置も決まっています。今回は、32GBのDELKIN DEVICESのEM32VSUKN-BA000-2にしました。ICパッケージもBGA(Ball Grid Array)で規格化されていて、パッケージは153-FBGA(11.5x13)です。部品は入手できそうですが、問題はこのBGAをどうはんだ付けできるかどうかです。
eMMCの裏面
大きく拡大していますが、このパッケージのピン間は0.5mmで、しかも裏面なのではんだごてでは無理です。困ったときのYouTubeで、探してみると、BGAをヒートガンで上から熱してはんだ付けしていました。しかも簡単にできるような動画だったので、挑戦してみることにしました。(実はコツが必要で簡単ではなかったのですが)
回路図変更
SDカードスロットの部分をeMMCに変える変更をします。ここで気が付いたのですが、USBメディアコントローラUSB2640のMMC(SD)インタフェースは、データ線が8本D0~D7ありました。eMMCのインタフェースもD0~D7の8bitあり、SDカードはD0~D3の4bitです。SDカード規格を見ると、はじめアクセスするときに、D0の1bitでインタフェース間でネゴシエーションし、その後、可能なデータ線を増やしてアクセスすることができます。つまり、USBメディアコントローラとのアクセスはSDカードの4bitではなく、8bitで通信できることになります。ということは、ホストからeMMCへの書き込みは、SDカードのアクセス時よりさらに転送速度が上がるのではないかということです。
USBメディアコントローラからMMCインタフェースを引き出します。CLK,CMD,CD,CRD_PWRとSD_D0~SD_D7までの8本です。
MUXのICスイッチ(TI TMUX1574PWR)は1つのパッケージに4回路分のスイッチが内蔵されています。2個では足りないので3個に増やし、USBメディアコントローラのMMC-I/Fの信号をS1B~S4B側に接続します。SDスロットからは従来どおり、S1A~S4Aに接続します。
MUX-ICからの出力をeMMCのデータラインDAT0~DAT7、CMD、CLKに接続します。eMMCの回路シンボルは以下のultralibrarianでemmcを検索して、同じFBGA153パッケージのものを選択してダウンロードします。そして、ダウンロードしたものを展開して、KiCadのシンボルエディターでインポートするライブラリを選択し、「ファイル」「シンボルをインポート」でロードできます。名前など必要に応じて変更します。
eMMC用の電源は、USBメディアコントローラのCRD_PWRがHIGHまたはSDカードスロットのVCCがHIGHの時に、+3.3Vが供給されるようにします。これにより、切り替え時に一度、eMMCの電源が落ちることで、切り替わったことをeMMCが認識できます。
PCBレイアウト
次はPCBレイアウトの変更です。MUX-ICが2個から3個になったので、スペース的に厳しくなりましたが、SDカードスロット分はすべてeMMCに置き換わります。eMMCのフットプリントは、さきほどeMMCのシンボルをダウンロードを展開したファイルにあります。フットプリントエディタでインポートするライブラリを選択し、「ファイル」「インポート」「フットプリント」を選択し、footprints.prettyの下のファイルを1つ選択すればインポートできます。
eMMCのPCBレイアウトが一番難しいところかもしれません。青の各Pin(Ball Grid)との間が0.5mmしかなく、その間を信号ラインを通すことができません。これを表、裏の2層のPCBで実現するために、無理やり、NC(Non Connect)または使用されていないBG端子は、フットプリントから削除して、その間を配線幅0.15mmの信号線を通しています。特に、eMMCの右下の部分は、信号線が隣り合うように集中しているため、引き出すのが難しい箇所でした。eMMCは、153の端子もあるのですが、実際使用している端子は、一部分に集中しています。信号線の引き出しは、一番外側の列のBG端子は外側方向に引き出し、外から2列目は斜めに信号線を引き出して、使用していないBG端子を削除した上を通します。3列目は、中側に引き出し、ビア(ビア穴径0.25mm, ビア径0.45mm)で裏面に通し引き出します。必要最低限のBGの削除で済むようにしました。多層基板で引き出せばよいのかもしれませんが、2層にケチったためです。
これらのビアや線を引くには、KiCadのクリアランス設定を変更する必要があります。クリアランスとは、PCBレイアウトの最小の線幅や線間、ビア穴径、ビア直径のことで、これを下回る細い線や穴は製造できないまたは、切れたりしてしまうので、PCBメーカ毎に決められています。この値を制約として設定されていますが、今まではデフォルト値でよかったのですが、今回は変更が必要でした。
KiCadのPCBエディターの「ファイル」「基板設定」を開きます。左側の「デザインルール」の「制約」を選択すると入力できるようになります。
変更項目 | 値 |
---|---|
最小配線幅 | 0.20mm -> 0.15mm |
導体から穴のクリアランス | 0.25mm -> 0.15mm |
最小スルーホール | 0.3mm -> 0.25mm |
デザインルールチェッカーをかけて、すべての問題が解決して完成したレイアウトです。
3DビューでeMMCの方向、位置など確認します。一度、eMMCを反対にレイアウトしてしまったことがありました。この場合は、デザインルールチェッカーでは引っかからないので、念には念を入れて確認されたほうが良いです。
PCBの発注
PCBエディターのPCBWayのボタンをクリックすると、PCBデータが送信され、オーダ画面が出ます。このPCBは複雑な形状なので、PCBの形状が正しく表示されてませんが、問題ありません。オーダする際の選択項目は以下とします。前回と同じく、ほとんどデフォルトの値ですが、「板材の厚み」は必ず0.8mmにしてください。デフォルトの1.6mmとすると、SDカードスロットに入りません。また、「最小ビア径」を0.25mmにします。
他のパラメータについては、同じです。
項目 | オーダ仕様 | 備考 |
---|---|---|
基板の種類 | 面付けなし | |
異なった面付の種類 | 1 | |
寸法 | (予め入力されている) | |
枚数 | 5 または 10 | |
層 | 2層 | |
材質 | FR-4 | |
FR4-TG | TG 130-140 | |
板材の厚み | 0.8 | デフォルト1.6mmではスロットに入りません。 |
最小パターン幅/間隔 | 6/6mil | |
最小ビア径 | 0.25mm | 0.3mmから変更します |
レジスト | 緑 | 他の色も選べますが、製作時間が3日ぐらいになります |
シルク | 白 | |
エッジコネクタ | なし | |
表面処理 | 有鉛はんだレベラー | 無鉛はんだレベラー(RoHS対応)もあります |
ビア処理 | レジストカバー | |
銅箔の厚み | 1 oz Cu | |
Remove Product No. | No. | |
メタルマスク | チェックなし | 手はんだで実装するのでなし |
部品実装サービス | チェックなし | 同上 |
届いたPCB基板
eMMC部分を拡大しました。きれいに配線されています。
eMMCの実装
さて、難関のeMMCのはんだ付けですが、何回かの試行錯誤して、eMMCの実装にやっと成功しました。そのコツを記しておきます。
基板のeMMCの部分のBGAの端子部分を拡大すると、端子がハンダで盛り上がっています。このため、eMMCを置いたとき、滑ってしまってずれてしまいます。少しでもずれると、戻ることができず、ずれたままついてしまいます。そのため、この盛り上がりの部分をハンダ吸取線で除去します。その際、十分にフラックスを付けて、なるべくこすらないように取ります。こすると緑色のレジストが剥げてしまうので優しく取ります。基板製造時に金メッキ端子を選択すれば、この盛り上がりはないのでしょうが、これもケチったためです。
表面のハンダを除去した後の写真です。だいぶ平らになりました。ちょっとレジストが剝げてしまいましたが、こすってしまったためです。
フラックスリムーバでフラックスをきれいに除去した後、再度フラックスを塗り、方向を間違えないようにeMMCチップを載せます。eMMCの外枠の線がどの方向からも隙間がないようにeMMCを配置します。
eMMCの大きさは11mmx13mmです。約1cm角のチップを枠内にピッタリ合わせないとBG端子が正しく一致しません。どのくらいずれるとNGなのか、見たいのですが、X線装置などあるわけなく、基板とeMMCの裏面の等倍の写真をとり、eMMCの写真を左右反転して、半透明で重ね合わせてみました。失敗したとき、わずかの上部のずれがあったので0.5mmずれた位置に合わせて、再現しました。すると、下記の写真のように、上部のわずかなずれでもBG端子の位置(薄い白丸)がずれることはわかります。
下記のように外枠線とピッタリあうようにします。これでずれはないはずです。
ポリイミドテープ(耐熱テープ)を他の部品に熱風があたらないよう軽く浮かせてはり(写真は他の部品を実装後のため、最初にeMMCを実装するなら必要ありません)、また、熱電対温度計の熱電対部分をテープで基板の上にはります。これで基板の温度がわかるので、感でやらなくてすみます。ヒートガンの設定を300℃の温度にして、最初は、30センチ上ぐらいから熱風を当てて、基板を温ます。基板が、150℃ぐらいまで温まったら、少しづつヒートガンをeMMCに近づけて200℃ぐらいまで熱します。200℃(リードフリーBGAならば260℃)で、20秒ほど熱したら、ヒートガンを離し、基板が自然に冷めるのを待ちます。
十分冷えたら、ずれがないか確認します。そして、BGAがうまくついているかテスタで確認します。前々回のように端子とVCCの間をテスタで当たりますが、端子が見えないので、他の部品を実装する前に、MUX ICの端子のパッドにテスタをあてることで測定します。以下の黒色の矢印の端子をマイナスのテスト棒、赤矢印のところにプラステスト棒を当てて、各信号線の抵抗値を計ります。大体600Ω~1.5KΩであれば接続できています。次に、各端子間でショートしていないか、D0とD1,D2~D7,CLK,CMDとそれぞれ確認します。
もし、どれもBGAが繋がっていないようだったら、熱しが足りない可能性があります。再度、ヒートガンを当てると接続できました。また、ずれてしまった場合は、再度熱して、eMMCを取り外します。BGAのボールのリワークする必要があるので、以下のステンシルをAmazonから購入しました。eMMCのハンダボールをハンダ吸取線ですべて取り除き、BGA153の部分のステンシルをあてて、位置を合わせて、その上からハンダペーストを塗ってBG端子の穴に埋めて、ヒートガンで熱するとボールのようにハンダが丸まってeMMCに付きます。これで、BGAとして戻すことができます。詳しいやり方は、YouTubeのここが参考になります。ハンダペーストを塗るところは、直接ハンダペーストが手に触れないように、手袋したほうがいいです。
eMMCのハンダづけに成功したら、あとは他の部品も実装して完成です。写真の右側は、SDカード版、左側はeMMC版です。PCにつなぎUSBから認識しました。前々回と同じく、USBメディアコントローラ、USB UARTのEEPROMの設定をします。
性能はどうだったか
SDカード版とeMMC版と書込み時間を比べてみました。
4.2GBのイメージをddで書込み、かかった時間の3回実施した平均値です。
# time `dd if=raspi.img of=/dev/sdb bs=1M && sync`
結果は以下のようになりました。約4倍速くなり、2分ちょっとで書き込みできました。今まで8分かかっていたので、これなら待てる時間です。
SD card (*1) | eMMC (*2) |
---|---|
482.3 sec (8.7MB/s) | 134.7 sec (31.3MB/s) |
*1 San Disk Ultla 32GB HC1 SD CARD
*2 Delkin Devices EM32VSUKN 32GB eMMC
Raspberry Piの起動時間は、変わらない印象でした。SDカードスロットからのクロックスピードと信号線の数が変わらないので、大きな差はないと思います。
最後に
はじめは、1つをあり合わせで簡単に作るつもりでいたのですが、作ることがおもしろくなり、とうとうここまで作ってしまいました。失敗も入れると、8号機ぐらいまでになるかもしれません。売っている製品を購入すれば、道具とか部品とかお金かけずに、簡単に済む話ですが、自分でコツコツやることで、買うだけでは得られないものを多く得ることができたと思います。いいアイデアが出たら、それを自分で作り実現できそうです。また、これを作る過程で、簡易測定器類も作ったので、次回それを書きたいと思います。少しでも参考になれば幸いです。ここまで読んでくださり、ありがとうございました。
ケースはこちら
次回、ロジアナを作る
Discussion