1. |
はじめに |
マイクロチップ社製の serial EEPROM family のインターフェースである UNI/O を PIC に実装してみました。
使用した PIC は 16F88 です(boot loaderが動いた方が開発環境として絶対楽なので ^^)
クロックは内蔵の8MHzを使用し、1ビット当りの処理を100ステップで調整したので1ビットの周期は 50us になります。メモリチップのスペックとしては100usまで許容されるので 4MHz 動作の8ピンの PIC にも移植可能です。
|
2. |
制御信号フォーマット |
UNI/O の仕様はマイクロチップ社のホームページからダウンロードできる EEPROM のデータシート(1K-16K UNI/O Serial EEPROM Family Data Sheet) に記載されています。
UNI/Oはビット幅が固定なので パイプライン処理のない PIC なら マシン語のステップ数を調整することで実現できます(このような処理は PIC の得意分野ですね)。
メモリチップとのコネクション開始時のスタートヘッダ、ディバイスアドレスに続くコマンドのサンプル波形が下の写真です。紫色の信号はメモリチップからの SAK 信号待ちのタイミングを確認するためのモニタ信号です。PIC からのディバイスアドレスに対して EEPROM 側から最初の SAK 応答がある様子がわかります。
|
|
3. |
応用実験 |
シリアル EEPROM が身近に使用されているものとして 3Dプリンタ ダヴィンチのフィラメントについているメモリチップがあったので内容をダンプしてみることにします。
|
a) |
回路図
回路は至って簡潔でこんな感じにしました。
J1 部分は実際にはコネクタではなく、メモリチップの端子が接続されている基板のパターンに接触するようなピンになります。基板検査等で使用されるスプリングピンが理想なのですが、手持ち部品には無いので秋月電子さんから購入した丸ピンICソケットの金属のピンの部分を取り出し、使用しました。この丸ピンソケットはコネクタ代わりにもなり重宝しています。スプリング機能はケース側で対応しました。(^^)
電源スイッチは実装せず、30秒以上操作が無い場合には自動的にスリープするようにしました。100均で2個100円で売っていたボタン電池(CR2032)を電源にし、低消費電力化のため LED には 1mA 弱の電流しか流していませんが一般的な高輝度タイプのものであれば十分認識可能です。消費電流を実測したところ、動作時はLEDオンで約 2mA 弱、LEDオフ時は約 1mA 強でした。スリープ時は手持ちのテスタ(0.1uA の分解能)では測定不能でしたが 16F88 のデータシート上は 2V 時 0.1uA となっているのでこれくらいの消費電流だと推測します。
ブートローダー用に RA7 と GND をコネクタで出しているのでプログラムの書換えが簡単に出来ます(書換えのためにはブートローダ(OneBitLoader)環境が必要です)。
プログラムの書換えが簡単にできるのでケース内に 16F88 を接着し、IC のピンに直接半田付けして結線しました。^^;;;
また、メモリダンプ内容等はブートローダー用の端子に 38400bps でシリアル出力しています。
|
b) |
ケース
小型ツールのケース作成の時には 3D プリンタが本領を発揮します(^^)
本ツールはダヴィンチのフィラメントのメモリチップ内容をダンプするので ReaDa と命名しました。
サポート材を使用すると取り除くのがかなり大変なのでサポート材無しで出力できるように考慮しています(サポート材なしでは厳しそうな部分もありますが、私の環境では出力可能でした)
ケースは2ピース構成にしてスライド式にはめ込む構造にしました。
メモリ電極へのコンタクトピンのスプリング機能は ABS 樹脂の弾力を利用して実現しています。但し、積層方向(Z軸方向)への細長い構造物は強度的に弱いので注意が必要です。(まぁ 折れた時は瞬間接着剤でくっ付ければ折れる前より強度が増します(笑))
STL ファイルはここをクリックでダウンロードできます。
ReaDa case 01
|
ReaDa case 02
|
|
|
3Dプリンタでの出力結果はこんな感じです。
ピンの部分は下の写真のようになります。ABS 樹脂による弾力性は結構強く、また強度は高くないのでピンの頭が少しだけ出るような位がいいです(写真の例は出すぎている^^;)
|
|
4. | ダウンロード |
※:商用利用の場合は本ページに記載した内容を許可なく使用することを禁じます。
|