0

「TFTP」サーバーと「U-boot」メニューを使用して、「rfsNV.gz」と「uImageNV」をARMボードにダウンロードしようとしています。私はderamCatcherによって開発されたボード、「tftp32.exe」を備えたWindows 7のtftpサーバー、ハイパーターミナル、クロスオーバーイーサネットケーブルおよびUSBシリアルケーブルを使用しています。ハイパーターミナルを使用してボードに接続すると、U-bootメニューが表示されます。サーバーのIPを192.168.0.123に設定し、ターゲットのボードのIPを192.168.0.1に設定しました。次に、「tftp32.exe」を起動してTFTPサーバーをセットアップし、ハイパーターミナルに書き込みます

tftp 20410000 rfsNV.gz

しかし、ハイパーターミナルは次のように応答します

    PHY not connected!!
    MAC: error during MII initialization
    TFTP from server 192.168.0.123; our IP address is 192.168.0.1
    Filename 'rfsNV.gz'.
    Load address: 0x20410000
    Loading: T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T
    Retry count exceeded; starting again

これは、イーサネット接続が正しく設定されていないことを意味しますか?私のローカルエリア接続は、この図のようなネットワークアクセスはありませんと言っています。ただし、ボード上のイーサネット接続LEDは、ケーブルが接続されていることを示します。私はEmbeddedLinuxにまったく慣れていないので、ボード上のファイルをダウンロードできない理由がわかりません。誰かが何が悪いのか理解できますか?

U-bootが起動するとコンソールが表示されます

Low Level Init performed


boot 1.0 (Nov 25 2003 - 23:08:05)

Uncompressing image...



U-Boot 2008.10.ARM9(NV) (Aug  6 2009 - 23:52:44)

DRAM:  32 MB
Atmel: AT49BV163D (16Mbit)
Flash:  2 MB
DataFlash:AT45DB161
Nb pages:   4096
Page Size:    528
Size= 2162688 bytes
Logical address: 0xC0000000
Area 0: C0000000 to C0007FFF (RO) ARM9 Bootstrap
Area 1: C0008000 to C001FFFF
Area 2: C0020000 to C0027FFF (RO)
Area 3: C0028000 to C020FFFF
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
U-Boot>

'miiinfo'の出力は次のとおりです。

U-Boot> mii info
PHY 0x00: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x01: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x02: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x03: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x04: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x05: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x06: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x07: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x08: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x09: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x0A: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x0B: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x0C: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x0D: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x0E: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x0F: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x10: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x11: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x12: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x13: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x14: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x15: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x16: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x17: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x18: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x19: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x1A: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x1B: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x1C: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x1D: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x1E: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
PHY 0x1F: OUI = 0x0000, Model = 0x00, Rev = 0x00,  10baseT, HDX
U-Boot>
4

2 に答える 2

4

U-Bootからの唯一の顕著なメッセージは

    PHY not connected!!

イーサネット(EMAC)周辺機器はたまたまAtmelARM9SoCに統合されています。
したがって、SoCがAtmel AT91RM9200であることを知っているので、U-Bootのイーサネットドライバーはcpu/arm920t/at91rm9200/ether.c、警告メッセージを生成するコードである必要があります。

if (!PhyOps.IsPhyConnected (p_mac))
    printf ("PHY not connected!!\n\r");

イーサネットPHYペリフェラルは通常SoCの外部にあり、MIIまたはRMIIバスのいずれかを介してEMACに接続されます。
Atmel AT91RM9200リファレンスデザインおよび評価ボードは、DavicomDM9161PHYを使用しています。
U-BootのDavicomPHYドライバーの1つはcpu/arm920t/at91rm9200/dm9161.c、であり、

unsigned int dm9161_IsPhyConnected (AT91PS_EMAC p_mac)
{
    unsigned short Id1, Id2;

    at91rm9200_EmacEnableMDIO (p_mac);
    at91rm9200_EmacReadPhy (p_mac, DM9161_PHYID1, &Id1);
    at91rm9200_EmacReadPhy (p_mac, DM9161_PHYID2, &Id2);
    at91rm9200_EmacDisableMDIO (p_mac);

    if ((Id1 == (DM9161_PHYID1_OUI >> 6)) &&
        ((Id2 >> 10) == (DM9161_PHYID1_OUI & DM9161_LSB_MASK)))
        return TRUE;

    return FALSE;
}

