エントリー

2016年03月の記事は以下のとおりです。

IJFW 機能詳細

前回はIJFWが実装している機能について簡単に触れましたが、今回はその詳細について説明します。(少し内容が被る部分もありますが・・・)

 

IchigoJamファームウェアの書き換え

IJFWの電源(IchigoJamの電源スイッチと連動)をONにしたとき、IJFWはメモリーカード上にIchigoJamファームウェアのファイル(jam.bin)が存在するかどうかをチェックします。存在すれば自動的にIchigoJam側のマイコンをISPモードにしてファームウェアの書き換え処理に移ります。

書き換え中はCARD-LEDが点灯します。書き換えが終わったらCARD-LEDが消灯し、IJFWはIchigoJam側のマイコンを再起動させます。書き換え時にエラーが発生した場合、POW-LEDとCARD-LEDが共に点滅を繰り返して知らせます。

書き換えに成功した後、jam.binは自動的に削除されます。

 

BASICプログラムのセーブとロード

IchigoJam側からはI2C-EEPROMが繋がっているように見えるので、使い方はそれと同じです。SAVE/LOADコマンドで、プログラム番号は100~227を使用します。

SAVEコマンドを入力すると、例えばプログラム番号が100の場合、メモリカード直下に「IJ100.BAS」というファイル名でプログラムが保存されます。ファイルが無い場合は新規に作成され、ファイルが存在する場合は上書きされます。

これらのファイルはパソコン等でコピーしたり移動したりすることができます。ファイルはテキストファイルではなくバイナリファイルです。テキストエディタ等でプログラムを編集することはできません。これはIchigoJamにPCで表示できない特殊な文字があり、IJFW側で対応できないためです。

 

任意のデータの保存と読み出し

IchigoJam上からI2Cコマンド(I2CW/I2CR)を用いて、アドレス#11に対してライトおよびリードを行うと、メモリカードにデータを保存したり読み出したりすることができます。


データを保存するときのコマンド

R=I2CW(#11,#700,1,#700,2)

コマンドバイト部はダミーです。書き込みデータに反映されません。アドレスは何を指定してもかまいませんが、長さは1バイト固定です。データバイト部には書き込むデータのアドレスと長さを指定します。最大長は512バイトです。512バイトを超えたデータは無視され書き込まれません。

コマンドを実行すると、メモリカード直下に「IJDATA.DAT」に書き込んだデータが保存されます。ファイルが無い場合は新規に作成され、ファイルが存在する場合は上書きされます。


データを読み出すときのコマンド

R=I2CR(#11,#700,1,#701,2)

コマンドバイト部はダミーです。書き込みデータに反映されません。アドレスは何を指定してもかまいませんが、長さは1バイト固定です。データバイト部には読み出し先のアドレスとデータの長さを指定します。最大長は512バイトです。

コマンドを実行すると、メモリカード直下の「IJDATA.DAT」から指定バイト数のデータがIchigoJamへ送信されます。

ファイルが存在しなかったり、指定バイト数のデータが無い場合でも、I2CRコマンドは正常終了となります。エラーの処理についてはBASICプログラム側で対応してください。

 

連続追記(ロガー)モード

IchigoJam上からI2CWコマンドを用いてアドレス#12にライトを行うと、メモリカードにデータを追記し続けることができます。ロガーモードのコマンドを実行する前に、後述するコントローラのリセットを必ず行ってください。

コマンド

R=I2CW(#12,#700,1,#700,4)

コマンドバイト部はダミーです。書き込みデータに反映されません。アドレスは何を指定してもかまいませんが、長さは1バイト固定です。データバイト部には書き込むデータのアドレスと長さを指定します。最大長は512バイトです。512バイトを超えたデータは無視され書き込まれません。


ロガーモードでは下記の仕様に従ってデータが保存されます。

  • 一回のコマンドで書き込めるデータのサイズは512バイトまで。
  • データが保存されるファイル名は「0000.dat」から始まり、ファイルサイズが1MBを超えた時点で、ファイル名の数字が+1された新たなファイルに書き出される。
  • 1023.datまでファイルが作成されると次は0000.datに戻る。元の0000.datは上書きされる。
  • ファイルは全てdataディレクトリ(フォルダ)に保存される


なお、一度に書き込むデータのサイズが512バイト未満の場合、コントローラー内部にバッファリングされ、すぐにはメモリーカードに書き出されません。さらにデータを書き込んで、合計で512バイト以上になった時点でメモリーカードに書き出されます。

この動作はメモリーカードの劣化を防ぐためですが、途中で電源を切断した場合など、一部のデータがメモリーカードに書き込まれずに消えてしまう可能性があるので注意してください。

バッファリングされたデータが残っている場合、コントローラのリセットを行うことで、メモリカードに書き出すことができます。ただしBASICプログラム側でリセットの仕組みを入れる必要があります。

 

コントローラのリセット

IchigoJam上からI2CRコマンドを用いてアドレス#12にリードを行うと、コントローラー(IJFWのマイコン)の内部状態がリセットされます。ロガーモード使用後でバッファーに残っているデータがあれば、メモリーカードに書き出されます。

コマンド

R=I2CR(#12,#700,1,#700,1)

コマンドバイト部、データバイト部ともにダミーですが、リード先のアドレスはプログラムで使用していない場所を指定してください。

 

各機能の位置づけとしては、基本機能(初心者向け)として、ファームウェア書き換えと、BASICプログラムのセーブ&ロード。マニア(上級者)向けとしてそれ以外の機能がある、というところでしょうか。

 

<追記 16/4/20>

「任意のデータの保存と読み出し」、「ロガーモード」、「コントローラのリセット」のスレーブアドレスを変更。秋月電子で売っているセンサー類となるべく被らないアドレスにしました。

ページ移動

  • 前のページ
  • 次のページ
  • ページ
  • 1

ユーティリティ

Author


oaks (twitter: @oks486)

記事の内容に関しては無保証です。何事も At your own risk ってことでよろしく。
リンクはご自由にどうぞ。

SPAM対策が面倒なため現在コメント投稿機能を停止しています。あしからず...

検索

エントリー検索フォーム
キーワード

Feed

リンク