Перейти к содержанию
    

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Вот Вам пример. Конфигурирование 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробывал сделать как вы предложили, но конфигурировал на 10Мбит, не получилось.

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

 

физика Marvell 88E1111,

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

 

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

> при включении 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.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

post-3315-1256291059_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Удачи...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

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

 

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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...