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

 
 
> UDP на ZYNQ, MYIR Z-Turn
ilyaprok
сообщение Nov 21 2017, 18:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
svedach
сообщение Nov 22 2017, 06:06
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 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();
        }
}


Вот только пакеты (мой заголовок+данные) у меня формируются в логике и по ДМА отправляются в ДДР. Т.е. в ДДР лежит не картинка, а набор пакетов - так удается существенно увеличить траффик от Цинка и разгрузить его!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ilyaprok   UDP на ZYNQ   Nov 21 2017, 18:54
- - Огурцов   может вы udp с tcp попутали ?   Nov 21 2017, 19:05
|- - ilyaprok   Цитата(Огурцов @ Nov 22 2017, 00:05) може...   Nov 21 2017, 19:07
|- - Огурцов   очевидно, вы сбрасываете phy не той полярностью   Nov 21 2017, 19:43
|- - ilyaprok   Цитата(Огурцов @ Nov 22 2017, 00:43) очев...   Nov 21 2017, 19:59
|- - gosha-z   За код из первого сообщения в хороших домах убиваю...   Nov 21 2017, 20:33
||- - ilyaprok   Цитата(gosha-z @ Nov 22 2017, 01:33)...   Nov 21 2017, 20:51
|- - Огурцов   Цитата(ilyaprok @ Nov 21 2017, 19:59) Где...   Nov 21 2017, 21:53
|- - ilyaprok   Цитата(Огурцов @ Nov 22 2017, 02:53) хоро...   Nov 22 2017, 12:20
- - AntLip   Доброго дня! Уважаемые Форумчане! Я пытаюс...   Jan 10 2018, 08:49
|- - Kuzmi4   2 AntLip: От этого не надо избавлятся - чтобы отпр...   Jan 10 2018, 09:31
- - AntLip   Kuzmi4: Дело в том, что плата постоянно запрашивае...   Jan 11 2018, 11:47
- - doom13   Вероятно, проблема с приёмником, заходит ли в обра...   Jan 11 2018, 12:31
- - AntLip   doom13: Спасибо за советы, сейчас буду пробовать.   Jan 11 2018, 12:51
- - Kuzmi4   2 AntLip судя по логу - скорей всего у вас проблем...   Jan 11 2018, 13:16
- - AntLip   Бродкасты на плату я отправляю, но она не отвечает...   Jan 12 2018, 13:20
|- - Kuzmi4   Цитата(AntLip @ Jan 12 2018, 16:20) ..как...   Jan 13 2018, 13:30
- - AntLip   Спасибо за помощь! Информация пошла, правда ню...   Jan 15 2018, 09:02
- - Kuzmi4   2 AntLip Если использовать поиск по форуму, то мож...   Jan 15 2018, 10:05
- - AntLip   Спасибо всем за помощь! Заработало!)   Jan 19 2018, 12:18
- - Kuzmi4   2 AntLip так вы просветите общественность что имен...   Jan 19 2018, 20:27
- - AntLip   Так в том и дело, что стыдно признаться. Сидел, ни...   Jan 26 2018, 06:03


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 14:46
Рейтинг@Mail.ru


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