今日はめちゃくちゃ暑い、熱中症になりそうです。
さて、益々暑さに追い討ちをかけるM12Aです。
上記の回路でtype コマンドとは何ぞや、其の振る舞いを観測してみました。
上記画像がその結果、途中でBR24C08を引っこ抜き、またソケットに戻しました、電源は入ったままです。
取りあえずは2種類のEEPROMの切り替えが出来ている様な印象ですね、この振る舞いは書きこまれたファームに依存しています。
本来は2個のEEPROMは別のスレーブアドレスを持つ様な配線が適切ですが、ひとつのアドレスでtypeコマンドで切り替えが出来そうな感じですので敢えて上記の配線ししてあります。(正確には二つのアドレスですね)
それにBR24C08はA0,A1はnot useでA2のみが使われます。しかし、BR24C08はパッケージが小さくA2だけにハンダ付けするのが大変ですので、A0~A2まですべてGNDが楽なのです。その代わり、24FC512の方はA0をHighにしてあります。
ここで大事な点はtypeコマンド機能とは何をしているのか?PAGEの切り替えとの関わり等々、考える必要があるでしょうが、この実験では、それは置いておいて、単純にtype コマンドを実行して見ただけです。
type コマンドは本来、1個のI2CEEPROMに対して実行されるものですので、私の様なやり方は間違っていますね。つまり、typeコマンドの正しい使い方ではないと云うことですね。
赤い矢印と文字で余計暑くなりますね。
I2C-EEPROMのA0~A2はChip Selectのようなものです
から、これが異なる値なら区別してアクセスできます。
その意味では、今回のようにtypeコマンドを利用するのも
適切です。
ただしBR24C08は特殊で、A0,A1は無効となっているの
で、複数のチップを利用に対しては考慮が無いのだと思い
ます。
hiraさんの当初の考え方は以下のとおりです(私の勝手な想像ですが)。
I2C-EEPROMはピンやアドレスは同じなのですが、アクセル方式
には違いがある。
「テスト用プログラムを再コンパイルせずに、適合させたい」。
そこで、typeコマンドを用意した。
という経過だと思います。
今回のように複数のチップを接続しても良いのですが、種類の異なる
チップをI2Cバスに接続している場合には、衝突が起きないことを十分
検討の上で利用する必要があります。
朝から暑くて、今日も大変そうな陽気です。
私の実験はtype コマンドの機能を実際にハードを通じて体験して見ようと云うのが趣旨です。
そんなのプログラムを読めば分かるだろうと思われるかも知れませんが、難しく、コメントを参考にしているのが現状です。
BR24C08と24FC512を同じアドレスにした(アドレス ピンをすべてGNDにする)回路、これは不適切で正しくありません、それは承知しています。
typeコマンドがどんな振る舞いをするのか調べて見たかったのです。たまたま、(偶然?)何となく切り替えが出来ているような印象です。しかし、これは全くの偶然で、回路的に同じアドレスになっていること自体、矛盾しています。
次に、24FC512のA0ピンをHighにした回路でですが、これは、ハード的に二つのスレーブアドレスを持ちますので矛盾は有りません。
BR24C08のスレーブアドレスはA2ピンしか存在しません。
A2は両EEPROMともGNDに繋がっています。
また、P0,P1はページアクセスのエリアを決めていますが、ここはGNDですので1pageを指定しています。
pageアクセスをしない限りこのまままで問題ないのではと考えています。
スレーブアドレス的には、
BR24C08=0X50
24C512 =0X51 になります。
この状態ならば、typeコマンドを使うことで同じハード上に搭載したデバイスの切り替えが出来るのでは?
結果を見ますと、どうやら切り替えが出来ているのでは、そんな感触です。
この辺がプログラム作成者の意図と、それを解釈して適当なハード構成で使用する私の様な素人との間で、大なり小なり乖離が生じてしまいますね。
C++で書かれたhiraさんのプログラムはよく出来ているのですが、やはり敷居が高く、senshuさんの云われる熟読が出来ていません。
オリジナルを変更して自分なりの機能を追加変更を加えることが難しいですね。
main.cpp とそれにinludeされる幾つかの.hpp fileこれらの関わりが中々掴めないのが現状です。
Doxygenを利用するのも一助でしょうが、まだそれを道具として自由には使いこなせません。
結論は、簡単なのす、C++をマスタして自在に操ればいいだけのことです、、、が、、、、そうは行かないところに、もどかしくを感じます。