Jump to content

    

Управление PHY через MDC/MDIO

Необходимо сделать проет, который бы читал/записывал данные из внутренних регистров PHY, при этом использовался бы интерфейс MDC/MDIO.

При подачи этих сигналов в режиме чтения физика ни как не реагирует. Сигналы формировал согласно стандарту. Тактовый сигнал менял от 25кГц до 3МГц, но реакции ни какой. Смотрел осциллографом, сигналы до физики доходят такие какие я подовал, после перехода в Z состояние и начало приема, на сигнале MDIO постоянно весит "1", т.к. на плате этот сигнал подтянут к питанию. Адрес физики использовал 0 (стандартный) и 7 (таким она хардово сконфигурирована), адрес регистра ставил любой (менял), реакции тоже ни какой.

Подскажите в чем может быть проблема?

Share this post


Link to post
Share on other sites

Делал. Работало.

 

Вот Вам пример. Конфигурирование PHY на 100М линк

----------------------------------------------------------------------------------

entity mii_mem is
    Port ( clk     : in  STD_LOGIC;
           en     : in  STD_LOGIC;
           addr : in  STD_LOGIC_VECTOR (6 downto 0);
           do     : out  STD_LOGIC
        );
end mii_mem;

architecture Behavioral of mii_mem is
  type rom_type is array (0 to 127) of std_logic;
  signal rom : rom_type := 
  (
    --preambl
    '1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1',
    --ST
    '0','1',
    --OP CODE
    '0','1',
    --PHY ADDR
    '0','0','0','0','0',
    --REG ADDR
    '0','0','0','0','0',
    --TAR
    '1','0',
    --DATA
    '0','0','1','0','0','0','0','0',
    --DATA
    '0','0','0','0','0','0','0','0',
    --post
    --'1','1','1','1',
    --preambl
    '1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1',
    --ST
    '0','1',
    --OP CODE
    '0','1',
    --PHY ADDR
    '0','0','0','0','0',
    --REG ADDR
    '0','0','0','0','0',
    --TAR
    '1','0',
    --DATA
    '1','0','1','0','0','0','0','0',
    --DATA
    '0','0','0','0','0','0','0','0'
    --post
    --'1','1','1','1'    
    );
    
attribute rom_style: string;
attribute rom_style of rom: signal is "distributed";

begin
  process(clk)
  begin
    if clk'event and clk = '1' then
      if en = '1' then
        do <= rom(conv_integer(addr));
      end if;
    end if;
  end process;

end Behavioral;

 

сигнал addr инкрементирутся по каждому clk

Share this post


Link to post
Share on other sites

Попробывал сделать как вы предложили, но конфигурировал на 10Мбит, не получилось. И зачем вы два раза подавали команду? первый на конфигурирование 100Мбит, а втрой на Reset + 100Мбит, разве после ресета все настройки физики не сбросятся? И производили ли вы чтение регистров?

Share this post


Link to post
Share on other sites

Использую отладочную плату от Xilinx ML507, физика Marvell 88E1111, плисина Virtex5 FX70T.

Так же пробывал на плате "Spartan-3E Starter Kit" с физикой SMSC LAN83C185, результат такой же, то есть реакции на команды не наблюдается.

Share this post


Link to post
Share on other sites
Попробывал сделать как вы предложили, но конфигурировал на 10Мбит, не получилось.

Если не ошибаюсь, при включении phy по умолчанию на 10Мбит настроена , если конечно Вы не подаете особую конфигурацию посредством пинов CONFIG (на плате вашей должны быть джамперы)

 

физика Marvell 88E1111,

У меня на такой же PHY работает. :laughing:

 

И зачем вы два раза подавали команду? первый на конфигурирование 100Мбит, а втрой на Reset + 100Мбит,

Честно - не помню, давно писал. Так как даташита на PHY толкового нет, то переписывал по xapp1042 (полистайте его, там так же используется Marvell 88E1111)

 

И производили ли вы чтение регистров?

нет. только запись

Share this post


Link to post
Share on other sites

> при включении phy по умолчанию на 10Мбит настроена

при включении у физики по умолчанию вытавлен режи опрделения скорости текущего соединения, как раз с помощью конфигурационных ног, по этому и выставлял скорость 10Мбит, т.к. подключал к 100 или 1000 Мбитной сети.

 

