■細々とENC28J60を使ってきて、ここに来てようやくリファレンスとして固まったと思えるようになった。つまり、ソフトとハード、それぞれの不具合によってどういう動作をするのか解ってきた。とりあえずはあれだ、いい加減ブレッドボードから離れないと。
5Vのスイッチング電源から給電して、3.3Vへ降圧。ATmega128のBポート群を使ってENC28J60とSPI接続、CS線というのは今までと同じで、加えて割り込み線とHWリセットもつなげた。ENC28J60のHWリセットは50KΩでプルアップしている。アナログ部の50Ωは100Ω2つをパラって50Ωにしてますけど、49Ωでもいいのかしらん。
ボードの入出力は今のところ3系統で、ENC28J60の10BASE/HALFは当たり前で、写真に見えるフラットケーブルはAVRのインサーキットプログラム用のポート。その右はUSB-RS232C(TTL)の変換ボード(ストロベリーリナックス製)。USBから給電はしていない。デバッグ用のつもりだから。
ベースの基盤右下にレギュレーター部があり、その上がぽっかりと空いているのは、そこにセンサ類を配置しようか、LCDをつなげてみよかと思案中。ピン配置的にここはAポート群が近く、AD変換やら何やらやりやすい。ただ、とりあえず安易にピンヘッダソケットを置いて、ブレッドボード(またか)とつなげられるようにしようかと思っていたりもする。
ハードウェアが組みあがり、以前使っていたソフトを改めてATmega128に流し込むとあっけなく動作する。あっけないというか、以前よりも確実に起動する。やっぱりねえ、なんぼ便利でもジャンパ線ばんばん飛ばしちゃSPIも不安定だよねえ。
ま、とりあえず一安心。ブラウザからのアクセスもそれなりに応答している。
以前と確実に違うことは、HWリセットをATmega128と結んだことで、電源投入直後、ENC28J60はリセット状態に入っているということ。ATmega128側でリセットを解除した後にソフトウェアリセットを改めてかけるシーケンスとなっている。
そういえば、以前ENC28J60のLED Bを吸い込み型で配線すればデフォルトFULLになるのでは、というご質問というか、意見を頂いたのだけど、それは2つの点でまずい。
1つめはENC28J60のエラータ(Rev5)にあるのだけど、LED Bの極性判定はうまく動作しないとのこと。つまり、初期起動時の極性判定に頼るのではなく、レジスタで設定するのが推奨。そしてもう1つが、これが決定的なのだけど、イーサの規格として、ENC28J60はフル/ハーフの自動判定機能が無い。規格では、自動判定にはネゴシエーションの信号を使う。最近、身の回りにあるイーサポート(という言い方は乱暴だけど)は大抵自動判定をしてくれやがる(PCと直接接続だったら自動判定を切れたりするけど)ので、自動判定する相手と自動判定しないENC28J60が対向することになる。このとき、自動判定する側は、ENC28J60がネゴに応えないので、半二重とみなす。逆に言えば、接続先からは半二重と看做されてしまうので、ENC28J60はとにかく半二重にしないと駄目ということになる。
イーサネットにつなげて何をするかというところで、リモートPCスイッチはすでにあるので、それはそれとして、さらに昔に遡ってネットワーク赤外線リモコン再びか。温度湿度気圧ロガーとかそれぞれの部屋にばらけてモニタできるようにすると面白いかな。センス/ネットとして。