Fobes 0 19 января, 2016 Опубликовано 19 января, 2016 · Жалоба Всем доброго времени суток. Уже совсем измучился... есть stm32F4 discovery и DP83848, подключил. Зашел в stm32 cube, настроил ethernet на RMII, подцепил LwIp. Залил код, запустил, DHCP запустилось, в подключения роутера появилось новое устройство с маком, который в cube задавался... Но теперь главная проблема. Вроде бы банальная задача, найти место где начинается обработка принятого кадра, в итоге я запутался... нашел функции low_level_output и low_level_input, но отладчик в них никогда не попадает, нашел буферы DMA Tx_Buff и Rx_Buff, вывел их в watch(keil), а они вроде как статичны, как-будто дма ждет что я следующую передачу разрешу. Главная задача, научиться принимать и отправлять свои пакеты(в LwIp таковых нет) как это сделать ? куда копать ? По сути ведь можно обойтись стандартным драйвером, без LwIp, ведь мне не нужны TCP/IP, UDP и т.д. примеров никаких не нашел, только то что было до HAL :( И еще вопрос. В stm32F4 есть аппаратная поддержка PTP, но в HAL драйвере я нашел лишь то что она не поддерживается. Реализацию самому писать чтоли придется ? Но все сводится опять же к приему и отправке своих пакетов :( Направьте на верный путь, что почитать ? как настроить нужно, что использовать ? или примеры может какие >_< Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alag57 0 20 января, 2016 Опубликовано 20 января, 2016 · Жалоба ведь мне не нужны TCP/IP, UDP и т.д. А кто принимать будет ваши пакеты? А роутер пропустит ваши не ТСР и не UDP пакеты? А вообще описание работы с lwip есть в папке Lwip/doc. Также примеры есть в пакете Lwip-contrib. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 20 января, 2016 Опубликовано 20 января, 2016 (изменено) · Жалоба Решаю ту же задачу, но написал свой HAL, никаких кубов и кривых библиотек - вся кривизна собственная см. тут и известно что, где и кого винить. Роутеру все до лампочки, пропускает 802.3 без проблем. Отлаживать и принимать можно с помощью wireshark и packEth. Изменено 20 января, 2016 пользователем pitt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fobes 0 20 января, 2016 Опубликовано 20 января, 2016 · Жалоба Решаю ту же задачу, но написал свой HAL, никаких кубов и кривых библиотек - вся кривизна собственная см. тут и известно что, где и кого винить. Роутеру все до лампочки, пропускает 802.3 без проблем. Отлаживать и принимать можно с помощью wireshark и packEth. с вами можно как-то связаться, переговорить в реал тайме ? Все никак не решается проблема... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
let's see 0 21 января, 2016 Опубликовано 21 января, 2016 · Жалоба с вами можно как-то связаться, переговорить в реал тайме ? Все никак не решается проблема... Дык и у меня тоже. Сегодня гонял тестовую программу: принимаю фрейм и тут же переправляю назад. Никакого переключения контекста, ничего не делаю. Через несколько секунд TxDMA умирает как я и описал. Несколько сотем фреймов пропутешествовало как и требовалось. Просто отсылаю фрейм: подыхает wireshark на PC с линухом... Т.е. Отдельно и прием и передача работают, а вот вместе... Пахнет проблемами в силиконе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alag57 0 21 января, 2016 Опубликовано 21 января, 2016 · Жалоба нашел функции low_level_output и low_level_input Направьте на верный путь Функция low_level_output является конечной точкой, где заканчивает работать Lwip и начинает драйвер. Функция low_level_input наоборот, конечная точка работы драйвера и начала работы Lwip. Возьмите любой пример с Lwip, т.е с ТСР или UDP. Запустите и в отладке зайдете в эти функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fobes 0 21 января, 2016 Опубликовано 21 января, 2016 (изменено) · Жалоба Функция low_level_output является конечной точкой, где заканчивает работать Lwip и начинает драйвер. Функция low_level_input наоборот, конечная точка работы драйвера и начала работы Lwip. Возьмите любой пример с Lwip, т.е с ТСР или UDP. Запустите и в отладке зайдете в эти функции. Уже так и сделал, но все равно спасибо что откликнулись))) Собственно с отправкой разобрался и приемом. Теперь другой вопрос. struct ethernet_header { uint64_t dstAdr:48; uint64_t srcAdr:48; uint16_t type; } __attribute__((packed)); struct ethernet_header eth_hdr; eth_hdr.dstAdr = 0x010CCD040001; eth_hdr.srcAdr = 0x0001010000FF; eth_hdr.type = 0x8100; Собственно при отправке все поля структуры выворачиваются. нашел lwip_htons eth_hdr.type = lwip_htons (0x8100); При таком раскладе поле type просто не отправляется. eth_hdr.type = lwip_htons (0x8101); Но если убрать нулевой байт, то поле выворачивается и отправляется. Это такая оптимизация ? Не подскажете как бороться ? Извиняюсь сразу за возможно глупые вопросы, только начал разбираться с контроллерами) Изменено 22 января, 2016 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться