USB CDC-ECM CDC-EMM (USB ETHERNET) имел ли ко дело?

Тема в разделе "Флудилка", создана пользователем Igor68, 4 авг 2018.

  1. Igor68

    Igor68 Гуру

    Собственно вопрос в опыте реализации данного варианта USB устройства.

    ...ранее (сейчас у неё аккумулятор сдох) имея Motorola Motoming A1200e(с Linux на борту) имелась возможность подключить сей девайс в режиме USB-ETHERNET. В линуксе на ПК устройство сразу было:
    Код (Bash):
    root@debian-i:/home/igor/coding/bash/nsite3# ifconfig
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:8197 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8197 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:1265628 (1.2 MiB)  TX bytes:1265628 (1.2 MiB)

    usb0      Link encap:Ethernet  HWaddr ce:85:f2:9d:19:f1
              inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
              inet6 addr: fe80::cc85:f2ff:fe9d:19f1/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1494  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:492 (492.0 B)                                                                                                                                    
                                                                                                                                                                                             
    wlan0     Link encap:Ethernet  HWaddr 74:de:2b:86:ee:8b                                                                                                                                  
              inet addr:192.168.0.67  Bcast:192.168.0.255  Mask:255.255.255.0                                                                                                                
              inet6 addr: fe80::76de:2bff:fe86:ee8b/64 Scope:Link                                                                                                                            
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1                                                                                                                            
              RX packets:63120 errors:0 dropped:0 overruns:0 frame:0                                                                                                                        
              TX packets:76823 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:24258919 (23.1 MiB)  TX bytes:8128130 (7.7 MiB)

    root@debian-i:/home/igor/coding/bash/nsite3#
     
    Видите по Ifconfig интерфейс usb0 определялся как сетевое устройство с неким IP
    ну и ping:
    Код (Bash):
    root@debian-i:/home/igor/coding/bash/nsite3# ping 192.168.1.2
    PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
    64 bytes from 192.168.1.2: icmp_req=1 ttl=64 time=1.20 ms
    64 bytes from 192.168.1.2: icmp_req=2 ttl=64 time=1.12 ms
    64 bytes from 192.168.1.2: icmp_req=3 ttl=64 time=1.35 ms
    64 bytes from 192.168.1.2: icmp_req=4 ttl=64 time=1.32 ms
    ^C
    --- 192.168.1.2 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3004ms
    rtt min/avg/max/mdev = 1.120/1.252/1.358/0.102 ms
    root@debian-i:/home/igor/coding/bash/nsite3#
    ну и :
    Код (Bash):
    root@debian-i:/home/igor/coding/bash/nsite3# nmap 192.168.1.2

    Starting Nmap 6.00 ( http://nmap.org ) at 2018-08-04 12:17 +03
    Nmap scan report for 192.168.1.2
    Host is up (0.016s latency).
    Not shown: 998 closed ports
    PORT    STATE SERVICE
    22/tcp  open  ssh
    139/tcp open  netbios-ssn
    MAC Address: CA:25:86:0A:DE:52 (Unknown)

    Nmap done: 1 IP address (1 host up) scanned in 0.56 seconds
    root@debian-i:/home/igor/coding/bash/nsite3#
    как видите сей девайс имеет и SSH
    и вот:
    Код (C++):
    root@debian-i:/home/igor/coding/bash/nsite3# ssh root@192.168.1.2
    root@192.168.1.2's password:
    Permission denied, please try again.
    root@192.168.1.2'
    s password:
    root@(none):~# cd /
    root@(none):/# ls
    bin       dev       etc       ezx_user  ezxlocal  home      lib       mmc       mnt       proc      ram       root      sbin      tmp       usr       var
    root@(none):/# cd home
    root@(none):/home# ls
    ezx_user  ezxlocal  native    root
    root@(none):/home#
    Мы вошли по SSH по сетевому USB соединению в моторолу.
    А это:
    snapshot6.png
    mc в мотороле... мы запустили его в SSH сессии, и управляем/работаем с ПК. туда я засунул (скачал) и GCC для этой моторолы. И редактор nano там в наличии. Вот только ОЗУ 64 Мб конечно мало... но это для 2005 года. И wifi нет... а только bluetooth

    На ней я поднимал и WEB сервер.
    кстати lsusb показал:
    Код (Bash):
    root@debian-i:/home/igor/coding/bash/nsite3# lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 004: ID 1bcf:2c00 Sunplus Innovation Technology Inc.
    Bus 002 Device 003: ID 0bda:0129 Realtek Semiconductor Corp.
    Bus 001 Device 006: ID 04ca:3004 Lite-On Technology Corp.
    Bus 001 Device 007: ID 09da:c10a A4 Tech Co., Ltd
    Bus 002 Device 004: ID 22b8:6027 Motorola PCS USBLAN
    root@debian-i:/home/igor/coding/bash/nsite3#
    А usb-devices:
    Код (Bash):
    T:  Bus=02 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
    D:  Ver= 2.00 Cls=02(commc) Sub=02 Prot=00 MxPS=16 #Cfgs=  1
    P:  Vendor=22b8 ProdID=6027 Rev=00.00
    S:  Manufacturer=Motorola
    S:  Product=Motorola USBLAN
    C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=02(commc) Sub=0a Prot=00 Driver=zaurus
    Драйвер сразу подцепил из Debian, для Windows надо драйвер устанавливать.

    А вопрос в том, что нашлось ряд проектов... на stm32
    https://github.com/majbthrd/stm32ecm
    https://r-ol.blogspot.com/2017/04/stm32-windows-cdc-eem.html

    Сам пробую сделать на AT91SAM3U4E и добрался только до того, что устройство определилось как eth1 по ifconfig... ну а остальное пока не могу сделать. А хотелось бы сделать устройство с вебмордой по usb. Это с лихвой заменит и сериал и дисковое устройство. А при наличии websocket возможности расширятся многократно.

    Заранее спасибо!
     
    Последнее редактирование: 4 авг 2018
  2. Igor68

    Igor68 Гуру

    ...Да совсем не указал что мне надо.
    Какие дескрипторы инициализации должны быть? Дескрипторы устройства и интерфейса уже сделал и оно определилось как eth1 по ifconfig. И по usb-devices определялся и интерфейс и драйвер прикручивался. Всё как надо. Но вот может что не доделал, потому как ендпоинты не получаю... есть предположение что инициализация на окончена. Собираюсь заиметь stm32 для запуска имеющегося по ссылкам проекта с целью просмотреть в отладчике последовательность инициализации... ну и может работы.
    Спасибо!
     
  3. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Вот дали мне "прокатиться" на плате STM32F103... специально для этого проекта:
    https://r-ol.blogspot.com/2017/04/stm32-windows-cdc-eem.html
    ...и изменив (для удобства) в main.c в функции main():
    Код (C++):
    //uip_ipaddr(ipaddr, 10,11,12,2);
    uip_ipaddr(ipaddr, 192,168,200,1);
    Ну что бы устройство заимело IP 192.168.200.1 получил:
    Код (Text):
    root@debian:/home/kto/coding/GCC/wsobj3# ifconfig
    eth0      Link encap:Ethernet  HWaddr 54:ab:3a:97:4e:ed
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:382321 errors:0 dropped:11 overruns:0 frame:0
              TX packets:1503832 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:98499130 (93.9 MiB)  TX bytes:2234650820 (2.0 GiB)

    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:212678 errors:0 dropped:0 overruns:0 frame:0
              TX packets:212678 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:6530623476 (6.0 GiB)  TX bytes:6530623476 (6.0 GiB)

    usb0      Link encap:Ethernet  HWaddr 56:3e:b8:49:66:31
              inet6 addr: fe80::543e:b8ff:fe49:6631/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:2956 (2.8 KiB)

    vboxnet0  Link encap:Ethernet  HWaddr 0a:00:27:00:00:00
              inet addr:192.168.56.1  Bcast:192.168.56.255  Mask:255.255.255.0
              inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:372 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:71339 (69.6 KiB)

    root@debian:/home/kto/coding/GCC/wsobj3#
    сетевое устройство usb0... к сожалению DHCP не реализовано на нём. Ну тогда вручную:
    Код (Text):
    ifconfig usb0 192.168.200.10
    Даём себе IP 192.168.200.10, а как говорилось устройство имеет 192.168.200.1.
    Делаем пинг сначала себя:
    Код (Text):
    root@debian:/home/kto/coding/GCC/wsobj3# ping 192.168.200.10
    PING 192.168.200.10 (192.168.200.10) 56(84) bytes of data.
    64 bytes from 192.168.200.10: icmp_seq=1 ttl=64 time=0.020 ms
    64 bytes from 192.168.200.10: icmp_seq=2 ttl=64 time=0.022 ms
    64 bytes from 192.168.200.10: icmp_seq=3 ttl=64 time=0.030 ms
    64 bytes from 192.168.200.10: icmp_seq=4 ttl=64 time=0.025 ms
    64 bytes from 192.168.200.10: icmp_seq=5 ttl=64 time=0.024 ms
    ^C
    --- 192.168.200.10 ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 3998ms
    rtt min/avg/max/mdev = 0.020/0.024/0.030/0.004 ms
    root@debian:/home/kto/coding/GCC/wsobj3#
    и затем устройство:
    Код (Text):
    root@debian:/home/kto/coding/GCC/wsobj3# ping 192.168.200.1
    PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
    64 bytes from 192.168.200.1: icmp_seq=1 ttl=64 time=0.605 ms
    64 bytes from 192.168.200.1: icmp_seq=2 ttl=64 time=0.458 ms
    64 bytes from 192.168.200.1: icmp_seq=3 ttl=64 time=0.474 ms
    64 bytes from 192.168.200.1: icmp_seq=4 ttl=64 time=0.475 ms
    64 bytes from 192.168.200.1: icmp_seq=5 ttl=64 time=0.395 ms
    64 bytes from 192.168.200.1: icmp_seq=6 ttl=64 time=0.456 ms
    64 bytes from 192.168.200.1: icmp_seq=7 ttl=64 time=0.389 ms
    ^C
    --- 192.168.200.1 ping statistics ---
    7 packets transmitted, 7 received, 0% packet loss, time 5999ms
    rtt min/avg/max/mdev = 0.389/0.464/0.605/0.070 ms
    root@debian:/home/kto/coding/GCC/wsobj3#
    Как они и говорили пинг есть...
    И по usb-devices признано:
    Код (Text):
    T:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 93 Spd=12  MxCh= 0
    D:  Ver= 2.00 Cls=02(commc) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=076b ProdID=5401 Rev=02.00
    S:  Manufacturer=STMicroelectronics
    S:  Product=cdc-eem
    S:  SerialNumber=002030112233
    C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=400mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=02(commc) Sub=0c Prot=07 Driver=cdc_eem
     
    Но драйвера для Windows (прилагаются) не встали... как 32, так 64. Благо линуксу они вовсе ни к чему. И можно что-то испытать.

    Если кто имел дело подскажите по этому классу USB устройств.
    Спасибо.
     
  4. Igor68

    Igor68 Гуру

    Так делал ли кто это? Во как долго висит вопрос... аж с августа сего года.
    Для понимания (это я для себя) стал перетаскивать проект cdc-eem-f103-master на Keil uV4 пофайлово. Компилю, пробую и т.д. Выложить не выходит (а может и ни к чему) - он исходный рабочий в Keil uV5 весит 2.4 Мб в архиве zip, а тот, что делаю уже 8.7 Мб. Но уже что-то кроме ping пробую.
    Зачем? А web морда по usb разве плохо? Да с нормальной страницей по сетевому соединению. А устройство представляется системе как сетевое устройство.
    https://r-ol.blogspot.com/2017/04/stm32-windows-cdc-eem.html
     
  5. DetSimen

    DetSimen Спамовредитель Модератор

    Ничо так у тебя видения.... :)
    А у меня только черти да, иногда, демоны Максвелла, завидую.
     
  6. Igor68

    Igor68 Гуру

    Наданапица... Что-то тоже чёртиков посмотреть желаю - устал.
     
    DetSimen нравится это.
  7. BSD

    BSD Нуб

    Доброе время суток. Мне удалось реализовать UDP и TCP, правда с TCP какие-то траблы. У меня получилось отправлять страницу до 512 байт, и то с глюками. Дело в том, что при поднятие соединения от компьюютера(windows7) начинают лететь очень много пакетов ломающие мои пакеты. У вас получилось решить эту проблему?
     
  8. BSD

    BSD Нуб

    А да. С UDP вообще никаких проблем!)
     
  9. Igor68

    Igor68 Гуру

    На контроллере пока кроме ping ничего не сделал.
     
  10. BSD

    BSD Нуб

    Вот что у меня на данный момент получилось, попробуй, может, что подскажешь.
     

    Вложения:

  11. BSD

    BSD Нуб

    Я удалил UIP библиотеку, она мне только мешала.
     
  12. Igor68

    Igor68 Гуру

    Спасибо! Попробую!
    Только моя задача в том, что бы перенести это на AT91SAM3U4E(там пока вообще не вышел даже ping), а STM плату взял "покататься" у товарища на время, которого сейчас нет. Нет времени именно по этой теме. Вы я так понимаю в Keil uVision 5. Все примеры я "перетаскиваю" на uVision 4. Они все 3, 4 и 5 на одной виртуалке (машине WinXP). Вот надоело искать всякие dll-ки для разных девайсов на 5. Вот и юзаю 4 - на ней по "старинке".
    Времени пока на это нет, чуть позже - отвлекусь от рабочего.
    /сама общая идея в том, что бы заменить в устройстве на контроллере сервис, который требуют как накопитель USB-FLASH от устройства. Устройство должно быть в случае необходимости ONLINE-контроля/измерения. Да калибровать его надо. Так вот сервис HTTP-ETHERNET-USB должен заменить всё. И файловая система не нужна - на флеш устройства(не контроллера) можно записывать последовательно порциями/структурами и FAT не надо. Можно работать через запросы с веб-страниц имея только просто браузер. И софт дополнительный не надо. Всё просто - прибор работает(должен) без спецпрограмм и на всех платформах. Linux к примеру без спецдрайверов уже умеет работать с этим. Для windows надо только драйвер и не более. А любой браузер может сохранять содержимое страницы в файл/
     
    Последнее редактирование: 6 июл 2019