vadimuzzz 0 16 ноября, 2009 Опубликовано 16 ноября, 2009 · Жалоба код можно посмотреть в драйвере, что идет в комплекте с ниос-иде. там есть функции передачи пакета, что-то вроде raw_eth_send и обработчик прерываний на прием. прерывания на передачу не особо нужны. я брал код оттуда и выбрасывал все лишнее. все, что нужно есть в описании на контроллер sgdma в 5 томе квартус-хендбука. ну и на PHY почитать описание, какие там регистры, дефолтные установки. для начала - проинициализировать PHY. функция инициализации, что идет с драйвером поддерживает несколько микросхем, если там нет вашей, то сделать по аналогии. по памяти не скажу какие точно файлы надо ковырять, надо поискать папки типа triple_speed_ethernet, завтра на работе уточню. upd: нашел сорцы, правда не свежие, нет реализации tse_mac_raw_send. исходники родного драйвера лежат в ip/triple_speed_ethernet/lib _____.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 17 ноября, 2009 Опубликовано 17 ноября, 2009 · Жалоба проинициализировать PHY. функция инициализации, что идет с драйвером поддерживает несколько микросхем, если там нет вашей, то сделать по аналогии. Хотел уточнить насчет PHY. использую marvell 88E1111, она идет по дефолту в tse. документации по ней нет у меня. вот с ее инициализацией парюсь. если сделать вот так, то по идее она должна проинициализироваться (все выдрал из triple_speed_ethernet.c)?: int PhyDevInit(){ alt_tse_phy_profile MV88E1111 = {"Marvell 88E1111", /* Marvell 88E1111 */ MV88E1111_OUI, /* OUI */ MV88E1111_MODEL, /* Vender Model Number */ MV88E1111_REV, /* Model Revision Number */ 0x11, /* Location of Status Register */ 14, /* Location of Speed Status */ 13, /* Location of Duplex Status */ 10, /* Location of Link Status */ &marvell_phy_cfg, /* Function pointer to configure Marvell PHY */ }; alt_tse_phy_add_profile(&MV88E1111); return 0;//success } int marvell_phy_cfg(np_tse_mac *pmac) { alt_u16 dat; /* If there is no link yet, we enable auto crossover and reset the PHY */ if((IORD(&pmac->mdio1.STATUS, 0) & PCS_ST_an_done) == 0) { //tse_dprintf(5, "MARVELL : Enabling auto crossover\n"); IOWR(&pmac->mdio1.CONTROL, 16, 0x0078); //tse_dprintf(5, "MARVELL : PHY reset\n"); dat = IORD(&pmac->mdio1.CONTROL, 0); IOWR(&pmac->mdio1.CONTROL, 0, dat | (1<<15)); } return 0; } int alt_tse_phy_add_profile(alt_tse_phy_profile *phy){ alt_32 i; /* search PHY profile for same ID */ for(i = 0; i < phy_profile_count; i++) { if(pphy_profiles->oui == phy->oui && pphy_profiles->model_number == phy->model_number) { //tse_dprintf(4, "WARNING : PHY OUI 0x%06x, PHY Model Number 0x%02x already exist in PHY profile\n", (int) phy->oui, phy->model_number); //tse_dprintf(4, "In case of same PHY OUI and PHY Model Number in profile, first added PHY setting will be used\n"); } } /* Allocate memory space to store the profile */ pphy_profiles[phy_profile_count] = (alt_tse_phy_profile *) malloc(sizeof(alt_tse_phy_profile)); if(!pphy_profiles[phy_profile_count]) { //tse_dprintf(1, "ERROR : Unable to allocate memory for pphy_profile[%d]\n", phy_profile_count); return -1; } /* Store PHY information */ *pphy_profiles[phy_profile_count] = *phy; strcpy(pphy_profiles[phy_profile_count]->name, phy->name); phy_profile_count++; return phy_profile_count - 1; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 18 ноября, 2009 Опубликовано 18 ноября, 2009 · Жалоба а, марвел. гадкая конторка, даташиты под NDA... скорее всего должны пройти дефолтные настройки, фактически там надо только пару контрольных регистров зашить. включить там автоопределение всего (линк, скорость, полярность) и сбросить трансивер. вроде это и делается. потом нужно воткнуть кабель и почитать статусные регистры. ну еще имеет смысл начать с регистра, где лежит кодовый номер микросхемы (ее тип, ревизия). основные регистры (их всего штук 6) у всех PHY одинаковые, это стандарт. посмотрите в даташите на какой-нибудь аналог, м.б. микреловский, они даташиты дают. вот с vendor specific регистрами - беда, но основные фичи должны быть доступны и без них. вот уж не знаю на кой икс альтера ставит такие микросхемы. да, всякие там структуры, тоже не нужны, я константы тупо забил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 18 ноября, 2009 Опубликовано 18 ноября, 2009 · Жалоба а, марвел. гадкая конторка, даташиты под NDA... скорее всего должны пройти дефолтные настройки, фактически там надо только пару контрольных регистров зашить. включить там автоопределение всего (линк, скорость, полярность) и сбросить трансивер. вроде это и делается. потом нужно воткнуть кабель и почитать статусные регистры. ну еще имеет смысл начать с регистра, где лежит кодовый номер микросхемы (ее тип, ревизия). основные регистры (их всего штук 6) у всех PHY одинаковые, это стандарт. посмотрите в даташите на какой-нибудь аналог, м.б. микреловский, они даташиты дают. вот с vendor specific регистрами - беда, но основные фичи должны быть доступны и без них. вот уж не знаю на кой икс альтера ставит такие микросхемы. да, всякие там структуры, тоже не нужны, я константы тупо забил. То есть для инициализации нужно воспользоваться MDIO? Если так, то manual по cIII дает распиновку только на ENET_MDC ENET_MDIO и ENET_MDIO как вход для nios'a. как тогда что-либо записать в PHY или он типа bidir? Из sources получается доступ можно организовать таким образом: IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,PHY,0x01) где PHY - это адрес MDIO или как пишет manual cIII (The MDIO address of the PHY device is configured to the value 18 (0x12))? а регистры расписаны вроде в ug_ethernet: Control Status PHY_ID1 PHY ID2 Adv RemAdv А вообще внешне как-нибудь проявляется инициализация PHY, может led загорится или необязательно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 18 ноября, 2009 Опубликовано 18 ноября, 2009 · Жалоба ENET_MDIO - двунаправленная, там только к ниосу буфер прикрутить надо внешний(у самого ниоса будут mdio_input,mdio_output и mdio_oen), в мануале есть картинка. PHY в IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,PHY,0x01) это адрес трансивера, их м.б. несколько на шине. можно тупо в цикле прогнать от 0 до 31 и читать регистр PHY_ID1. если не 0 - значит адрес тот. те регистры, что вы написали - это и есть стандартные, про которые я выше говорил, они есть у любого PHY. кроме них еще есть фирменные "фичи", но в случае марвела это, видимо, страшная тайна :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 18 ноября, 2009 Опубликовано 18 ноября, 2009 (изменено) · Жалоба ENET_MDIO - двунаправленная, там только к ниосу буфер прикрутить надо внешний(у самого ниоса будут mdio_input,mdio_output и mdio_oen), в мануале есть картинка. PHY в IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,PHY,0x01) это адрес трансивера, их м.б. несколько на шине. можно тупо в цикле прогнать от 0 до 31 и читать регистр PHY_ID1. если не 0 - значит адрес тот. те регистры, что вы написали - это и есть стандартные, про которые я выше говорил, они есть у любого PHY. кроме них еще есть фирменные "фичи", но в случае марвела это, видимо, страшная тайна :) Извините меня за наскальные рисунки, но так я быстрей разберусь. Что за элементы в виде треугольников - это alt_buf(его можно использовать?) и правильная ли задумка внешнего буффера или это отдельный элемент, не совсем пойму? и еще вопрос. что такое timing constraints и нужны ли они в проекте, а то начитаюсь про них на alteraforum.com вот и думаю... Изменено 18 ноября, 2009 пользователем dim99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 18 ноября, 2009 Опубликовано 18 ноября, 2009 · Жалоба Извините меня за наскальные рисунки, но так я быстрей разберусь. Что за элементы в виде треугольников - это alt_buf(его можно использовать?) и правильная ли задумка внешнего буффера или это отдельный элемент, не совсем пойму? tri-state буфер. megafunctions/gates/bus_tri и еще вопрос. что такое timing constraints и нужны ли они в проекте, а то начитаюсь про них на alteraforum.com вот и думаю... временные ограничения, в которые фиттер должен вписать проект. как минимум надо задать ограничения по частоте для всех клоков. частоты для 3-го циклона здесь невелики, но если кристалл почти заполнен, возникнут проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reanimatorr 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Доброго дня! Есть измерительные платы с ПЛИС, работающие в термостате в диапазоне от +50 до +100 градусов цельсия. Пока все сделано на "рассыпухе" - измеритель на ПЛИС, МК extended диапазона, CAN интерфейс наружу, внешняя коробочка с Ethernet к компу. Есть желание все эти функции запихнуть внутрь ПЛИС, запустив там NIOS и добавив Ethernet PHY. Поискав немного компоненты extended диапазона понял что это непросто... Имеющие опыт реализации подобного, поскажите пожалуйста SRAM (или другой RAM для NIOS) и Ethernet PHY extended диапазона температур.. (трансформаторы эзернета вроде при 100 живут нормально).. требования к скорости обмена отсутствуют. Ethernet хочется из-за развязки, длины и удобства адресации (IP). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба Поискав немного компоненты extended диапазона понял что это непросто... непросто, но не невозможно :) ethernet PHY: http://www.national.com/pf/DP/DP83848VYB.html#Overview SRAM: http://www.issi.com/products-extended-temperature-sdram.htm FPGA: http://www.altera.com/products/devices/cyc...-mkts-auto.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба Появились первые интересные результаты работы с ethernet. В общем после hard reset PHY начинает в режиме auto-negotiation обмениваться пакетами с PC. точнее сказать, PHY принимает пакеты от PC. Для обеспечения работы с PHY в свойствах PC lan adapter выставил full duplex и 100 mbit. После автоопределения PHY начинает моргать показывая. что работает именно в этом режиме - 100 duplex, как раз то, что поддерживает на данный проект мой fpga проект. инициализацию PHY проводить не могу, потому xj не знаю по каким регистрам чего находится, вот хочу сегодня посмотреть lgngibn на какую-нибудь Gigabbit микросхему. смотрел lan91c1111 - но она 100 mbit и номера битов в контрольном регистре для выставления скорости явно отличаются от marvell PHY. В общем подправил код для отправки с tse_mac driver и пытаюсь отправить пакет через tse_mac_raw_send. смотрю в wireshark - приходят пакеты с правильным количеством байтов, но заполненные нулями и определенными как FC (failed) естественно, что надо бы еще 1. определить регистры PHY (пока не знаю какие) - доступ через MDIO настроен. 2. Проверить TSE_MAC надо, вдруг где недосмотрел 3. mem_to_stream от sgdma_tx вроде правильно формирует дескриптор, адрес для данных правильно выставлен. Какие могут варианты неправильно формирования или подключения чего, что так пакеты передаются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reanimatorr 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба непросто, но не невозможно :) Спасибо, эти компоненты я тоже находил, есть проблемы в цене и доставабельности у National. я создал отдельную тему по своему вопросу - http://electronix.ru/forum/index.php?showtopic=69863 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 22 ноября, 2009 Опубликовано 22 ноября, 2009 · Жалоба В общем подправил код для отправки с tse_mac driver и пытаюсь отправить пакет через tse_mac_raw_send. смотрю в wireshark - приходят пакеты с правильным количеством байтов, но заполненные нулями и определенными как FC (failed) естественно, что надо бы еще 1. определить регистры PHY (пока не знаю какие) - доступ через MDIO настроен. 2. Проверить TSE_MAC надо, вдруг где недосмотрел 3. mem_to_stream от sgdma_tx вроде правильно формирует дескриптор, адрес для данных правильно выставлен. Какие могут варианты неправильно формирования или подключения чего, что так пакеты передаются? начать лучше с према пакета, увидите какую структуру имеет правильный пакет. а так навсуидку 2 варианта. PHY может считать/не считать CRC; может добивать/не добивать пакет нулями до нужной длины. выкладывайте дамп, посмотрим. да, wireshark тип ошибки указывает. Спасибо, эти компоненты я тоже находил, есть проблемы в цене и доставабельности у National. я создал отдельную тему по своему вопросу - http://electronix.ru/forum/index.php?showtopic=69863 еще http://www.micrel.com/applications/auto/Et..._Automotive.pdf http://www.smsc-ais.com/AIS/content/view/843/810 hint: ищите по automotive ethernet Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба Где бы найти описание регистров Marvell 88e1111, посмотрел другие гигабитные микросхемы - совсем другие адреса регистров по сравнению с тем lan91c111 и intel 82575. или какую другую микросхему посмотреть, у которой будет схожее расположение адресов регистров для контрольного и статусного особенно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба гляньте в аттаче. судя по коду, регистры такие же как у 88e1000 e1000_defines.h.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба Все равно пока не пойму толком. Доступ у меня только из-под MDIO осуществляется и через них надо настроить PHY. Нашел PHYWORX 10/100/1000 Ethernet PHY Daughter Board Reference Guide и если ему верить, то MDIO Registers The PHY provides 32 internal management registers that can be accessed using the Management Interface (MDIO). The Management Device Address of the PHY is configured to the value 18 (0x12). Table 5: MDIO Registers Description Register Name Description (Bits) Type Reset Value 0 Control 15: 1=PHY Reset, 0=normal operation. (SC) 14: Loopback. 1=enable loopback, 0=normal operation 13: Speed Selection (together with Bit 6): 6:13 = "11": reserved = "10": 1000 = "01": 100 = "00": 10 12: Enable Auto-Negotiation (only enables the control state machine, does not trigger the auto negotiation). If disabled (0), bits 6,8,13 define the operation. 11: Power down (1) or normal operation (0) 10: Isolate PHY from GMII/MII (if 1) 9: Restart Autonegotiation. If set (1) will restart the autonegotiation process. 8: set full duplex mode (1) or half-duplex (0) 7: Enable collision test signal (1) 6: Speed Selection (see Bit 13 above). 5:0 reserved. Write 0, ignore on read т.е. обратившись к 0 регистру через IORD_ALTERA_TSEMAC_MDIO(TSE_MAC_BASE,0/*mdio_addr0*/,0x0); я могу достучаться до контрольного регистра и настроить вышеприведенные параметры. Это успешно работает, потому что считал PHY_id =0x0141 как и про reference guide выше совпадает. Смотрю в E1000_defines.h: /* PHY 1000 MII Register/Bit Definitions */ /* PHY Registers defined by IEEE */ #define PHY_CONTROL 0x00 /* Control Register */ #define PHY_STATUS 0x01 /* Status Register */ #define PHY_ID1 0x02 /* Phy Id Reg (word 1) */ #define PHY_ID2 0x03 /* Phy Id Reg (word 2) */ #define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */ #define PHY_LP_ABILITY 0x05 /* Link Partner Ability (Base Page) */ #define PHY_1000T_CTRL 0x09 /* 1000Base-T Control Reg */ #define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Reg */ Все то же самое. включить там автоопределение всего (линк, скорость, полярность) и сбросить трансивер а где взять полярность или ее настройка не критична? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться