Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atheros AR8035
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
NSergeevich
Всем привет. У кого получится подсказать мне буду очень рад и благодарен.
Я пробую сконфигурировать Atheros AR8035 ethernet PHY.
Отправляю на его вход MDIO след. последовательность (из доки)
1...1(32единицы)01(ST)10(OP)00100(PHYAdd)00010(RegAdd - PHY Identifier)z
После этого он должен мне ответить вот это: 16’h004D
Но он не отвечает. Что не так? Что забыл?
tvcam
Нужно быть точно уверенным что правильно выбран PHYAdd, к примеру нужно проверить LED_ACT (это средняя единица в вашем коде PHYAdd), при включении там на ножке должна быть 1. Чтобы это понять нужно увидеть схему, что к этой ножке подключено? А проще перебрать программно три младших бита PHYAdd и на какой то код она должна ответить. Скорее всего в середине PHYAdd 0.
NSergeevich
Цитата(tvcam @ Apr 9 2015, 18:42) *
Нужно быть точно уверенным что правильно выбран PHYAdd, к примеру нужно проверить LED_ACT (это средняя единица в вашем коде PHYAdd), при включении там на ножке должна быть 1. Чтобы это понять нужно увидеть схему, что к этой ножке подключено? А проще перебрать программно три младших бита PHYAdd и на какой то код она должна ответить. Скорее всего в середине PHYAdd 0.

Прикол в том... только не смеяться))) я уже перебрал все возможные PHYAdd 5bit - 32 штуки))) Кстати, забыл сказать, что я смотрю через ChipScope то, что отправляю и то, что получаю.
tvcam
Я недавно цеплял тоже PHY, как раз в адресе ошибся, как исправил так сразу ответила. Использовал код отсюда:
http://micropendousx.googlecode.com/svn/tr...ebserver/mdio.c
И что PHY отвечает? 1 или 0. Проверить что вы правильно принимаете от PHY (нужно правильно и во время переключиться на вход), для этого притянуть резистором сначала на 1 (он там должен быть Management data, 1.5K pull-up) т.е. в ответе 16’hFFFF (это если PHI не отвечает) , а затем его отключить и к 0 подтянуть, тогда у вас в ответе будет 16’h0000, опять же если PHI не отвечает . Моя PHY переключалась о начинала отвечать через 40нс.
NSergeevich
Цитата(tvcam @ Apr 9 2015, 19:14) *
Я недавно цеплял тоже PHY, как раз в адресе ошибся, как исправил так сразу ответила. Использовал код отсюда:
http://micropendousx.googlecode.com/svn/tr...ebserver/mdio.c
И что PHY отвечает? 1 или 0. Проверить что вы правильно принимаете от PHY (нужно правильно и во время переключиться на вход), для этого притянуть резистором сначала на 1 (он там должен быть Management data, 1.5K pull-up) т.е. в ответе 16’hFFFF (это если PHI не отвечает) , а затем его отключить и к 0 подтянуть, тогда у вас в ответе будет 16’h0000, опять же если PHI не отвечает . Моя PHY переключалась о начинала отвечать через 40нс.


Ответ от PHY я пытаюсь поймать при помощи VIO (это модуль в xilinx-е который работает с ChipScope). На PHY на вход MDC подаю клок 2.5 mhz, а на MIDIO (он кстати двунаправленный I/O) подаю 1...1 01 10 00001 00010 z. На ChipScope вижу только то, что отправляю, потом период с z-состоянием (во время которого должен прийти ответ от PHY). Так как MIDIO двунаправленный, я полагаю, что после получения моих нулей и единиц он должен по той же линии сам ответить. Там еще есть выход INT (interrupt) c которым я ничего не делаю. Может быть нужно сам чип как-то запустить? Может быть он в состоянии сброса?
Andrew Su
Цитата(NSergeevich @ Apr 10 2015, 11:19) *
Ответ от PHY я пытаюсь поймать при помощи VIO (это модуль в xilinx-е который работает с ChipScope). На PHY на вход MDC подаю клок 2.5 mhz, а на MIDIO (он кстати двунаправленный I/O) подаю 1...1 01 10 00001 00010 z. На ChipScope вижу только то, что отправляю, потом период с z-состоянием (во время которого должен прийти ответ от PHY). Так как MIDIO двунаправленный, я полагаю, что после получения моих нулей и единиц он должен по той же линии сам ответить. Там еще есть выход INT (interrupt) c которым я ничего не делаю. Может быть нужно сам чип как-то запустить? Может быть он в состоянии сброса?


