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

covsh

Участник
  • Постов

    26
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о covsh

  • Звание
    Участник
    Участник

Контакты

  • ICQ
    Array

Посетители профиля

1 227 просмотров профиля
  1. Здравствуйте! Возникла проблема с реализации схемы. На плате стоят два фреймера xrt91l31. Один подключен в мультиплексору, прием и передача в норме. Дальше мы принятый поток с первого модуля заворачиваем внутри ПЛИС на второй модуль, что бы принять его в кольце (см. рисунок) И тут возникают проблемы: приемный поток искажается, сигналы FRAMEPULSE сбиваются. Пробовали разные настройки фреймеров, меняли PIO_CTRL, LOOPTIME все равно ошибки. Возникает вопрос что так передавать STM на второй модуль нельзя, но непонятно почему. Подскажите где ошибка?
  2. на другом конце линка нету, все подключено кабелем. разобрался в чем было дело. TSE не делал (не делал правильный?) ресет трансивера. решил это с помошь экспорта сигнала gxb_pwrdn (из свойств TSE) и дерьганья его через ниос
  3. здравствуйте! использую отладочную плату Cyclone IV GX FPGA Development Kit и Terasic SFP HSMC Board. SFP модуль оптический, наклейка на нем NEC (шел в комплекте с SpectralWave U-Node, сам модуль рабочий). Quartus 11.1 SP2 Не могу заставить работать SFP модуль в связке с Triple Speed Ethernet. TSE сконфигурирован как 10/100/1000 Ethernet MAC with 1000BASE-X/SGMII PCS c Use Transceiver block GXB. две диф пары идут на модуль. стандарт 1.5-V PCML. TX_Disable у SFP естественно в нуле. сингналы реконфигурации идут на altgx_reconfig. .gxb_cal_blk_clk_to_the_tse_mac (clkin_125m_p), //125MHz диф клок с генератора Cyclone Development Kit .reconfig_busy_to_the_tse_mac (reconfig_busy_to_the_tse_mac), .reconfig_clk_to_the_tse_mac (pll_50m), .reconfig_togxb_to_the_tse_mac (reconfig_togxb_to_the_tse_mac), .reconfig_fromgxb_from_the_tse_mac (reconfig_fromgxb_from_the_tse_mac), .ref_clk_to_the_tse_mac (clkin_125m_p), //125MHz диф клок с генератора Cyclone Development Kit код инициализации в Nios IOWR_32DIRECT(TSE_MAC_BASE,TSE_CMD_CONFIG,0x2000); //reset TSE MAC while((IORD_32DIRECT(TSE_MAC_BASE, TSE_CMD_CONFIG) & 0x2000)) IOWR_32DIRECT(TSE_MAC_BASE, TSE_PCS_CONTROL, 0x00008000); //PSC RESET while((IORD_32DIRECT(TSE_MAC_BASE, TSE_PCS_CONTROL) & 0x8000)); IOWR_32DIRECT(TSE_MAC_BASE,TSE_CMD_CONFIG,0x0100013B); //TX_ENA|RX_ENA|ETH_SPEED|PROMIS_EN|PAD_EN|PAUSE_IGNORE IOWR_32DIRECT(TSE_MAC_BASE, TSE_PCS_IF_MODE, 0x00000000); //1000Base-X MODE IOWR_32DIRECT(TSE_MAC_BASE, TSE_PCS_DEV_ABILITY, 0x00000020); //PCS Dev_Ability Full Duplex Enable IOWR_32DIRECT(TSE_MAC_BASE, TSE_PCS_CONTROL, 0x00001200); //RESTART_AUTO_NEGOTIATION | AUTO_NEGOTIATION_ENABLE при этом в PCS Status Register регистр LINK_STATUS в 0, т.е. линка нет. ломаю голову уже вторую неделю, не пойму в чем дело.
  4. спасибо за наводку, но это не помогло. данные биты, как я понимаю, устанавливают выравнивание всего пакета. у меня ситуация несколько другая. сделал пару иллюстраций. итак, сначала на массив накладывает вот такая структура eth_frame_t *frame = (void*) packet; далее, на поле alt_u8 data[] накладывается новая структура ARP сообщения arp_message arp_message_t *msg = (void*)(frame->data); что должно быть и что получается я проиллюстрировал на рисунке видно, что появляется сдвижка при наложении 32 битного числа, со всеми остальными типами все в порядке может кто-нибудь подкинет идею почему так происходит?
  5. разобрался в странном поведении своей программы. причина заключалась в том что на этапе инициализации в процедуре MAC_init() прописывался один мак адрес IOWR_ALTERA_TSEMAC_MAC_0(TRIPLE_SPEED_ETHERNET_0_BASE,((int)(0x00) | (int)(0x07 << 8) | (int)(0xAB << 16) | (int)(0xF0 << 24))); IOWR_ALTERA_TSEMAC_MAC_1(TRIPLE_SPEED_ETHERNET_0_BASE,(((int)(0x0D) | (int)(0xBA << 8)) & 0xFFFF)); а на этапе формирование ethernet пакета присваивал совершенно другие мак адреса. исправил на нужные - все заработало. есть еще одна проблема, причины которой я не могу понять в программе есть структура arp сообщения typedef struct arp_message { alt_u16 hw_type; // протокол канального уровня (Ethernet) alt_u16 proto_type; // протокол сетевого уровня (IP) alt_u8 hw_addr_len; // длина MAC-адреса =6 alt_u8 proto_addr_len; // длина IP-адреса =4 alt_u16 type; // тип сообщения (запрос/ответ) alt_u8 mac_addr_from[6]; // MAC-адрес отправителя alt_u32 ip_addr_from; // IP-адрес отправителя alt_u8 mac_addr_to[6]; // MAC-адрес получателя, нули если неизвестен alt_u32 ip_addr_to; // IP-адрес получателя }arp_message_t; когда делаю такое присваивание arp_message_t *msg = (void*)(frame->data); то поле типа alt_u32 ip_addr_from присваивает переменной со сдвижкой в 2 байта, т.е. захватывается кускок mac_addr_to. аналочино и второе поле alt_u32 ip_addr_to присваивает с ошибкой. пробовал делать выравнивание структуре вот так typedef struct arp_message { alt_u16 hw_type; // протокол канального уровня (Ethernet) alt_u16 proto_type; // протокол сетевого уровня (IP) alt_u8 hw_addr_len; // длина MAC-адреса =6 alt_u8 proto_addr_len; // длина IP-адреса =4 alt_u16 type; // тип сообщения (запрос/ответ) alt_u8 mac_addr_from[6]; // MAC-адрес отправителя alt_u32 ip_addr_from; // IP-адрес отправителя alt_u8 mac_addr_to[6]; // MAC-адрес получателя, нули если неизвестен alt_u32 ip_addr_to; // IP-адрес получателя }arp_message_t __attribute__ ((aligned (4))); убирать выравнивание массива volatile char pkt[1562]; ничего не помогает. написал вместо alt_u32 alt_u8[4] работаю пока так. как избавиться от какого явления? исходник прикрепляю. там работающий arp+ping+ чуть udp arp_ping_udp.rar
  6. может кто сталкивался, почему после установки 10.1 sp1 слетела лицензия на triple speed ethernet? поделитесь рабочей :)
  7. Здравствуйте! Сначала хочу поблагодарить тов. vadimuzzz за исходник который очень помог при старте. Решил приделать к проекту vadimuzzz'a свой обработчик пакетов arp+ping Как раз появилась очень хорошая статья по этому поводу. Вылез большой глюк. Суть проблемы в следующем: прием пакетов начал работать очень странно. Arp пакет принимает корректно, далее программа на него отвечает (все вижу по wireshark) Следующим идет ping запрос и вот тут косяк – обработчик прерывания перестает вызываться (не останавливается по контрольной точке в самом начале tse_sgdmaRx_isr). Оригинальный проект работает без нареканий. Прерывания есть по приему каждого пакета. Прошу помощи у сообщества. Исходники прилагаю. ps пробовал на 9.1 sp2, оптимизацию всю отключил. на 10.1 sp1 поведение аналогичное eht_problem.rar
  8. при вникании оказалось что все ошибки идут из-за отсутствия определения ALT_INICHE в eth_ocm.h попытки определить его в ручную дают еще более серьезные ошибки :) однако, как только проект создается с поддержкой MicroC/OS-II RTOS и NicheStack TCP/IP Stack, компиляция проходит успешно. видимо, либо где-то есть возможность конфигурирования либо эта штука сейчас работает только совместно с NicheStack TCP/IP Stack. vadimuzzz, спасибо за ответ. начну разбираться с TSE. тем более, здесь много полезных исходников. остался вопрос только с лицензированием TSE. если кто может помочь, напишите в личку :)
  9. Уважаемый, vadimuzzz Я начинающий в этом вопросе, прошу понимания у знатоков :) Последовательность моих действий: Я использую Quartus II 9.1 sp2. Использую компонент eth_ocm_91_0_beta.zip установил модуль в “C:\altera\91\ip\user_components\eth_ocm” в соответствии с инструкцией. Далее, создал систему в SOPC После этого, перехожу в NIOS и создаю простой проект на основе шаблона «Hello World» При компиляции возникает ошибка. nios2-elf-gcc -xc -MP -MMD -c -I. -I./drivers/inc -I./HAL/inc -DSYSTEM_BUS_WIDTH=32 -D__hal__ -pipe -DALT_NO_INSTRUCTION_EMULATION -DALT_SINGLE_THREADED -DALTERA_TRIPLE_SPEED_MAC -DETH_OCM_PHY_MAX_PROFILES=3 -DETH_OCM_PHY_SUPPORT_DP83848C -DETH_OCM_PHY_SUPPORT_MVL88E1111 -O0 -g -Wall -mno-hw-div -mhw-mul -mno-hw-mulx -o obj/drivers/src/eth_ocm_phy.o c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c: In function `eth_ocm_phy_init': c:/work/new_nios/Nios_c3_new/software/hello_bsp/drivers/src/eth_ocm_phy.c:160: error: structure has no member named `phyadd' Чего не хватает в моем проекте? Что идейно я упустил? вы имели ввиду вот это? http://electronix.ru/forum/index.php?s=&am...st&p=687221
  10. было бы очень любезно, если бы вы указали где найти. перелистал всю тему и без толку. в гугле нашел лишь то, что можно InterNiche запустить без rtos используя superloop http://www.alterawiki.com/wiki/%22Super_Loop%22_NicheStack а она вообще существует под 9.1 sp2 ? :)
  11. Здравствуйте! Я новичок с плис, начиная разбираться с ethernet на ките DK-N2EVAL-3C25N Микросхема физического уровня dp83848. Всю тему прочил уже несколько раз, но ответов так и не нашел. Собрал систему в sopc использую модель eth_ocm. далее, создаю простую программу в nios и наталкиваюсь на то, что для успешной компиляции в проекте должен присутствовать InterNiche TCP/IP и соответсвенно UCOSII. я прав или что-то путаю? Хорошо, создал новый проект на основе шаблона с UCOSII, и при запуске получил приглашение ввести серийный номер :smile3046: Хочу попробовать свои силы с компонентом triple speed Ethernet (TSE) но меня смущает что он time limited. Как можно это побороть? Направьте на путь истинный, с чего начать освоение 10/100 ethernet? ps использую quartus II 9.1 sp1
  12. большое спасибо все, разобрался :)
  13. а объясните мне, начинающему почему надо писать так, а не GIFR |= (1<<INTF0)? почему именно единицу это понятно, так в даташите написано. ведь насколько я понимаю, именно такая команда включает бит INTFO, а предложенная вами запишет 01000000 (Bit 6 – INTF0: External Interrupt Flag 0 ) или я что-то путаю?
  14. да, приведенный текст программыполный. спасибо за советы, проблема решилась добавлением строчки при перенастройки прерываний GIFR |= (1<<INTF0); // сброс флага, который мог установиться при смене активного фронта по двухлучевому осциллографу видно что прерывание по спадающему фронту без этой строки и включенном USART срабатывало через раз. теперь же все нормально. однако в чем причины я не совсем понимаю. это случайно попала когда постил текст программы :) вообщем большое спасибо!
×
×
  • Создать...