реклама на сайте
подробности

 
 
26 страниц V  « < 18 19 20 21 22 > »   
Reply to this topicStart new topic
> Ethernet + Cyclone + Nios
Acvarif
сообщение Feb 27 2013, 07:18
Сообщение #286


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(vadimuzzz @ Feb 27 2013, 10:01) *
Не понял на счет борды, на этой нет eth:
http://www.terasic.com.tw/cgi-bin/page/archive.pl?No=593

уточните спеки системы, особенно насчет PHY и шины к ней

Подцепил к ней это http://starterkit.ru/html/index.php?name=s...=view&id=19 Режим MII Работает нормально, даже внешнего питания не требует (от USB) Вот только приемник TSE не работает.
Прикрепленное изображение


Сообщение отредактировал Acvarif - Feb 27 2013, 09:14
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Feb 27 2013, 09:30
Сообщение #287


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



я приводил пример для DP83848, мельком глянул даташит на ks8721 - вроде времянки такие же.

http://electronix.ru/forum/index.php?showt...t&p=1128246
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Feb 28 2013, 08:24
Сообщение #288


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(vadimuzzz @ Feb 27 2013, 13:30) *
я приводил пример для DP83848, мельком глянул даташит на ks8721 - вроде времянки такие же.

http://electronix.ru/forum/index.php?showt...t&p=1128246

Спасибо.
Приемник заработал. Но принимает только один раз. Для повторного приема необходимо перезагрузить .sof
Не врубаюсь в чем хитрость..
Стоп..
Кажется заработало. Глубина FIFO приемника была маленькая.
Теперь нужно проверить как правильно принимаются байты. В приемнике eth_ocm нужный байт находился в массиве buf_ptr
Код
...
        buf_ptr = (alt_u8*)alt_remap_cached ((volatile void*) pkt, 4);
        buf_ptr = (alt_u8*)(((unsigned int)buf_ptr) + ETHHDR_BIAS);
        IOWR_ETH_OCM_DESC_PTR(ETH_OCM_0_BASE, 1, (alt_u32)buf_ptr);
...

Подскажите пожалуйста как для TSE поступать. На приемник передается 96 байт известного содержимого.
Где будут находиться данные по приему (TSE)?
Код
    if((IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_RX_0_BASE) & ALTERA_AVALON_SGDMA_STATUS_CHAIN_COMPLETED_MSK ))
    {
        tse_mac_aRxRead(currdescriptor_ptr);
     }

Принимающая функция tse_mac_aRxRead Как теперь из нее достать каждый отдельный байтик принятого пакета?

Сообщение отредактировал Acvarif - Feb 28 2013, 11:52
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Mar 4 2013, 09:17
Сообщение #289


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Спасибо.
Разобрался.
Данные по приему тут buf_ptr = (alt_u8*)alt_remap_cached ((volatile void*) pkt, 4);
Приемы нормальные. Байты все в нужных местах.
Но еще остается непонятка. Примерно после 1..2_х минут работы все останавливается. Нет прерываний по приему.
При этом программа крутится как положено. Главный цикл работает.
Помогает перезагрузка .elf из отладчика либо перезагрузка .sof из программатора.
В чем может быть причина остановки?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Mar 4 2013, 09:27
Сообщение #290


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Acvarif @ Mar 4 2013, 13:17) *
В чем может быть причина остановки?


C опенкорес эзернетом то же самое бывает когда переполняется внутреннее фифо ядра эзернет. Т.е. если поток большой и не успевает софт обработать пакеты - прием затыкается, пропадают прерывания на прием. Передача при этом работает, софт тоже. Но правда такие случаи с опенкоресом у меня были только когда брейкпоинт ставишь - пакетов наваливается пока в брейке висит и прерывания приема пропадают. А в штатном режиме такого не было, правда потоки у меня не запредельные - 4..8 мбит. Спасала только перезаливка elf
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Mar 4 2013, 09:36
Сообщение #291


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(alexPec @ Mar 4 2013, 12:27) *
C опенкорес эзернетом то же самое бывает когда переполняется внутреннее фифо ядра эзернет. Т.е. если поток большой и не успевает софт обработать пакеты - прием затыкается, пропадают прерывания на прием. Передача при этом работает, софт тоже. Но правда такие случаи с опенкоресом у меня были только когда брейкпоинт ставишь - пакетов наваливается пока в брейке висит и прерывания приема пропадают. А в штатном режиме такого не было, правда потоки у меня не запредельные - 4..8 мбит. Спасала только перезаливка elf

Да, похоже как будто переполнение фифо tse. Но я выствил фифо на прием 2048, а наприем передаю из компа короткие пакеты 96 байт один раз в 0.3 сек. Вроде не должно при таком объеме фифо затыкаться...

Сообщение отредактировал Acvarif - Mar 4 2013, 09:37
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Mar 4 2013, 09:48
Сообщение #292


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



я тут тоже недавно словил похожий баг с переполнением приемного fifo. по какой-то причине первый пакет мог (не выяснил, при каких условиях) вызвать переполнение fifo. хотя в штатном режиме сбойный пакет просто должен быть отброшен. я покопался в доках и нашел ошибку в своем коде, которая тянется с хз каких времен. суть: если взводится бит ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK в командном регистре, то RX_SECTION_FULL должен быть установлен в 0, т.к. иначе опция проверки пакетов не работает.
сейчас код инициализации MAC у меня выглядит так:
Код
    IOWR_ALTERA_TSEMAC_FRM_LENGTH(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, ALTERA_TSE_MAC_MAX_FRAME_LENGTH);
    IOWR_ALTERA_TSEMAC_RX_ALMOST_EMPTY(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 8);
    IOWR_ALTERA_TSEMAC_RX_ALMOST_FULL(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 8);
    IOWR_ALTERA_TSEMAC_TX_ALMOST_EMPTY(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 8);
    IOWR_ALTERA_TSEMAC_TX_ALMOST_FULL(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE,  3);
    IOWR_ALTERA_TSEMAC_TX_SECTION_EMPTY(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, ETH_0_TRIPLE_SPEED_ETHERNET_0_TRANSMIT_FIFO_DEPTH - 16);
    IOWR_ALTERA_TSEMAC_TX_SECTION_FULL(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE,  0);
    IOWR_ALTERA_TSEMAC_RX_SECTION_EMPTY(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, ETH_0_TRIPLE_SPEED_ETHERNET_0_RECEIVE_FIFO_DEPTH - 16);
    IOWR_ALTERA_TSEMAC_RX_SECTION_FULL(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE,  0);
    IOWR_ALTERA_TSEMAC_TX_CMD_STAT(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE,0);
    IOWR_ALTERA_TSEMAC_RX_CMD_STAT(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE,0);
    IOWR_ALTERA_TSEMAC_MAC_0(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, MY_MAC_ADDR.mac_addr.mac_hi);
    IOWR_ALTERA_TSEMAC_MAC_1(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, MY_MAC_ADDR.mac_addr.mac_lo);
    IOWR_ALTERA_TSEMAC_CMD_CONFIG(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE,   ALTERA_TSEMAC_CMD_TX_ENA_MSK |
                                                                        ALTERA_TSEMAC_CMD_RX_ENA_MSK |
                                                                        ALTERA_TSEMAC_CMD_TX_ADDR_INS_MSK |
                                                                        ALTERA_TSEMAC_CMD_RX_ERR_DISC_MSK |
                                                                        ALTERA_TSEMAC_CMD_PAD_EN_MSK);

почему я этот баг раньше не поймал - ума не приложу, м.б. что-то меняли в новых корках
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Mar 5 2013, 08:51
Сообщение #293


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Спасибо. Приемник стал работать лучше. Но всеравно иногда затыкался.
Полностью избавиться от затыков на приеме помогло изменение конфигурации fifo tse из 32-бит на 8 бит
Прикрепленное изображение
Прикрепленное изображение

Не врубаюсь какая связь между размерностью фифо TSE и надежностью приемов...
Попробую вернуться назад (на 32 бита) и еще раз проверить

Сообщение отредактировал Acvarif - Mar 5 2013, 16:27
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Mar 5 2013, 14:12
Сообщение #294


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Приемник нормально заработал с 32_битным TSE фифо на процессорах типа S и F. На E нормально работает с 8 битным TSE фифо.
Спасибо vadimuzzz. Ваш драйвер TSE работает также неплохо как и драйвер Eth_ocm.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Apr 2 2013, 13:46
Сообщение #295


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Успешно запустив Ethernet на De0Nano, появилсь необходимость использовать ethernet драйвер от vadimuzzz на DE2-115 где стоит phy 88E1111. Но не получается. Очевидно потому, что неизвестен адрес PHY. Для Микрела (ksz872bl) он был #define PHY 0x1. Если кто сталкивался подскажите пожалуйста какой установить #define PHY для 88E1111 (De2-115)?
Попробую автопределение
Код
for (t=0;t<33;t++) {
    IOWR_ALTERA_TSEMAC_MDIO_ADDR0(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, t);
    alt_printf("Probing PHY at address %x ...\n", t);
    r = IORD_ALTERA_TSEMAC_MDIO(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID1);
    if (r == 0x22)/*KSZ9021*/{
        alt_printf("PHY address:%x\n", t);
        alt_printf("PHY_ID1:%x\n", r);
        alt_printf("PHY_ID2:%x\n", IORD_ALTERA_TSEMAC_MDIO(ETH_0_TRIPLE_SPEED_ETHERNET_0_BASE, 0, ALTERA_TSEMAC_PHY_ADDR_PHY_ID2));
        break;
    }
}