Из datasheet:

RSTn Pin 1 I(Input) System reset, active low. Requires an external pull-up resistor

NSergeevich
Цитата(Andrew Su @ Apr 10 2015, 11:53) *
Из datasheet:

RSTn Pin 1 I(Input) System reset, active low. Requires an external pull-up resistor


Т.е. я должен на RSTn подать единицу ?
_Anatoliy
Цитата(NSergeevich @ Apr 10 2015, 14:02) *
Т.е. я должен на RSTn подать единицу ?

А у Вас как цепочка сброса выполнена?
NSergeevich
Цитата(_Anatoliy @ Apr 10 2015, 16:26) *
А у Вас как цепочка сброса выполнена?


Не знаю. На самом фи есть RSTn в доке написано только это: System reset, active low. Requires an external pull-up resistor. Pin1 и Тип инпут.
_Anatoliy
Цитата(NSergeevich @ Apr 10 2015, 16:45) *
Не знаю. На самом фи есть RSTn в доке написано только это: System reset, active low. Requires an external pull-up resistor. Pin1 и Тип инпут.

Я в шоке.Ну организуйте хотя бы RC цепочку для сброса,или с порта FPGA(CPU) сформируйте нужный импульс.
NSergeevich
Цитата(_Anatoliy @ Apr 10 2015, 17:13) *
Я в шоке.Ну организуйте хотя бы RC цепочку для сброса,или с порта FPGA(CPU) сформируйте нужный импульс.


RSTn соединен с ножкой на плисине, а та в свою очередь через R217 1K 1/10w на зеилю. На самой плисине я формирую импульс который в случае срабатывания rst выдает 0, а в случае clk выдает 1-цы
_Anatoliy
Цитата(NSergeevich @ Apr 10 2015, 17:42) *
RSTn соединен с ножкой на плисине, а та в свою очередь через R217 1K 1/10w на зеилю. На самой плисине я формирую импульс который в случае срабатывания rst выдает 0, а в случае clk выдает 1-цы

Ну а чего же тогда говорили "не знаю"?
NSergeevich
Цитата(_Anatoliy @ Apr 10 2015, 17:49) *
Ну а чего же тогда говорили "не знаю"?


Я не знаю как с RSTn положено работать. И как через него завести chip. Может быть из-за того что я на него с клоком подаю 1-цы он из-за этого все время сбрасывается и у меня PHY не отвечает. На MDC я подаю 2.5 Mhz может быть это слишком быстро? И он не принимает и поэтому не отвечает?
Andrew Su
Цитата(NSergeevich @ Apr 10 2015, 18:13) *
Я не знаю как с RSTn положено работать. И как через него завести chip. Может быть из-за того что я на него с клоком подаю 1-цы он из-за этого все время сбрасывается и у меня PHY не отвечает. На MDC я подаю 2.5 Mhz может быть это слишком быстро? И он не принимает и поэтому не отвечает?

RESET - активный низкий уровень, т.е. при RESET=0 микросхема сбрасывается. Удерживать RESET=0 надо после включения питания, согласно datasheet (стр.26) ..

For a reliable power on reset, suggest to keep asserting the reset low long enough (10ms) to ensure the clock is stable and clock-to-reset 1ms requirement is satisfied.

Если вывод подтянут, как вы пишете, к 0, то на микросхему будет воздействовать RESET=0 до тех пор, пока плис на него не выдаст 1. Для того, чтобы RESET сработал, надо, чтобы во время
RESET=0 минимум на протяжении 1 миллисекунды присутствовал стабильный CLK. Под сигналом CLK понимается поступающие на вход XTLI 25МГц от внешнего генератора или частота, вырабатываемая внутренним генератором, если к XTLI XTLО подключен кварц.

После загрузки конфигурации плис подержите RESET=0 несколько миллисекунд, а потом переведите его в 1.

Вроде так.
Jury093
Цитата(NSergeevich @ Apr 10 2015, 17:42) *
На самой плисине я формирую импульс который в случае срабатывания rst выдает 0, а в случае clk выдает 1-цы

вы с этим сигналом определитесь - что выдает 1-цу или 1-цы (меандр), в последнем случае чип работать не будет..
найдите доку на чип физики и почитайте про "ресет"
придавили к "0", чип неактивен, выставили уровень "1", чип интится и начинает работу с настройками по умолчанию и ждет обмена по mdc/mdio
кстати, часто регламентируют время инита, т.е. если отпустить ресет и пытаться сразу работать через mdc/mdio, а чип еще не готов, то хорошего не будет..
_Anatoliy
Цитата(NSergeevich @ Apr 10 2015, 17:13) *

Как у Вас дела с физикой,заработала? А то я тоже этот чип хочу применить в новых изделиях.
NSergeevich
Цитата(Jury093 @ Apr 10 2015, 22:12) *
вы с этим сигналом определитесь - что выдает 1-цу или 1-цы (меандр), в последнем случае чип работать не будет..
найдите доку на чип физики и почитайте про "ресет"
придавили к "0", чип неактивен, выставили уровень "1", чип интится и начинает работу с настройками по умолчанию и ждет обмена по mdc/mdio
кстати, часто регламентируют время инита, т.е. если отпустить ресет и пытаться сразу работать через mdc/mdio, а чип еще не готов, то хорошего не будет..


Вот мой код. Задержка 50мс (клок 2mhz), после задержки 1. ready инициализирует начало запроса с phy (после задержки). Вообщем.... не заработало) пока...
Код
module RSTn(
input clk,
input rst,
output RSTn,
output ready
    );
    
reg [16:0]counter;
reg out;
reg ready_state;

always @(posedge rst or posedge clk)
begin
if (rst)
  begin
   counter <= 0;
    out <= 0;
    ready_state <= 0;
  end
else

    if (counter < 17'b11000011010100000)
    begin
        counter <= counter + 1'b1;
    end
    else
    begin
        out <= 1;
        ready_state <= 1;
    end
end
    
    
  
assign ready = ready_state;
assign RSTn = out;  
endmodule
Jury093
Цитата(NSergeevich @ Apr 14 2015, 18:08) *
Вот мой код. Задержка 50мс (клок 2mhz), после задержки 1. ready инициализирует начало запроса с phy (после задержки). Вообщем.... не заработало) пока...
Код
module RSTn(
input clk,
input rst,
output RSTn,
output ready

я в этих закорючках ничего не понимаю..
для начала, убедитесь, что у вас чип подключен правильно (согласно даташиту), есть все питания, все управляющие сигналы на месте, частота не плавает
лучший помощник тут - осциллограф
далее, встаете двумя лучами на mdc/mdio и смотрите - все ли правильно с т.з. обмена по шине управления
если к электрике и живости чипа претензий нет, то дело в коде
кстати, на mdio вероятно нужен пуллап - смотрите доку на чип и свою схему..
NSergeevich
Цитата(Jury093 @ Apr 14 2015, 20:07) *
далее, встаете двумя лучами на mdc/mdio и смотрите - все ли правильно с т.з. обмена по шине управления


Кажется я нашел косяк. Во всяком случае еще один... но он настолько примитивен, что писать о нем не хочется))
Jury093
Цитата(NSergeevich @ Apr 15 2015, 09:57) *
Кажется я нашел косяк. Во всяком случае еще один... но он настолько примитивен, что писать о нем не хочется))

