タグ:SD カード ( 17 ) タグの人気記事

micro:bit 側は左の写真のように接続して 2 番の穴にケーブルを通して裏側に出し、SD カードアダプタ側は右の写真のように接続します。ちょっと太めのケーブルは電源なので、電池 BOX の中に引き込みます。そして、SD カードアダプタを電池 BOX に接着剤で固定します。
f0054075_08473436.jpgf0054075_07480090.jpg

そのあと、絶縁と保護を兼ねてグルーガンでべたべたに固めて、前回 と同様のやり方で電池 BOX にねじ止めします。写真ないけど SD カード側も固めます。
f0054075_20365336.jpgf0054075_20365303.jpg

今回は SD カードアダプタ分の厚さがあるので、スペーサ代わりのポリのワッシャは 4 枚重ねです。ちょっと当たっているような気もしますが…
ねじは 10㎜ では届かなくなったので、15㎜ を買い足しました。
また、5 か所も固定する必要はないので 3 箇所だけ止めました。

[PR]
by tom01h | 2018-04-23 22:49 | Trackback | Comments(0)
先日、SD カードのセクタ 0 が読めたのでその先はすぐだと思っていました。
でも、今回は micro:bit のメモリの少なさにかなり悩まされました。
FatFs を使ってプログラムを作ると、f_open したところでハングアップします。
最初は disk_XXX を間違ったのかと思って、全部 Fail を返すだけの関数にしてみてもやっぱり駄目でした。
仕方なく Petit FatFs にしてみたら動いたのですが、よくマニュアルを読んでみると…

The write function has some restrictions listed below:

  • Cannot create file. Only existing file can be written.
ダメじゃん。
ついでに言うと、 Petit FatFs にはファイル名は大文字じゃないと駄目(これはもともとのFATの制限?)ってところにも、結構悩まされました。
気を取り直してもう一度、FatFs を試してみます。
今度は FF_FS_TINY を 1 にして挑戦です。
あと、yotta_modules/microbit-dal/inc/core/MicroBitConfig.h の MICROBIT_BLE_ENABLED も 0 にします。
こっちの設定は、micro:bit の radio を使うためにはどうせ必要なんですけどね。
これでとりあえず、f_read は出来るようになったみたいです。
接続はこれで良いみたいなので、write を試す前に配線をやり直したいと思います。

[PR]
by tom01h | 2018-04-22 23:37 | Trackback | Comments(0)
昨日の実験でははんだ付けに失敗していたことが判明したので、今日ははんだ付けをやり直して実験続行です。
が、今回は SD カードアダプタの方のはんだ付けがうまくいかなくて苦労しました。
最初はショートしてるところがあって動かなくて、結局こんなにボロボロになってしまいました。
f0054075_23461908.jpg
今回は CMD0,CMD8,CMD58,ACMD41,CMD58 で初期化して、CMD17 でセクタ0を読み出しました。
基本的には、このプログラム からのコピペです。もう少し進んだら公開するつもりです。
FPGA で試した時 と比較すると、今回はちゃんと動いているように見えますね。
f0054075_23401318.png

[PR]
by tom01h | 2018-04-19 23:48 | Trackback | Comments(0)
SPI モードで SD カードにアクセスしたいと思います。集めたセンサーデータを SD カードに保存できると便利と思うので。
前にも紹介したとおり、ここ に mbed で SIP 経由で SD カードにアクセスするライブラリがあるのですが、別のライブラリを継承されていたり、mbed OS の機能を呼んでいたりするの?全貌がつかめないので、FatFs 用の diskio.c を作るための参考にとどめたいと思います。
f0054075_00234542.jpg

とりあえず、こんな無理な感じで実験しているのですが、CMD0 すら動きません。もしかしたら、こっちの面のエッジコネクタは単なる飾り?半田付けいちからやり直しか…

[PR]
by tom01h | 2018-04-18 23:59 | Trackback | Comments(0)
zero-riscy 環境では、ブートrom 16KB、命令ram 16KB、データram 128KB を積んでいます。 データram が大きいのは bnn の学習結果を乗せるためです。
そして、アクセラレータ回路は専用のパラメタメモリを 1024bit×568ワード 積んでいます。
他にも細かいのがあるかもしれませんが、全部合わせると 36Kbit のブロックRAMを 69 個使うみたいです。
ちなみに、アクセラレータ回路がなければ 40.5 個使います。
ところが、Arty に載っている Artix7-35 は、ブロックRAMを 50 個しか積んでいません。
アクセラレータを使うときは、データramを減らしても良いと思うのですが、それもいまいち面倒ですし…
そんなわけで、ブロックRAMを140個積んでいる Arty Z7 に移行しようと思います。
ブロックデザインはこんな感じ。
f0054075_23052011.png
さすがにアクセラレータを使うと結構速くなって、もしかすると UART の表示ネックになってるかな?って感じもします。



[PR]
by tom01h | 2018-04-09 00:00 | PCとか | Trackback | Comments(0)

はんだ付け

ちゃんと動いているようなので、Pmod HDMI アダプタ に SD カードスロットを追加しました。
秋月で買った これ を使っています。
f0054075_23581983.jpg
こんな感じで基板の接続をしています。Data, CMD のプルアップ抵抗は、FPGA の IO バッファにお任せです。
f0054075_11044422.png

[PR]
by tom01h | 2018-04-08 09:10 | Trackback | Comments(0)
FPGA 上の zero-riscy で SD カードを読めるようになったので、BNN の推論プログラムを動かして見たいと思います。
今までだって、シミュレーションと同じことなら FPGA 上でもできたと思うのですが、せっかく FPGA 上で動かすなら、1画像だけじゃなくて、もっとたくさんの画像で試したいですよね。でも今までは、大量データを FPGA で扱う方法がなかったのです。それが、 SD カードインタフェースの追加で、やっと可能になりました。
さらに、プログラムのロードもメモリ利用効率の悪い XMODEM を使った kozos ブートロードでは出来ないと思い、SD カードからのブートも追加しました。
f0054075_22341209.png
とりあえず、BNN の最適化までを済ませたソフトウェア推論で試してみました。
Core i5 と比べるとものすごく遅いですねぇ。
パラメタメモリを内蔵した BNN アクセラレータを積んだ zero-riscy は、今のサイズのデータメモリと共存するにはメモリ使用量が多すぎて Arty A7 には乗りません。Arty Z7 に引っ越すかな…

[PR]
by tom01h | 2018-04-07 23:27 | PCとか | Trackback | Comments(0)
昨日はちゃんと読めているかと思った SD カードコントローラですが、FatFs 対応をしようとしていたらエラーで落ちました。
ここ を参考に正常な動作とどう違うかを予想してみます。とにかく、期待値が分からないのがきついです。
まずは、シミュレーションで見えていた読み出しがずれる問題 は別の形だけどやっぱりあるようで、上位の4ビットと下位の4ビットが入れ替わっていました。
それから、場合によって全然読めないこともあるようです。これは、いろいろ試しているうちに、fifo empty がネゲートされてすぐに読んではいけないらしいことが分かりました。デバッグ中は、無駄にいろいろ文字を表示していたので…
この2つをひとまずソフトウェアで対策すると、ファイル名決め打ちで開いたファイルの hexdump が出来ました。
で、今日は予定があるので本対策が出来ない… → 早く帰ってこれました。
[追記]
ビットの入れ替えは、理由は分からないけど上下を反転しました。
すぐに読んではいけない理由は、待ち時間が足りないだけではなくて、前のリードの残骸が残っているのも原因みたいでした。
CRC も FIFO に積んじゃっているのでしょうかね?
ほかに、CPUが遅いから見えてこないと思うけど、FIFO が空の時は RVALID を待たせる論理も追加しました。
ちなみにブロックデザインはこんな感じ。
SD コントローラは RTL モジュールなるもので作っています。
ここ を見て知ったのですが、入門書にはなんでこういう大事なことが書いていないのかな?
[追記 RTLモジュールはなんかいちいち Critical warning 出ますね。]
f0054075_00552307.png
[追記 CD端子繋ぎました 初期化が済んだ状態から、カード取り出し→再挿入→初期化 です]
> status
4a
> status
7a
> status
5a
> open
OK: f_open
> status
4a


[PR]
by tom01h | 2018-03-25 00:02 | PCとか | Trackback | Comments(0)
SD カードの情報はなかなかまとまったのがないんだけど、Kingston の ここ からダウンロードできる仕様シートが参考になりました。
ほかには、FatFS の ChaN さんの ここ も参考になります。

では本題で、昨日の続き。
SPI モードで起動しているわけじゃないので、ACMD41 を BUSY がネゲートされるまで投げ続けると、CCS ビットが返事で返ってきます。
今どきは、デフォルトが Block Address ですよね。
CMD2, CMD3, CMD7, ACMD6 の順に投げると初期化完了です。
で、リードは CMD17。シミュレーションで読出しがずれる現象はカードのモデルが問題だったのかな?512バイトの最後2バイトが 55AA なら FAT の証拠らしいので、たぶん正しく読めていると思います。[追記 1バイトの中で上位4ビットと下位4ビットが入れ替わっていました。]
f0054075_13494735.png

[PR]
by tom01h | 2018-03-24 16:48 | PCとか | Trackback | Comments(0)
3ステートバッファは自動に推論できなかったので IOBUF を手動で置いてみました。そして、IO にプルアップ属性を付けて、25MHz のクロックをつないで試してみます。SD カードクロックサイクルが4倍になるので、timeout も 4倍にします。
まずは、CMD0, CMD8 を入れてみます。Ver2 以上なら返事が返ってくるはずです。
ここで躓くようなら、今回の SD カードアクセス計画は失敗ってことで…
f0054075_02415746.png
長かった。やっとここまでできた…

[PR]
by tom01h | 2018-03-23 23:59 | PCとか | Trackback | Comments(0)