■イーサネットインタフェースボードのプロトはなんか今ひとつ調子が出ないというか、受信は問題が無いのだけど送信を始めるとダウンしてしまう。とりあえずpingに応答できるようにしたいのだけど、ping応答するとせいぜい1分もするとダウンして、まず送信動作をしてもPC側に応答が帰らなくなり、さらに動かしていると受信も誤動作というか、暴走してしまう
組み込みプログラムのテストはできなくはないのだけど、これではさすがに使いづらい。ブレッドボード経由で送受信周りの配線はずるずる引き回しているし、ジャンパ線は飛び交っているしでいろいろキタナイのが(ノイズ汚染等々で)よくないのかもしれない。
改まってENC28J6のデータシートに載っている参考回路図を眺めていたら、結構な勘違いをしている箇所を一つ見つけました。
ENC28J60のPin1はVCAPで日本語データシートでは1uF~10uFでVssと繋げるとされているのですが、英語版データシートでは1mF~10mFとなっています。マイクロとミリで、単位が全然違うじゃない。1mFといったら1000uFでしょ。しかも標準10mFって本当にそんな大きなキャパシタが必要なんですか? というのは正直な感想。それとも米国のmFは日本のuFとかそんなことあるのかしらん。米国のデータシートはミリ、ナノ表記が一般的らしく、対して日本のそれはマイクロ、ピコなので読み替えが面倒くさい。
キャパシタを大きなものに交換するということも考えたのですが、ENC28J60とRJ45が分離していてブレッドボード経由で接続するというのも煩わしいし、新しいものをさっさと造ろう。
作り変えるにあたって、ついでに改善したいのはやはり受発信の配線周りで、特に受発信双方の作動通信配線と参照面との間の50Ω。きっかり50Ωの抵抗というのが売っていなくて、初回に造ったものは20Ωと30Ω抵抗を直列につないだのでした。ただ、まあ、直列につなぐとコンパクトに収めるのが難しいので、基板上に立てる形で配線。作り変えにあたってそこは改善して、100Ω2つを並列に使うことにしました。送受信双方の作動経路に使うの8個必要になりますが、異なる値の抵抗を数揃えるよりは同じ値の抵抗を揃えるほうが後の管理も楽です。
それと、これも細かいことですが、RJ45についているステータスLEDは使わず、ボード上にLEDを配置することにしました。専用基盤を起こしているなら配線も楽なんでしょうが、RJ45端子の千鳥配置をDSUB-9ピンの変換基盤を使って無理やり2.5mm格子配置に変換している状態ではステータスLEDを使おうとするとジャンパ線を飛ばさざるを得なくなるのでそれを忌避したためです。
最初に使ったユニバーサル基盤は小さいボード(37x52mm)に無理やり詰め込んで、挙句2枚に分離したわけですが、今回は2.5倍(90x54mm)のものを使いました。なんでも無理やり押し込むのはよくないですね。
部品を並べて、きれいに収まったので一気にハンダ付け。ATmega128ボードとのインタフェースは初回のものとピンコンパチ。
自分で言うのもなんですが、初回のものと比べると見た目が綺麗ですね。
ATmega128と仮接続してENC28J60からの応答を確認できたのでRJ45を載せる。最初イーサケーブルを挿してもリンクアップしなかったので悩んだのですが、何のことはなく、大元の電源供給点から最も遠い位置にあるVddTxへの給電ラインがされていなかっただけでした。
給電ラインを伸ばして、イーサケーブルを挿し、ボードとハブ側双方でのリンクアップを確認。
次にARP設定をせずにpingを投げて応答が戻ることを確認。30分ほどpingを投げ続けても暴走することはなかったので大丈夫なようです。
これで簡易IPスタックの作成に入れそうです。とりあえずは3回握手するルーチンを。
写真では左側に何か写っていますが、これは3.3V降圧モジュールです。