а чего стеснятся то? при разработках создавать (неумышленно) грабли и их находить, имхо, это нормально..
напишете о своем косяке, потом другой человек найдет эту тему через поисковик и получит знания..
akorud
Цитата(_Anatoliy @ Apr 14 2015, 13:26) *
А то я тоже этот чип хочу применить в новых изделиях.

Используем, исключительно беспроблемный чип, никаких нареканий.
_Anatoliy
Цитата(akorud @ Apr 15 2015, 17:58) *
Используем, исключительно беспроблемный чип, никаких нареканий.

Спасибо.
NSergeevich
Цитата(Jury093 @ Apr 15 2015, 11:12) *
а чего стеснятся то? при разработках создавать (неумышленно) грабли и их находить, имхо, это нормально..
напишете о своем косяке, потом другой человек найдет эту тему через поисковик и получит знания..


Вообщем у меня дока на AR8035 не совсем информативная и я проглядел, что у меня клок на MDC идет синхронно с данными на MIDIO, а надо с удержанием в 10ns. Вот так)
NSergeevich
Последние новости.

phy AR8035

На порт RSTn подаю 0 в течении 10мс и далее 1 (завел чип) ps что завел чип это только мои предположения
На порт MDC подал клок 2.5 mhz
На порт MIDIO подаю 1...1(32единицы)01(st)10(op)00ххх(phyadd)00010(regadd PHY Identifier)z

MIDIO со здвигом по фазе относительно MDC

Перебрал три младших бита phyadd (т.к. адрес точно не знаю) ответа с phy чип скопом по прежнему не увидел

Есть идеи, что еще мог забыть?
Andrew Su
Цитата(NSergeevich @ Apr 21 2015, 16:18) *
Последние новости.

phy AR8035

На порт RSTn подаю 0 в течении 10мс и далее 1 (завел чип) ps что завел чип это только мои предположения
На порт MDC подал клок 2.5 mhz
На порт MIDIO подаю 1...1(32единицы)01(st)10(op)00ххх(phyadd)00010(regadd PHY Identifier)z

MIDIO со здвигом по фазе относительно MDC

Перебрал три младших бита phyadd (т.к. адрес точно не знаю) ответа с phy чип скопом по прежнему не увидел

Есть идеи, что еще мог забыть?

Добрый день.
А что видите? Все 0 или все 1?
Попробуйте прочитать регистр с другим адресом, например с 0-м.
Если есть возможность, попробуйте зациклить выдачу команды чтения по MDIO + период чтения и посмотреть сигнал на MDIO осциллографом.
Может ChipScope не отрабатывает? Или сигнал до PHY не доходит?
Кстати, адрес PHY определяется подтяжкой пинов RXD0(ADDR0), RXD1(ADDR1), LED_ACT(ADDR2) PHY.
Если внешних подтяжек нет, то внутренние подтяжки PHY такие - ADDR0=0, ADDR1=0, ADDR2=1.
(стр. 7 datasheet).
NSergeevich
Цитата(Andrew Su @ Apr 22 2015, 13:30) *
Добрый день.
А что видите? Все 0 или все 1?
Попробуйте прочитать регистр с другим адресом, например с 0-м.
Если есть возможность, попробуйте зациклить выдачу команды чтения по MDIO + период чтения и посмотреть сигнал на MDIO осциллографом.
Может ChipScope не отрабатывает? Или сигнал до PHY не доходит?
Кстати, адрес PHY определяется подтяжкой пинов RXD0(ADDR0), RXD1(ADDR1), LED_ACT(ADDR2) PHY.
Если внешних подтяжек нет, то внутренние подтяжки PHY такие - ADDR0=0, ADDR1=0, ADDR2=1.
(стр. 7 datasheet).


