|
UDP на ZYNQ, MYIR Z-Turn |
|
|
|
Nov 21 2017, 18:54
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Пытаюсь поднять echoserver данный из примеров. Зависает на моменте:. Цитата -----lwIP TCP echo server ------ TCP packets sent to port 6001 will be echoed back Start PHY autonegotiation Кабель присоединен. Более того - пока проц не работает - мигают светодиоды на коннекторе ethernet. Как только стартует проц - огоньки пропадают. Не знаю является ли это каким то признаком неисправности. В дебаге выяснил что виснет в функции get_Marvell_phy_speed, а именно зацикливается на моменте: Код while (1) { XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_CONTROL_REG_OFFSET, &control); if (control & IEEE_CTRL_RESET_MASK) continue; else break; } Более того, выяснил, что функция XEmacPs_PhyRead всегда возвращает 0xFFFF, даже в других местах, везде где она вызывается. Проект пустой, к плате ничего не присоединено. Может кто сталкивался или знает в чем причина?
Сообщение отредактировал ilyaprok - Nov 21 2017, 18:54
|
|
|
|
|
Nov 21 2017, 19:07
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Цитата(Огурцов @ Nov 22 2017, 00:05)  может вы udp с tcp попутали ? Да до самого протокола я не дошел, надо ж отчего то отталкиваться - взял пример готовый echoserver. То что там TCP - это сейчас не важно. Тут что то на низком уровне не стартует.
|
|
|
|
|
Nov 21 2017, 19:59
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Цитата(Огурцов @ Nov 22 2017, 00:43)  очевидно, вы сбрасываете phy не той полярностью Расскажите поподробнее пожалуйста. Где узнать какой полярностью идет сброс, и где конфигурация этого? Это же стандартный пример, я ничего не менял. По логике - загвоздка где то в Vivado. Но это не точно. Вот скрин портов в Вивадо:
|
|
|
|
|
Nov 21 2017, 20:33
|
Местный
  
Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288

|
За код из первого сообщения в хороших домах убивают. Но сейчас не об этом. Цитата(ilyaprok @ Nov 21 2017, 22:59)  Это же стандартный пример, я ничего не менял. По логике - загвоздка где то в Vivado. Но это не точно. А я вот не уверен за IO Type LVCMOS1.8. UPD: А причем тут Марвел, если там AR8035? Читать, например, сюда. Ну и плюс остальные нюансы работы с этой физикой.
|
|
|
|
|
Nov 21 2017, 20:51
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Цитата(gosha-z @ Nov 22 2017, 01:33)  За код из первого сообщения в хороших домах убивают. Но сейчас не об этом. Почему? Этот код не мой - это код из BSP драйвера. Цитата(gosha-z @ Nov 22 2017, 01:33)  А я вот не уверен за IO Type LVCMOS1.8. Ок, возьму на заметку, спасибо. Но вот циатата из даташита KSZ9031RN "RGMII with 3.3V/2.2V/1.8V tolerant I/O pins" Цитата(gosha-z @ Nov 22 2017, 01:33)  UPD: А причем тут Марвел, если там AR8035? Читать, например, сюда. Ну и плюс остальные нюансы работы с этой физикой. Да Марвел не причем, суть не в том как функция называется, а в том, что в принципе функция низкого уровня XEmacPs_PhyRead не работает. Более того у меня на плате не AR8035, а KSZ9031RN. Нашел код для него: вотне работает. делал как в этом видео, несмотря на то, что там AR8035, в вивадо он ничего не менял: вотА так спасибо все равно
Сообщение отредактировал ilyaprok - Nov 21 2017, 21:01
|
|
|
|
|
Nov 22 2017, 06:06
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226

