Jump to content

    

Bear_ku

Участник
  • Content Count

    187
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Bear_ku

  • Rank
    Частый гость

Recent Profile Visitors

2643 profile views
  1. Прошу прощения. Использую STM32CubeIDE, может не последней версии но довольно свежую.
  2. high_resolution_clock::now() ожил после написания своей _gettimeofday. Это корректный подход?
  3. Как вариант подойдет. Но на сколько я знаю данная проблема решается реализацией одной из системных функций. Вот только проблема в том, что не могу вспомнить какой.
  4. Как работает данная функция я имею представление. А вот что нужно сделать чтобы она заработала в STM?
  5. При попытке использования сторонней библиотеки наткнулся на препятствие в виде chrono, а точнее high_resolution_clock::now(). Данная функция похоже всегда возвращает одно и то же значение, т.к. duration_cast<microseconds> всегда выдает 0. Подскажите, плз, как заставить ее работать?
  6. Простите, погорячился. Ответ крылся в файле: arch/arm/mach-bcm2708.c
  7. Пытаюсь заставить работать mini Uart на ядре линукса 3.18. Написал простой модуль для передачи байт, проверил на ядре 5.хх - работает. А вот на ядре 3.18 работать не хочет, нет перехода в обработчик прерываний. В исходниках нашел номер прерывания для UART, но это PL011 UART. Как узнать для miniUart?
  8. Столкнулся с той же проблемой . На ПК порт открывался и принимались данные если в МК использовалась только функция CDC_Transmit_FS. Как только добавлял свои обработчики в CDC_TransmitCplt_FS или CDC_Receive_FS то порт на ПК не открывался "Error in OpenPort: Internal Error when initializing COM3". Решение проблемы нашел тут: https://stackoverflow.com/questions/40597612/stm32-usb-vcp-virtual-com-port. А точнее: // usbd_cdc_if.c static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) { static uint8_t tempbuf[7]; /* USER CODE BEGIN 5 */ switch(cmd) { // ... case CDC_SET_LINE_CODING: memcpy(tempbuf, pbuf, sizeof(tempbuf) / sizeof(tempbuf[0])); break; case CDC_GET_LINE_CODING: memcpy(pbuf, tempbuf, sizeof(tempbuf) / sizeof(tempbuf[0])); break; // ... } return (USBD_OK); /* USER CODE END 5 */ } Windows 10 Mcu: STM32F405RGTx. Firmware: STM32Cube FW_F4 V1.25.1
  9. MAC + PHY

    Дрова marvell, смена страниц в протоколе обмена присутствует (наблюдал вживую), прерывания в PHY инициализируются и работают (после срабатывания прерывания идет общение mac-phy по mdio).
  10. MAC + PHY

    Оптика вообще печаль. На данный момент она вообще не пашет. Ее проверяю коммутатором, у которого загораются светодиодики при нормальном подключении, в моем случае - нет. При включении/отключении кабеля смотрел шину MDIO, там байтики бегают. Пока правда корректность не проверял их. У меня в силу отсутствия опыта общения с линуксом и сетевыми соединениями вообще волосы дыбом встают от происходящего. Скорее всего все решается в пару движений, но вот совершить их я не могу.
  11. MAC + PHY

    При отключенных прерываниях ситуация отличается, но результат в итоге тот же. Все что написано в посте выше проделывалось при подключенных прерываниях. При отключении/включении кабеля никаких новых сообщений в dmesg не появляется.
  12. MAC + PHY

    В целом все работает, но далеко не так как задумано. IP адрес и маска заданы вручную и не меняются. При включении сеть определяется, пинги идут. Достаточно достать/вставить кабель и работа останавливается. На пинг того же ПК получаю "From 192.168.1.104 icmp_seq=1 Destination Host Unreachable". Ниже результат команд после данной манипуляции. $ ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.104 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::b9:96ff:feab:6d88 prefixlen 64 scopeid 0x20<link> ether 02:b9:96:ab:6d:88 txqueuelen 1000 (Ethernet) RX packets 45 bytes 3746 (3.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 53 bytes 5778 (5.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 $ ethtool eth0 Settings for eth0: Supported ports: [ TP MII FIBRE ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: Symmetric Receive-only Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Link partner advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full Link partner advertised pause frame use: Symmetric Receive-only Link partner advertised auto-negotiation: Yes Link partner advertised FEC modes: Not reported Speed: 100Mb/s Duplex: Full Port: MII PHYAD: 1 Transceiver: internal Auto-negotiation: on Cannot get wake-on-lan settings: Operation not permitted Current message level: 0x00000007 (7) drv probe link Link detected: yes В то же время если убрать связь по MDIO между PHY/MAC работает все криво и косо, зато манипуляция с проводом не приводит к таким последствиям. Может подскажете куда копать?
  13. MAC + PHY

    Всем спасибо. Проблема была все-таки в тактовой частоте. На выходе LAN7801 она появлялась только после поиска имеющихся PHY, соответственно ничего найти и не получалось. После исправления данного явления нужные дрова для PHY подтянулись без каких-либо дополнительных манипуляций. Осталось разобраться как осуществляется переключение с меди на оптику.
  14. MAC + PHY

    По поводу сброса. Сигнал сброса PHY_RESET_N LAN7801 как уже выше написал висит 2 мс, хотя в ДШ сказано минимум 4 мс. По простому это время увеличить не удалось (хотел периодически устанавливать флаг сброса). Соединил сигналы сброса RESET_N у микросхем MAC и PHY с кнопкой сброса, результат не изменился. Или MAC обязательно должен сам сбросить PHY?
  15. MAC + PHY

    Драйвер должен быть рабочим. Коллега на работе уже имел с ним дело, но он подключался напрямую к FPGA Xilinx. Т.е. его опыт мне не помог )