雑多な趣味の記録帳

tom01h.exblog.jp

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

micro:bit でセンサーデータを SD カードに保存する

2つの micro:bit でセンサーデータを取得して、無線を使って別の 1つの micro:bit にデータを集めて、そのデータを SD カードに保存するプログラムが完成しました。
github に公開しています。
今は内蔵の 3軸加速度センサーを使っていますが、今後は外付けセンサーを追加していきたいと思います。
そういえば、ファイルアクセスに最初の1回目だけ失敗する現象がありました。
2回目にはうまくいくので今まで無視してきましたが、MISO ピンをプルアップしたら直りました。[追記 ソフトで設定しただけで、物理的に抵抗を追加したわけではないです]

[PR]
by tom01h | 2018-05-03 22:10 | Trackback | Comments(0)

micro:bit で SD カードに書き込みたい

少し間が空きましたが、続いて SD カードへの書き込みを試してみたいと思います。
が、その前に、今までは USB 給電での動作しか試していませんでしたが、ニッ水電池2本での動作を試していみたいと思います。
2.4V で SD カードってアクセスできるのか?まずは、読み出しから。
シリアル機能が使えないので、display モジュールで試します。
あれ?これは任意の文字列は表示できないのか?仕方ないので、4桁の数字限定としました。4桁の数字を書いたファイルを準備して試してください。
で結果は… ちゃんと動きました。
では、書き込み。disk_write 関数を準備して試してみると、書き込みも動きました。
電圧低くっても動くのですね。
ここ に公開しました。

[PR]
by tom01h | 2018-04-28 00:23 | Trackback | Comments(0)

micro:bit に SDカードアダプタと電池Boxを付ける

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)

micro:bit で SD カードにアクセスしたい FAT 編

先日、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)

micro:bit で SD カードにアクセスしたい 2

昨日の実験でははんだ付けに失敗していたことが判明したので、今日ははんだ付けをやり直して実験続行です。
が、今回は 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)

micro:bit で SD カードにアクセスしたい

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)

FPGA の zero-riscy でアクセラレータ命令付きの推論をする

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 で推論する

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)

zero-riscy から SD カードのファイルを読む

昨日はちゃんと読めているかと思った 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)