|
Посмотрите: https://forums.xilinx.com/t5/Embedded-Devel...ues/td-p/696975На моей памяти (подробности не вспомню) были проблемы с автосогласованием скорости на некоторых МАС. Решалось установкой фиксированной скорости. Вот мой код инициализиции модуля Eth0: Код int EthTransceiver_Init(XScuGic* INTRCtrl) { //============Конфигурируем системный таймер для обновления флагов TCP (требуется lwIP)========= u32 Status = XST_SUCCESS; XScuTimer_Config* ConfigPtr; u32 TimerLoadValue = 0;
LogFileCtrl_PrintF("=======Init Ethernet controller module.=======\n");
ConfigPtr = XScuTimer_LookupConfig(XPAR_SCUTIMER_DEVICE_ID); Status = XScuTimer_CfgInitialize(&TimerInstance, ConfigPtr, ConfigPtr->BaseAddr); if (Status != XST_SUCCESS) { LogFileCtrl_PrintF("FAILED init Scutimer, status: %u32 .\n", Status); return XST_FAILURE; }
Status = XScuTimer_SelfTest(&TimerInstance); if (Status != XST_SUCCESS) { LogFileCtrl_PrintF("FAILED Scutimer selftest, status: %u32 .\n", Status); return XST_FAILURE; } XScuTimer_EnableAutoReload(&TimerInstance); /* * Set for 250 milli seconds timeout. */ TimerLoadValue = XPAR_CPU_CORTEXA9_0_CPU_CLK_FREQ_HZ / 8; XScuTimer_LoadTimer(&TimerInstance, TimerLoadValue); //================================================================================ ==============
//============Конфигурируем прерывания от таймера=============================================== XScuGic_Connect(INTRCtrl, XPAR_SCUTIMER_INTR, (Xil_InterruptHandler)EthTimer_Handler, (void *)&TimerInstance); XScuGic_Enable(INTRCtrl, XPAR_SCUTIMER_INTR); //================================================================================ ==============
//===========Инициализируем IP - адреса библиотеку Ethernet===================================== LogFileCtrl_PrintF("Init lwIP.\n"); struct ip_addr MyIP, MyNetMask, MyGW; IP4_ADDR(&MyIP, Network_Config.IP[0], Network_Config.IP[1], Network_Config.IP[2], Network_Config.IP[3]); IP4_ADDR(&MyNetMask, Network_Config.Mask[0], Network_Config.Mask[1], Network_Config.Mask[2], Network_Config.Mask[3]); IP4_ADDR(&MyGW, Network_Config.Gateway[0], Network_Config.Gateway[1], Network_Config.Gateway[2], Network_Config.Gateway[3]);
lwip_init(); if (!xemac_add(&NetItfs, &MyIP, &MyNetMask, &MyGW, (void*)Network_Config.MAC, XPAR_XEMACPS_0_BASEADDR)) { LogFileCtrl_PrintF("FAILED adding network interface.\n"); return XST_FAILURE; } netif_set_default(&NetItfs); //================================================================================ ==============
//===========Включаем контроллер Ethernet======================================================= netif_set_up(&NetItfs); //================================================================================ ==============
//===========Разрешаем прерывания=============================================================== XScuTimer_EnableInterrupt(&TimerInstance); XScuTimer_Start(&TimerInstance); //================================================================================ ==============
LogFileCtrl_PrintF("Init lwIP result: OK.\n"); LogFileCtrl_PrintF("=======Init Ethernet controller module result: OK.=======\n\n"); return 0; } Вот код создания UDP PCB: Код //Создаем порты передачи данных struct ip_addr IpAddrPC; IP4_ADDR(&IpAddrPC, Network_Config.Host_IP[0], Network_Config.Host_IP[1], Network_Config.Host_IP[2], Network_Config.Host_IP[3]); pcbRcv = udp_new(); pcbVideoSnd = udp_new(); pcbDataSnd = udp_new();
udp_bind(pcbRcv, IP_ADDR_ANY, Network_Config.ServiceCtrlPort); udp_bind(pcbVideoSnd, IP_ADDR_ANY, Network_Config.Host_Video_Port); udp_bind(pcbDataSnd, IP_ADDR_ANY, Network_Config.Host_Data_Port); udp_recv(pcbRcv, UDPRcv, NULL); udp_recv(pcbDataSnd, DataRcvHandler, NULL); udp_connect(pcbVideoSnd, &IpAddrPC, Network_Config.Host_Video_Port); udp_connect(pcbDataSnd, &IpAddrPC, Network_Config.Host_Data_Port); Вот код отправки данных: Код while(1) { EthTransceiver_ProcInput();
//================================================================================ ================== //====================Проверяем флаг готовности кадрового буффера=================================== if ((FrameReady != 0) & (Streams_Config.Video_En != 0)) { for (LineIdx = 0; LineIdx < LinesInFrame; LineIdx = LineIdx + 1) { memcpy(VideoBuff_Tx->payload, Frame[LineIdx], Streams_Config.Video_PacketSize); udp_send(pcbVideoSnd, VideoBuff_Tx); } //Данные из буффера 1 отправлены, снимаем флаг готовности FrameReady = 0; //Запускаем первый трансфер SensorDriver_ReceiveFrame(); } } Вот только пакеты (мой заголовок+данные) у меня формируются в логике и по ДМА отправляются в ДДР. Т.е. в ДДР лежит не картинка, а набор пакетов - так удается существенно увеличить траффик от Цинка и разгрузить его!
|
|
|
|
|
Nov 22 2017, 12:20
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 29-10-17
Пользователь №: 99 964

|
Цитата(Огурцов @ Nov 22 2017, 02:53)  хороший вопрос, именно на него вам и нужно для начала ответить плюс mdc, mdio как минимум Да правильное направление. Действительно с RESET было не порядок. Спасибо  В Vivado подключил порт RESET_PHY, подтянул к PULLUP. Низкий уровень заработал. Буду дальше пытать. Цитата(svedach @ Nov 22 2017, 11:06)  Посмотрите: https://forums.xilinx.com/t5/Embedded-Devel...ues/td-p/696975На моей памяти (подробности не вспомню) были проблемы с автосогласованием скорости на некоторых МАС. Решалось установкой фиксированной скорости. Вот только пакеты (мой заголовок+данные) у меня формируются в логике и по ДМА отправляются в ДДР. Т.е. в ДДР лежит не картинка, а набор пакетов - так удается существенно увеличить траффик от Цинка и разгрузить его! Вам большое спасибо, что всегда помогаете)) Да попробую поиграться с инициализацией.
|
|
|
|
|
Jan 10 2018, 08:49
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 26-10-17
Из: Беларусь
Пользователь №: 99 927

|
Доброго дня! Уважаемые Форумчане! Я пытаюсь отправить по udp слово, но при использовании функции udp_send() все время отправляются ARP-запросы. Подскажите, пожалуйста, как от этого избавиться. Благодарю за внимание. P.S. Не ругайте, я новичок.
|
|
|
|
|
Jan 11 2018, 11:47
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 26-10-17
Из: Беларусь
Пользователь №: 99 927

|
Kuzmi4: Дело в том, что плата постоянно запрашивает MAC, компьютер отвечает.А данные не идут. Вот так это выглядит в Wireshark:
|
|
|
|
|
Jan 11 2018, 12:31
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Вероятно, проблема с приёмником, заходит ли в обработчик приёма сообщения. Бродкасты на плату побросайте, примет ли их плата. Ну и это если правильно выполнена инициализация LwIP. Когда-то пытался выяснить какую примерно скорость передачи можно получить:
Прикрепленные файлы
lwip.c.txt ( 5.32 килобайт )
Кол-во скачиваний: 21
|
|
|
|
|
Jan 11 2018, 12:51
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 26-10-17
Из: Беларусь
Пользователь №: 99 927

|
doom13: Спасибо за советы, сейчас буду пробовать.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|