LINUX.ORG.RU

USB сетёвка Dm9601 и 10 Мбит HD

 usb ethernet


1

1

Приветствую. Купил тут такую поделку. lsusb:

ID 0fe6:9700 ICS Advent DM9601 Fast Ethernet Adapter

с обычным 10 Мбит хабом линкуется только кроссовым патч-кордом. На прямом патч-корде линк не поднимается. Может есть тут владельцы таких устройств, проверьте, если не сложно. Чтобы мне понять, это у меня у одного такое или это у всех сетёвок на этом чипе такая проблема?

Может кто под виндой проверит, может это бага линуксового драйвера.

Только не надо замусоривать топик фразами про 10 Мбит не нужно ;)

★★★★★
Ответ на: комментарий от Dark_SavanT

Какой Auto MDI-X? Берём обычный хаб, обычный «прямой» патч-корд, обычную usb-сетёвку. Почему линка нет? Я же не два хаба прямым патч-кордом пытаюсь соединить?

mky ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ну это после, пока корпус разкусывать не хочется. Я ещё не знаю какой там корпус, китайцы ведь могли и не в LQFP засунуть.

Думаю сначала под виндой попробовать, просто устанавливать винду не хочется. Под линуком драйвер давно практически не изменялся.

Даташит читал. Не понял, что означает:

Supports MII and reverse MII interface

Хотя в даташите на DM9161B Davicom прямо пишет про Support HP MDI/MDI-X auto crossover function. Получается, что у этого DM9601 нет auto MDI?

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

reverse MII interface

это loopback

Получается, что у этого DM9601 нет auto MDI?

нет если в даташите не написано

Думаю сначала под виндой попробовать

а какой смысл - скорей всего tx-rx на трансформаторе местами перепутаны и распаяно как для свитча

anonymous
()
Ответ на: комментарий от mky

Для начала давай определимся что ты называешь прямым, а что кроссовым?

И да, вариант что китайцы криво развели трансформатор со счетов не сбрасываем.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

По википедии. https://ru.wikipedia.org/wiki/Витая_пара#Прямой_кабель_(straight_through_cable)

Скорее всего китайцы криво развели трансформатор. А может специально это сделали, типа это не для сети (свича/хаба), а для подключения какой-нибудь фиговины с usb-портом к настольному компу...

Просто стало интерестно, китайцы всё с DM9601 так криво развели или мне одному повезло.

mky ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Про винду я думал до того, как перечитал даташит. Думал, раз чип года 2002 (хотя не уверен), может в нём уже предусмотрели Auto MDI или возможность программно переменить tx/rx.

У меня эта хрень ещё с древним свичём 3Com Office Connect (3C16735) только на 10 Мбит линкуется. Интерестно, что такого DM9601 заявляет в autonegotiation, что 3Com её не видит? mii-tool/ethtool у меня с DM9601 не хотят работать.

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

mii-tool/ethtool у меня с DM9601 не хотят работать

как это проявляется ? посмотрю в debugfs

grep dm9601 /sys/kernel/debug/dynamic_debug/control

после попыток через ethtool прочитать состояние линка

anonymous
()

У меня кажется 2 таких валяется (что там было в lsusb не помню, погуглил картинку)

Из косяков был один на всех макадрес, соответственно мак или руками ставить или больше 1го адаптера в сети работать не будет.

sergej ★★★★★
()
Ответ на: комментарий от anonymous

mii-tool на эту сетёвку пишет:

no MII interfaces found

ethtool, ЕМНИП, показывал, что линк 100 Мбит FD, когда втыкал в хаб. Хаб обычный compex, 8 портов, 10 Мбит, HD.

При попытке установить какие-то параметры ethtool выдавал ″Cannot set new settings″, а другие параметры как-бы устанавливал, только потом, пры выводе параметров всё оставалось как было исходно.

Возможно бага в драйвере. В тривиальном патче от 2017 года

net: usb: dm9601: use new api ethtool_{get|set}_link_ksettings

такой комментарий:

As I don't have the hardware, I'd be very pleased if

someone may test this patch.

Ещё нагугли пару жалоб, что ethtool не работает с DM9601. https://askubuntu.com/questions/273055/ethtool-on-ubuntu-and-an-usb-to-ethern... https://www.spinics.net/lists/netdev/msg368528.html

В debug/правку исходников я пока лезть не хочу, это надо несколько дней свободного времени :(

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

В debug/правку исходников я пока лезть не хочу

да я тоже не хочу с таким бабушкоизернетом возиться :) интересует только одно - видит ли драйвер встроенный PHY на шине MDIO и может ли читать/писать его регистры. Если не видит напишет кучу этого

Only internal phy supported

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L225

если видит то кучи подобного напишет

dm9601_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L232

по большому счету только регистры с адресом 0 (BMCR) и 1 (BMSR) интересуют - контроль и состояние линка.

anonymous
()
Ответ на: комментарий от anonymous

Сделал:

echo -n 'file dm9601.c +p' > /sys/kernel/debug/dynamic_debug/control

Потом:

ethtool eth1

Свич сообщает, что 10 Мбит/HD, ethtool — 100 Мбит/FD.

Получил в dmesg (обрезал не нужные timestamp):

dm9601 6-2:1.0 eth1: read shared 1 0x00 returned 0xffff, 2
dm9601 6-2:1.0 eth1: dm9601_mdio_read() phy_id=0x00, loc=0x00, returns=0xffff
dm9601 6-2:1.0 eth1: read shared 1 0x01 returned 0xffff, 2
dm9601 6-2:1.0 eth1: dm9601_mdio_read() phy_id=0x00, loc=0x01, returns=0xffff
dm9601 6-2:1.0 eth1: read shared 1 0x04 returned 0xffff, 2
dm9601 6-2:1.0 eth1: dm9601_mdio_read() phy_id=0x00, loc=0x04, returns=0xffff
dm9601 6-2:1.0 eth1: read shared 1 0x05 returned 0xffff, 2
dm9601 6-2:1.0 eth1: dm9601_mdio_read() phy_id=0x00, loc=0x05, returns=0xffff

Я не понял, что это значит, но сплошной ffff в возвращаемом значении как-то подозрительно. С usb на низком уровне не работал и пока не смог понять что делает драйвер. В даташите два набора регистров, один ″Vendor Control and Status Register Set″ (8 битные), другой «MII Register Description» (16 бит). Если правильно понял, то доступ ко второму осуществляется через регистр «EEPROM & PHY Control Register» из первого набора.

Но не совсем понятно, для чтения 16 бит дано два 8-бит регистра (EEPROM & PHY Low Byte Data Register и EEPROM & PHY High Byte Data Register), а из дравера вызывается usbnet_read_cmd(length=2). И я не увидел, чтобы было два отдельных чтения регистра (старшего и младшего). Или так и должно быть? MAC-адрес ведь аналогично одним вызовом usbnet_read_cmd() читается...

Ещё не нашёл где инициализируется dev->mii.phy_id, то есть при каких условиях дравер вобще может выдать:

Only internal phy supported

P.S. Есть какая-нибудь тулза для командной строки, позволяющая читать/писать эти регистры usb-устройства?

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

Я не понял, что это значит

понятно что драйвер глючит и читает мусор. Если он раньше у кого-то работал и у тебя читает/пишет другие регистры (иначе вообще бы не работало ничего) - только из mdio мусор. По лёгкому что можно попробовать - вставить задержку тут

dm_write_reg(dev, DM_SHARED_ADDR, phy ? (reg | 0x40) : reg);
udelay(10);
dm_write_reg(dev, DM_SHARED_CTRL, phy ? 0xc : 0x4);

при чтении

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L116

и записи

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L159

возможно когда этот адаптер был актуален компьютеры не такие быстрые были :)

Есть какая-нибудь тулза для командной строки, позволяющая читать/писать эти регистры usb-устройства?

посмотри это

https://github.com/wkz/phytool

интерфейс роли не играет - драйвер предоставляет функции доступа к регистрам, в юзерспейс через ioctl их читают/пишут. Просто если ethtool читает мусор то и другие то же самое получат

Ещё не нашёл где инициализируется dev->mii.phy_id

его скорей всего должна найти подсистема ядра которая работает с phy, драйвер предоставляет низкоуровневые ф-ции, но в этом тоже может быть дело - возможно у тебя распаян внешний phy. Попробуй утилиткой почитать другие адреса, всего их может быть по-моему 32 - 0..31. Но это маловероятно, внутренний все равно должен что-то осмысленное возвращать при чтении да и какой смысл китайцам которые экономят на всем распаивать еще что-то если есть встроенный PHY.

spbob
()
Последнее исправление: spbob (всего исправлений: 2)

возможно я ошибаюсь, но мне кажется, кроссовер работает, когда обе стороны поддерживают его

попробуй воткнуть во что-то более современное, чем «10 Мбит хаб»

Harald ★★★★★
()
Ответ на: комментарий от Harald

Забыл написать в стартовом сообщение, что со свичами года 2005 и далее, поддерживающих Auto MDI линкуется на 100 Мбит без проблем. Но тема уже ушла в сторону проблем кода драйвера и ethtool.

А 10 Мбит мне актуально, ИМХО, на этой скорости ethernet как-то стабильнее работает на длинных линках. Я собирался цеплять эту сетёвку к RPi Zero для управления/мониторинга муфельной печью в цеху, где из-за кучи металла wi-fi глохнет.

mky ★★★★★
() автор топика
Ответ на: комментарий от spbob

Я вот и хотел вобще без драйвера чем-то почитать регистры, чтобы понять, что карточка сообщает в config регисте и других до того, как драйвер делает ей reset.

Пытаюсь найти для usb что-то аналогичное isadump/isaset, но пока не получается.

Можно, конечно, что-то попытася написать с помщью libusb, но, если я там напишу с ошибками, какие-нибудь тайминги или ещё что, то получу ошибочное содержимое регистров, буду пытаться понять исходно ошибочные данные. Поэтому и хочется чего-то готового.

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

на длинных линках
USB сетёвка

ХЗ, в таком извращённом режиме (1,5 км) работали только старые 10Мбит. 100Мбит в 10Мбит режиме не тянули. Хабы тоже не тянули. Только 2 карты с «полёвкой» кроссом.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.