Все, разобрался, но не совсем. Физика реагирует на запосы подаваемые только с её адресом "00111", а на запрос с адресом "00000" не отвечает. Хотя в документации "Virtex-5 FPGA Embedded Tri-Mode Ethernet MAC User Guide.pdf" (UG194) указано следующее:

The PHYAD field for an MDIO frame is a 5-bit binary value capable of addressing 32

unique addresses. However, every MDIO slave must respond to physical address 0.

Почему в данном случае физика не реагирует на нулевой адре пока не понятно, буду разбираться...

Share this post


Link to post
Share on other sites

Может стандарт IEEE 802.3 поможет - там должно быть описание MDI. Если мне не изменяет память, то встречал один PHY, для которого нулевой адрес означал отключение от MDI, но это был точно не Marvell

Share this post


Link to post
Share on other sites
Подскажите в чем может быть проблема?

Добавлю, может оно и напрямую не относится к делу, но!

Посмотрите, сколько времени должен стоять сигнал сброс. У Микрела от этого сильно зависит, прочтется ли аппаратная зашивка...

удачи!

Share this post


Link to post
Share on other sites

После нескольких опытов с разными PHY от MARVELL, SMSC, AMD выяснилось что ни одна из них не реагирует на запросы с нулевым адресом (PHY_addr), при этом команды формировались как с FPGA (Spartan3E, Virtex5) так и с помощью процессора. При этом если задать адрес физики. заданный с помощью конфигурационных ножек (отличный от нуля), то все работает правильно.

Может быть PHY не должна отвечать на нулевой адрес, если её назначен другой адрес?

Share this post


Link to post
Share on other sites

Здравствуйте.

Пытаюсь начать работать с PHY smsc 8700, по ходу возник вопрос по SMI интерфейсу програмирования.

Вот прямая ссылка на описание. Там на стр. 33 приведены временные диаграмы чтения записи регистров микросхемы. На них присутствует загадочный цикл Turn Around, что это за цикл и какова его длительность нигде информации нет. Может кто то прояснить эту ситуацию ? На всякий случай прикладываю снимок экрана с диаграмой.

post-3315-1256291059_thumb.png

Share this post


Link to post
Share on other sites
На них присутствует загадочный цикл Turn Around, что это за цикл и какова его длительность нигде информации нет. Может кто то прояснить эту ситуацию ? На всякий случай прикладываю снимок экрана с диаграмой.

 

Стандартно термин Turn Around означает, что буфер выхода с третьим состоянием, должен переключиться из состояния "выход" в третье состояние или буфер входа-выхода в состояние чтения. Это делается ддля того, чтобы на шине данных не было столкновения двух буферов - одного в передатчике, другого в приемнике. А время этого цикла должно быть задано явно в даташите. На самом деле, там должно быть сказано, что Ваш передатчик устанавливается в 3-е состояние, и сказано, когда последует первый достоверный принимаемый бит.

Далее понятно. Это делается для всех синхронных шин, например для PCI...

Удачи...

Share this post


Link to post
Share on other sites

Спасибо за разяснения, iosifk. Но тогда мне непонятно какой смысл термин turn around имеет при записи. Там ведь не происходит переключения буферов, или я что то неправильно понимаю ?

Share this post


Link to post
Share on other sites
Спасибо за разяснения, iosifk. Но тогда мне непонятно какой смысл термин turn around имеет при записи. Там ведь не происходит переключения буферов, или я что то неправильно понимаю ?

 

Надо посмотреть описание шины. Я сейчас не помню тонкости. Но, тогда, в исходном состоянии передатчик должен быть отключен от шины и быть в 3-м состоянии?

Share this post


Link to post
Share on other sites
Спасибо за разяснения, iosifk. Но тогда мне непонятно какой смысл термин turn around имеет при записи. Там ведь не происходит переключения буферов, или я что то неправильно понимаю ?

 

Теоретически никакого... иногда turn around требуется после write data, чтобы приемник подтвердил принятие данных.

 

 

На практике для данного случае возможно

 

1. Сделано по образцу и подобию с циклом read

 

2. приемнику требуется некоторое время , чтобы после выставления адреса он был готов принять данные.

 

з.ы если уж очень любопытно, тогда ковырять стандарт

http://standards.ieee.org/getieee802/802.3.html

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this