acvarif 0 27 февраля, 2013 Опубликовано 27 февраля, 2013 (изменено) · Жалоба Не понял на счет борды, на этой нет 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 не работает. Изменено 27 февраля, 2013 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 27 февраля, 2013 Опубликовано 27 февраля, 2013 · Жалоба я приводил пример для DP83848, мельком глянул даташит на ks8721 - вроде времянки такие же. http://electronix.ru/forum/index.php?showt...t&p=1128246 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 28 февраля, 2013 Опубликовано 28 февраля, 2013 (изменено) · Жалоба я приводил пример для 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 Как теперь из нее достать каждый отдельный байтик принятого пакета? Изменено 28 февраля, 2013 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 4 марта, 2013 Опубликовано 4 марта, 2013 · Жалоба Спасибо. Разобрался. Данные по приему тут buf_ptr = (alt_u8*)alt_remap_cached ((volatile void*) pkt, 4); Приемы нормальные. Байты все в нужных местах. Но еще остается непонятка. Примерно после 1..2_х минут работы все останавливается. Нет прерываний по приему. При этом программа крутится как положено. Главный цикл работает. Помогает перезагрузка .elf из отладчика либо перезагрузка .sof из программатора. В чем может быть причина остановки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 4 марта, 2013 Опубликовано 4 марта, 2013 · Жалоба В чем может быть причина остановки? C опенкорес эзернетом то же самое бывает когда переполняется внутреннее фифо ядра эзернет. Т.е. если поток большой и не успевает софт обработать пакеты - прием затыкается, пропадают прерывания на прием. Передача при этом работает, софт тоже. Но правда такие случаи с опенкоресом у меня были только когда брейкпоинт ставишь - пакетов наваливается пока в брейке висит и прерывания приема пропадают. А в штатном режиме такого не было, правда потоки у меня не запредельные - 4..8 мбит. Спасала только перезаливка elf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 4 марта, 2013 Опубликовано 4 марта, 2013 (изменено) · Жалоба C опенкорес эзернетом то же самое бывает когда переполняется внутреннее фифо ядра эзернет. Т.е. если поток большой и не успевает софт обработать пакеты - прием затыкается, пропадают прерывания на прием. Передача при этом работает, софт тоже. Но правда такие случаи с опенкоресом у меня были только когда брейкпоинт ставишь - пакетов наваливается пока в брейке висит и прерывания приема пропадают. А в штатном режиме такого не было, правда потоки у меня не запредельные - 4..8 мбит. Спасала только перезаливка elf Да, похоже как будто переполнение фифо tse. Но я выствил фифо на прием 2048, а наприем передаю из компа короткие пакеты 96 байт один раз в 0.3 сек. Вроде не должно при таком объеме фифо затыкаться... Изменено 4 марта, 2013 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 4 марта, 2013 Опубликовано 4 марта, 2013 · Жалоба я тут тоже недавно словил похожий баг с переполнением приемного 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); почему я этот баг раньше не поймал - ума не приложу, м.б. что-то меняли в новых корках Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 5 марта, 2013 Опубликовано 5 марта, 2013 (изменено) · Жалоба Спасибо. Приемник стал работать лучше. Но всеравно иногда затыкался. Полностью избавиться от затыков на приеме помогло изменение конфигурации fifo tse из 32-бит на 8 бит Не врубаюсь какая связь между размерностью фифо TSE и надежностью приемов... Попробую вернуться назад (на 32 бита) и еще раз проверить Изменено 5 марта, 2013 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 5 марта, 2013 Опубликовано 5 марта, 2013 · Жалоба Приемник нормально заработал с 32_битным TSE фифо на процессорах типа S и F. На E нормально работает с 8 битным TSE фифо. Спасибо vadimuzzz. Ваш драйвер TSE работает также неплохо как и драйвер Eth_ocm. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 2 апреля, 2013 Опубликовано 2 апреля, 2013 (изменено) · Жалоба Успешно запустив 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 Изменено 2 апреля, 2013 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 3 апреля, 2013 Опубликовано 3 апреля, 2013 · Жалоба PHY_ADDR у марвела весьма своеобразно задается, путем подключения ног CONFIG к опеделенным LED. судя по схеме борды, адрес выставлен 10000b(0x10) для eth0 и 10001b (0x11) для eth1. на всякий случай, PHY_ID1=0x0141 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 4 апреля, 2013 Опубликовано 4 апреля, 2013 · Жалоба 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 не хватает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 4 апреля, 2013 Опубликовано 4 апреля, 2013 · Жалоба Пока не пойму чего этой 88E1111 не хватает? там не MII, а RGMII. поэтому нужны 2 вещи - правильные констрейны на I/O и сконфигурировать PHY для режима RGMII (добавятся задержки по клокам). поищите, я код конфигурации марвела выкладывал. м.б. даже в этой теме Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 5 апреля, 2013 Опубликовано 5 апреля, 2013 (изменено) · Жалоба там не MII, а RGMII. поэтому нужны 2 вещи - правильные констрейны на I/O и сконфигурировать PHY для режима RGMII (добавятся задержки по клокам). поищите, я код конфигурации марвела выкладывал. м.б. даже в этой теме Понял. Поищу. Попробую режим RGMII. Со стандартным примером от терасик этот режим вроде работает. Правда работает неважно. В пакетах смещение на 8 байт. И в части программы (tse драйвер, инициализация MAC, прием , передача ) там ногу можно сломать столько наворочено. Ваш драйвер намного понятнее. На ksz872bl работает отлично. И тем не менее на боарде DE2-115 есть перемычка Jp1 которая переключает режим работы PHY на MII (ножка 60 Enet0_Cconfig4). Что я собственно и сделал. После загрузки системы и запуска инициализации МАС линк есть. Передача тоже работает (светодиод передатчика 88е1111 мигает). Но в сеть ничего не поступает. Как будто скорость передачи не та... Изменено 5 апреля, 2013 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 5 апреля, 2013 Опубликовано 5 апреля, 2013 · Жалоба И тем не менее на боарде DE2-115 есть перемычка Jp1 которая переключает режим работы PHY на MII (ножка 60 Enet0_Cconfig4). Что я собственно и сделал. После загрузки системы и запуска инициализации МАС линк есть. Передача тоже работает (светодиод передатчика 88е1111 мигает). Но в сеть ничего не поступает. Как будто скорость передачи не та... если используете MII, то надо подать на tx_clk 25MHz, gtx_clk в данном режиме не используется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться