法人向けのETC専用カード
SDカードにFATで記録する製作例はこちらにあります。


2004/09/08

マイコンにフラッシュメモリカードを接続すると、広大な外部メモリが使用できます。
読み込みに加えて書き込みもできれば、非常に長時間の計測ロガーなどにも応用できますね。

フラッシュのメモリカードは様々あります。
今回は手持ちのSDカードを選んでみました。

まずは実験用のエレキです。

マイコンはPIC16F877を使い、外部とデバッグ用のデータをやり取りするためにシリアルのレベルコンバータを付けています。
また、ファーム書き込みはチップの抜き差しが面倒なためISPで行います。

SDカードのスロットは最安値のUSBカードR/Wから剥ぎ取りました(;´Д`)
常套手段ではありますが。

PICは3.3Vで20MHz駆動しています。
低電圧だとクロックを落とさないとダメ、といった情報があったような気がしましたが、今のところは問題なく動いています。
もしかするとチップの個体差でNGのものもあるかもしれませんが‥

あと、低電圧で動かすときの注意としては、BROWNOUTをDisableにしておく必要があります。これを忘れるとPICが低電圧を検知するため動きません。


2004/09/17

SD/MMCカードに電源を入れると、デフォルトでMMCモードで立ち上がります。
今回はSPIモードで立ち上げたいので、電源ON直後にSPIモードへ移行するように手続きを行います。

試行錯誤の結果、なんとかSPIモードへ移行できたようです。

SDカードから期待したレスポンスが返ってきただけで感動(;´Д`)
夜中にもかかわらずシャウトしてしまいました(w


2004/09/21

カード内容をダンプするものを書いてみました。
単に512バイト単位で読んでいくというものです。

ひとまず、それらしいデータが読み込めました。
かなり不安定ですが‥

しかし、どうも良く分からない。
最初の辺りはデータがゼロばっかりで、かなり進んだところからそれらしいデータが出てきます。

アドレス0からブートセクタが来ると思っていたのですが‥
PCからダイレクトにディスクを見ると「MSDOS5.0」みたいな感じで読めるので‥

まずはカード内のデータ構成やFATから勉強する必要がありますね。


2004/09/28

FATの構成を勉強しました。
カードの先頭にあるのはBPBというブロックで、先に読んでいたデータは正しかったです。

また色々と試行錯誤して、ルートディレクトリにあるファイルのリストまでできるようになりました。
次はデータの読み込みですね。

毎晩の帰宅が零時過ぎなので、イマイチ進めません‥


2004/11/03

カードの読み込みは机上で勉強したので飛ばします(;´Д`)
大体はロガーなどの書き込みがメインだと思うので。

さて、書き込みを考えると、チープなマイコン単体で実現するのは無理です。
というのも、SDの読み書き単位は512バイトです。
例え1バイトのデータ変更でも、512バイトでデータを書き込まなければなりません。

ということは、一旦512バイト読んでバッファに溜め、そのバッファ中のデータを変更した後にカードへ書き込む必要があります。
PIC16F877では512バイトのRAMは使えないため、256kbitのSRAMを増設。
(修正:2011/04/09)
上ではSDの読み書き単位は512バイトと記述しましたが、カードにアクセスする際のブロックサイズ(だったかな?)を変更すれば、512バイト単位でなくてもいいようです。これならRAMの少ないマイコンでも処理できますね。
この情報はかなり前に知っていたのですが、更新するのを忘れていましたw

新たに作ったエレキ

線材での配線は、HDDのATA133用フラットケーブルをバラして使いました。
かなり細いので山盛りになりません。

UEWを使えばいいのかもしれませんが‥


2004/11/04

なんとかファイルの新規作成に成功しました。
シリアルで1バイト受信するごとにTEST0000.TXT、TEST0001.TXT‥と順番に作っていきます。
PCのSDカードリーダでも正しくファイルを認識しました。

当サイト内の検索