На ChipScop-е вижу только то, что отправляю на phy. Периодично ---набор единиц и нулей(1..1 01 10 00100 00010)---и z состояние----через долгий период несколько тысяч тактов опять набор нулей и единиц с z состоянием
Сразу с z состоянием и должен увидеть ответ от phy (которого нету)
Осциллографом ткнулся на ножку и действительно все увидел, что отправляю z состояние - мои меандры - z состояние - мои меандры
Т.е. до phy все доходит, но он не отвечает.

Либо chipscop не ловит ответ, либо с адресами не то... хотя перебрал все (и не только младшие 3 бита)... не знаю, что еще может быть(
tvcam
Я вас в 4-м посте этой темы спрашивал что вы видете 0 или 1?
Andrew Su вас тоже спросил "А что видите? Все 0 или все 1?"
Вы ответили: "z состояние" Вопрос: как вы узнали или с чего вы решили что это Z ?
Там вообще резистор притягивающий к плюсу должен быть.
И исходник полностью выложите в виде файла. Правда я только по Altere.
NSergeevich
Цитата(tvcam @ Apr 22 2015, 14:43) *
Я вас в 4-м посте этой темы спрашивал что вы видете 0 или 1?
Andrew Su вас тоже спросил "А что видите? Все 0 или все 1?"
Вы ответили: "z состояние" Вопрос: как вы узнали или с чего вы решили что это Z ?
Там вообще резистор притягивающий к плюсу должен быть.
И исходник полностью выложите в виде файла. Правда я только по Altere.


Я писал, что вижу "то что отправляю на phy" и z состояние. Почему решил что это z: потому, что я сам его в коде прописал после отправки единиц и нулей на phy нужно перевести в z состояние и ловить ответ.
Также я проверил ткнувшись осциллографом на ножку phy mdio и увидел z состояние (чуть меньше 1-цы по уровню) далее 32 единицы и остальную последовательность, потом опять плавно переходит в z состояние.

На рисунке: верхний это clock MDC снизу то что отправляю на phy mdio. На чипскопе 1 и z рисуется одним уровнем

Какой исходник скинуть? Топ модуля на Verilog-е ?
tvcam
Диаграмма обмена с PHI может поможет.
Нажмите для просмотра прикрепленного файла

Не обращайте внимания на то что тактовая не меандр как у вас, это не принципиально, главное это состояния MDIO когда тактовая переходит из 0 в 1. У меня это всё формирует процессор.
Как только я перевожу выход в третье состояние PhyOutMDIO_Z =0 выход из FPGA встаёт в Z, а так как подвешен резистор к +, мы видим на E_MDIO = 1. Затем подаётся такт, PHI понимает и притягивает этот резистор к нулю.
Хотя бы исходник топ модуля, хоть с чего то начать искать ошибку.
Где у вас сигнал перевода в Z состояние?
Andrew Su
Добрый день.
Для сигнала MDIO надо использовать компонент
IOBUF_inst : IOBUF
generic map (
DRIVE => 12, -- максимальный ток выхода в мА
IOSTANDARD => "DEFAULT", -- надо заменить на нужный вам стандарт
SLEW => "SLOW" -- можно оставить или поменять на FAST
)
port map (
O => MDIO_O, -- Это сигнал, который вы принимаете от PHY
IO => MDIO, -- это ваш сигнал к PHY на пине FPGA
I => MDIO_I, -- Это сигнал, который вы отправляете на PHY
T => T -- 3-state enable input, high=input, low=output
);
У вас так? При этом чипскопом надо смотреть MDIO_O и MDIO_I.
В схеме есть PULLUP резистор на пине MDIO?
Можно в UCF файле в описании сигнала MDIO добавить атрибут PULLUP
Например такое описание
Net MDIO LOC = E9(нужный вам пин) | PULLUP;
NSergeevich
Цитата(Andrew Su @ Apr 22 2015, 22:08) *
Добрый день.
Для сигнала MDIO надо использовать компонент
IOBUF_inst : IOBUF
generic map (
DRIVE => 12, -- максимальный ток выхода в мА
IOSTANDARD => "DEFAULT", -- надо заменить на нужный вам стандарт
SLEW => "SLOW" -- можно оставить или поменять на FAST
)
port map (
O => MDIO_O, -- Это сигнал, который вы принимаете от PHY
IO => MDIO, -- это ваш сигнал к PHY на пине FPGA
I => MDIO_I, -- Это сигнал, который вы отправляете на PHY
T => T -- 3-state enable input, high=input, low=output
);
У вас так? При этом чипскопом надо смотреть MDIO_O и MDIO_I.
В схеме есть PULLUP резистор на пине MDIO?
Можно в UCF файле в описании сигнала MDIO добавить атрибут PULLUP
Например такое описание
Net MDIO LOC = E9(нужный вам пин) | PULLUP;


Что-то не пойму где это все редактируется?
Andrew Su
Цитата(NSergeevich @ Apr 27 2015, 16:44) *
Что-то не пойму где это все редактируется?

Добрый день.
Не обратил внимание, что у Вас Verilog
Тогда
Verilog Instantiation Template
// IOBUF: Single-ended Bi-directional Buffer
// All devices
// Xilinx HDL Libraries Guide, version 14.1
IOBUF #(
.DRIVE(12), // Specify the output drive strength
.IOSTANDARD("DEFAULT"), // Specify the I/O standard
.SLEW("SLOW") // Specify the output slew rate
) IOBUF_inst (
.O(O), // Buffer output
.IO(IO), // Buffer inout port (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input, high=input, low=output
);
Это из файлов описания библиотеки элементов
http://www.xilinx.com/support/documentatio...virtex6_hdl.pdf (стр. 160)
или http://www.xilinx.com/support/documentatio...virtex6_hdl.pdf (стр. 173).
Такие же файлы есть и для других семейств.
NSergeevich
Цитата(Andrew Su @ Apr 28 2015, 11:10) *
Добрый день.
Не обратил внимание, что у Вас Verilog
Тогда
Verilog Instantiation Template
// IOBUF: Single-ended Bi-directional Buffer
// All devices
// Xilinx HDL Libraries Guide, version 14.1
IOBUF #(
.DRIVE(12), // Specify the output drive strength
.IOSTANDARD("DEFAULT"), // Specify the I/O standard
.SLEW("SLOW") // Specify the output slew rate
) IOBUF_inst (
.O(O), // Buffer output
.IO(IO), // Buffer inout port (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input, high=input, low=output
);
Это из файлов описания библиотеки элементов
http://www.xilinx.com/support/documentatio...virtex6_hdl.pdf (стр. 160)
или http://www.xilinx.com/support/documentatio...virtex6_hdl.pdf (стр. 173).
Такие же файлы есть и для других семейств.


вот этот IOBUF компонент в проекте куда копировать? В топ модуль ставить?
Вообще компонет IOBUF нужен только для того, чтобы чипскопом поймать ответ с in/out порта phy ? Так то он на работу проэкта никак не влияет
NSergeevich
Andrew Su спасибо большое! С добавлением IOBUF все получилось! Phy начал отвечать и чипскопом ловлю ответы через IOBUF!!! УРА!!!
Andrew Su
Цитата(NSergeevich @ May 13 2015, 10:25) *
Andrew Su спасибо большое! С добавлением IOBUF все получилось! Phy начал отвечать и чипскопом ловлю ответы через IOBUF!!! УРА!!!

Удачи на нелёгком пути. "О сколько нам открытий чудных готовит просвещенья дух, И опыт, сын ошибок трудных и гений, парадоксов друг..." А.С.Пушкин (и эпиграф к телепрограмме "Очевидное невероятное", если кто помнит)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.