このコードはそれほど複雑ではありません。このルーチンは、RJ45ポートに接続されているもの、イーサネットリンクの状態、またはMACアドレスの値に関係なく成功するはずです。したがって、このコードシーケンスの失敗(PHY警告メッセージを生成する)は、次のことを示しているように見えます。

a)ハードウェアに障害が発生したか、損傷している。(適切な帯電防止対策を講じましたか?)しかし

ただし、ボード上のイーサネット接続LEDは、ケーブルが接続されていることを示します。

PHYが完全に死んでいないことを示しているように見えます。

b)または、ファームウェアがハードウェアと一致していません。ボード番号、リビジョン番号、シリアル番号を確認する必要があります。ボードの回路図やBOM(部品表)を入手し、PHYの部品番号が一致していることを確認します(つまり、ボードの設計でDM9161ではなく他のPHYチップを使用している可能性があります)。ボードのU-Bootソースコードを入手する必要があります。ボードに実際にインストールされているPHYに対してU-Bootが構成されていることを確認します。実行しているU-Bootバイナリが、手元のソースコードと同じバージョンであることを確認します。

あなたが本当に冒険心があるなら、あなたは「コンピュータを再生」しIsPhyConnected()、U-Bootのメモリ書き込みと読み取りまたはmiiコマンドを使用して上記のルーチンの操作を手動で実行することができます。あなたが新しいボードデザインを持ち出そうとしているプロのエンジニアなら、それは次の可能性のあるステップでしょう。

U-Boot > mii
Usage:
mii - MII utility commands

U-Boot > help mii
mii device                     - list available devices
mii device <devname>           - set current device
mii info   <addr>              - display MII PHY info
mii read   <addr> <reg>        - read  MII PHY <addr> register <reg>
mii write  <addr> <reg> <data> - write MII PHY <addr> register <reg>
mii dump   <addr> <reg>        - pretty-print <addr> <reg> (0-5 only)
Addr and/or reg may be ranges, e.g. 0-31.
U-Boot >

アップデート

の出力を見るとmii info、ボードが壊れているか損傷しているように見えます。つまり、EMACがPHYと通信していないか、接続されていません。明るい光の下で虫眼鏡を使ってボードの損傷を調べることができます。ボードを別のボードに交換してみます。

更新II

U-Bootにバグがあるため、ボードからの出力mii infoはわずかに偽物であることがわかりました。このmii infoコマンドは、次のコードを使用して、32の可能なアドレスのそれぞれでMII上のすべての可能なPHYをスキャンします。

int  at91rm9200_miiphy_read(char *devname, unsigned char addr,
        unsigned char reg, unsigned short * value)
{
    at91rm9200_EmacEnableMDIO (p_mac);
    at91rm9200_EmacReadPhy (p_mac, reg, value);
    at91rm9200_EmacDisableMDIO (p_mac);
    return 0;
}

ただし、addr引数(PHYアドレスを保持する)はこのルーチンでは使用されないことに注意してください。その結果、AT91RM9200ボードのこのルーチンは、常にアドレス0のPHYを読み取り、mii infoコマンドはすべてのアドレスの正確なスキャンを報告しません。

dm9161_IsPhyConnected()収集された1つの項目は、PHYがゼロを返していることであり、これにより、比較テストが失敗する理由が明らかになります。ゼロは、代替の認識できないPHYがインストールされているという懸念を軽減するはずです。

私のボードから(アドレス1に1つのPHYがあります)(U-Bootに前述のバグはありません):

U-Boot> mii info
PHY 0x01: OUI = 0x80017, Model = 0x09, Rev = 0x00, 100baseT, FDX
U-Boot> mii dev
MII devices: 'at91phy' 
Current device: 'at91phy'
U-Boot> 
于 2013-03-13T23:17:29.063 に答える
0

イーサネット インターフェイスが初期化されていないようです。お使いのバージョンの U-Boot にイーサネット インターフェイスを有効にするコマンドはありますか? U-Boot 環境変数 hwaddr が構成されているか (「printenv hwaddr」を参照) - この環境変数は、ボードのイーサネット インターフェイスの MAC アドレスです。ボードには、リンク ステータスを示す LED がありますか (これらは通常、イーサネットが差し込まれているソケットの横にあります)。

于 2013-03-11T12:23:40.870 に答える