Fri 08/08, 2008

インターフェース誌 ColdFire 基板(6) [Electronics ]

シンセ・アンプラグドさんの記事「ColdFire MCF52233 基板 (7)」で SilentC の疑問を感じる動作、4点について書かれていたので検証してみたところ、同じように不具合(?)を確認できた。

  1. 全二重 (Full Duplex) で接続されない
  2. コンソール入力のエコーバックがちょっと変
  3. telnet 出力が、途切れ途切れで遅い
  4. ダイレクト実行の途中でハングアップする

使用 RJ-45 ジャックはサイレントシステムから購入の Trxcom TRJ0012CNL および共立から購入の YCL1111-09L1G (LED 付)。

まず、念のために SystemRegistry および SilentC_Registry 内の値を CGI プログラムで表示させてみた。CGI となる HTML では下に表記した左辺の文字列の先頭に $ を付けたものをシンボルとして右辺に置く。例えば "IP = $IP" のようにする。このとき、シンボルの後にいくつかスペースを置かないと出力が乱れるようだ。なお、これらのシンボルはサイレントシステム社のダウンロードページにある、同じ SilentC を使ったシステムである「OS-1 ユーザーズマニュアル」および「OS-1 プログラミングマニュアル」の内容から類推した。

  • IP = 192.168.1.10
  • GW = 192.168.1.1
  • Sub = 255.255.255.0
  • DNS = 192.168.1.1
  • Dhcp =
  • DhcpS =
  • User =
  • Auto =
  • Speed = checked
  • Dup = checked
  • Http = checked
  • Tftp = checked
  • StartFile = Main un
  • NoBreak =
  • Telnet = checked
  • Port = 23
  • Term = checked
  • AutoRun =

「1. 全二重 (Full Duplex) で接続されない」については上記のように Dup = 1(checked) として再起動しても半二重で接続される。"OS-1" ではデフォルトで 100Mbps 全二重のように書かれているから、これは付録基板における制限ではないかと思われる(追記参照)。この他、Dhcp (DHCP クライアント指定)なども機能しないようだから、基本的には OS-1 のシステムをベースに簡略化しているのではなかろうか。

2, 3 についてはとりあえず省略。

「4. ダイレクト実行の途中でハングアップする」については、Telnet からでは確かにそうなり、10M よりも 100M での接続時に特に起きやすい。試しに次のように 10ms のタイマを2箇所に挟んでみると 100M でもハングしなくなった(追記参照)が、これではシリアルよりも更に遅くなってしまう。

{int i;for(i=0;i<32767;i++){PrHexWord(i);Sleep(1);PrStr("\r\n");Sleep(1);}}

Ether が半二重に固定されていることと、このような挙動からネットワーク周りのクリティカルな処理に弱点を抱えているのかも知れない。なお、OS-1 プログラミングマニュアルには「開発時にはなるべくシリアルでお願いします」とある。確かにシリアルコンソールからの実行時には問題ない。

[2008.08.13]
Reference Manual には次のようにあるから、システムクロックが 25MHz のこの基板では半二重動作のみサポートということなのだろうか。(外部クロックは 25MHz だが、システムクロックは逓倍されている可能性もあるから SilentC については不明)

  • Support for full-duplex operation (200 Mbps throughput) with a minimum system clock rate of 50 MHz
  • Support for half-duplex operation (100 Mbps throughput) with a minimum system clock rate of 25 MHz

[2008.08.14]
酔漢電子工作手帳さんの記事「Auto-negociation は Errata らしい」に AutoNego に関する情報あり。"MCF52235 Device Errata" によると "EPHY Not Accepting Valid LTP Greater Than 100 ns" とのことで、自動ネゴシエーションに失敗するとある。初出は 2005 年だが、まだ修正されていないようだ。

[2008.08.15]
シンセ・アンプラグドさんの記事によると、4 については Sleep() でなくとも「他のスレッドに (明示的に) 制御を渡すだけの SystemSleep() を挟む」ことでハングアップを回避できるとのこと。こうすれば無駄な待ち時間を取らずに済む。使用上の注意事項と言うところか。

[2008.08.20]
Interface 付録ColdFire基板特設ページ「FAQ(よくある質問) コーナ (No.5)」に上記 Auto Negotiation に関する Eratta と全二重/半二重判定について書かれている。この中で

どうしても全二重で接続したい場合は,ColdFireマイコン側も接続相手ポートも,どちらもオート・ネゴシエーションを切り,全二重固定設定にする必要があります.
とあるが、前述のようにシステムクロックによる制限は影響しないのだろうか。動作確認しようにも今時は Auto Negotiation 対応でないハブなどの装置を探すほうが難しい。
→ 60MHz のようだから大丈夫か。

Posted by masato at 10:27 PM
このエントリーのトラックバックURL: http://bird.dip.jp/cgi-bin/mt/mt-tb.cgi/1615
コメントする

おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。










名前、アドレスを登録しますか?