Подскажите please ID 88E1111

Сообщение отредактировал Acvarif - Apr 2 2013, 16:09
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 3 2013, 11:28
Сообщение #296


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



PHY_ADDR у марвела весьма своеобразно задается, путем подключения ног CONFIG к опеделенным LED. судя по схеме борды, адрес выставлен 10000b(0x10) для eth0 и 10001b (0x11) для eth1. на всякий случай, PHY_ID1=0x0141
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Apr 4 2013, 13:23
Сообщение #297


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(vadimuzzz @ Apr 3 2013, 14:28) *
PHY_ADDR у марвела весьма своеобразно задается, путем подключения ног CONFIG к опеделенным LED. судя по схеме борды, адрес выставлен 10000b(0x10) для eth0 и 10001b (0x11) для eth1. на всякий случай, PHY_ID1=0x0141

Спасибо.
PHY_ADDR определился как 0x10. Поскольку на передачу 88E1111 требует внешнюю тактовую, то подал на вход gtx_clock phy 125мГц. Светодиод передачи на боарде мигает, тоесть функция tse_mac_raw_send((char*)ethmass_ptr, 1168) работает - в PHY tse что-то загружает. Внешне вроде передатчик работает. Но на сниффере пусто.

Вроде инициализация tse никак не должна отличаться для ksz872 и для 88e1111? Да и подключение tse к PHY для режима MII должно быть одинаковое для ksz872 и 88e1111 кроме внешнй частоты gtx_clock phy 125мГц.

Пока не пойму чего этой 88E1111 не хватает?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 4 2013, 15:36
Сообщение #298


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Acvarif @ Apr 4 2013, 20:23) *
Пока не пойму чего этой 88E1111 не хватает?

там не MII, а RGMII. поэтому нужны 2 вещи - правильные констрейны на I/O и сконфигурировать PHY для режима RGMII (добавятся задержки по клокам). поищите, я код конфигурации марвела выкладывал. м.б. даже в этой теме
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Apr 5 2013, 06:57
Сообщение #299


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(vadimuzzz @ Apr 4 2013, 18:36) *
там не MII, а RGMII. поэтому нужны 2 вещи - правильные констрейны на I/O и сконфигурировать PHY для режима RGMII (добавятся задержки по клокам). поищите, я код конфигурации марвела выкладывал. м.б. даже в этой теме

Понял. Поищу. Попробую режим RGMII. Со стандартным примером от терасик этот режим вроде работает. Правда работает неважно. В пакетах смещение на 8 байт. И в части программы (tse драйвер, инициализация MAC, прием , передача ) там ногу можно сломать столько наворочено. Ваш драйвер намного понятнее. На ksz872bl работает отлично.
И тем не менее на боарде DE2-115 есть перемычка Jp1 которая переключает режим работы PHY на MII (ножка 60 Enet0_Cconfig4). Что я собственно и сделал. После загрузки системы и запуска инициализации МАС линк есть. Передача тоже работает (светодиод передатчика 88е1111 мигает). Но в сеть ничего не поступает. Как будто скорость передачи не та...

Сообщение отредактировал Acvarif - Apr 5 2013, 07:45
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 5 2013, 08:52
Сообщение #300


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Acvarif @ Apr 5 2013, 13:57) *
И тем не менее на боарде DE2-115 есть перемычка Jp1 которая переключает режим работы PHY на MII (ножка 60 Enet0_Cconfig4). Что я собственно и сделал. После загрузки системы и запуска инициализации МАС линк есть. Передача тоже работает (светодиод передатчика 88е1111 мигает). Но в сеть ничего не поступает. Как будто скорость передачи не та...

если используете MII, то надо подать на tx_clk 25MHz, gtx_clk в данном режиме не используется
Go to the top of the page
 
+Quote Post

26 страниц V  « < 18 19 20 21 22 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 07:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016