LINUX.ORG.RU

usb usb3-port2: disabled by hub (EMI?), re-enabling

 , ,


0

2

Приветствую.

Есть переходник - USB-RS232.

Его задача - бесконечно читать показания девайса по Modbus по принципу «послал запрос - дождался ответа».

Разовый запрос-ответ работает. Цикличный порождает сабжевую ошибку:

[13487.848876] usb 3-2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.54
[13487.848885] usb 3-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[13487.848888] usb 3-2: Product: USB2.0-Ser!
[13487.849620] ch341 3-2:1.0: ch341-uart converter detected
[13487.851513] ch341-uart ttyUSB0: break control not supported, using simulated break
[13487.851624] usb 3-2: ch341-uart converter now attached to ttyUSB0
[13510.183654] usb usb3-port2: disabled by hub (EMI?), re-enabling...
[13510.183691] usb 3-2: USB disconnect, device number 17
[13510.184786] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[13510.184810] ch341 3-2:1.0: device disconnected

Код из серии код удален благодаря слабовидящим, которые вместо обсуждения физической потери железки, обсуждают код

1. Одиночные команды работают. Типа ...одиночный код... - не вылетает. Только при агрессивном использовании;

2. Этот же компьютер (MBP2012), этот же переходник, на этом же порту - работает под Виндой, по этому же алгоритму, ничего не теряя;

3. Согласно показания осциллографа, никаких всплесков на D+\D- нет.

Кто-нибудь сталкивался с подобным?

Может линуксовый драйвер по умолчанию выдает небольшую мощность на порт?

Благодарю.

★★★★★

Последнее исправление: windows10 (всего исправлений: 2)
Ответ на: комментарий от firkax

cat /dev/ttyUSB0 это что? Сомневаюсь что эта команда надёжно делает что-то полезное. Перепиши на нормальный язык с правильным ожиданием и парсингом ответа.

Это для наглядности. Без разницы, могу просто во второй консоли открыть screen /dev/ttyUSB0 2400

Меня интересует только потеря железки.

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

Не во второй, это должен быть один поток. Убедись, что ответ действительно полностью пришёл, перед тем как слать следующий запрос. Никакие стандартные команды тебе такую проверку сделать не смогут, они же не знают что ты ожидаешь прочитать. Пиши на си, ну или на пхп хотя бы (fwrite, fread и парсинг).

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

Проверка что весь ответ действительно пришёл там была? Или там было «что-то пришло, наверно это ответ, идём дальше»?

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

И что у тебя там по физике? Длина проводов, тип устройства на том конце? Если да то готовься ловить статику, импульсные помехи и делать гальваническую развязку на оптопарах (есть очень быстрые).

anonymous
()
Ответ на: комментарий от firkax
$fd = dio_open('/dev/ttyUSB0', O_RDWR | O_NOCTTY | O_NONBLOCK);
$config = [
    'baud' => 2400,
    'bits' => 8,
    'stop' => 1,
    'parity' => 0
];
dio_tcsetattr($fd, $config);
while (true) {
	$w = dio_write($fd, "QPIGS\xb7\xa9\r");
	while ($data!="\r") {
		$data = dio_read($fd, 1);
		echo $data;
    	}
	usleep(10000);
}

Ну при чем здесь код к физическому отключению переходника от порта?)

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

А что, никого не научили, что ВООБЩЕ писать и читать в цикле на одно и то же устройство - это очень плохая идея?

Лол, а что, есть другие методы обмена информацией по Modbus? :))

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

И что у тебя там по физике? Длина проводов, тип устройства на том конце? Если да то готовься ловить статику, импульсные помехи и делать гальваническую развязку на оптопарах (есть очень быстрые).

Из-за тебя я стал верить в Бога Билла Гейтса, частичка ауры которого, сокрытая в каждой копии Windows, огораживает подключенные устройства от статики и импульсных помех =)

По физике - https://cdn.27.ua/sc--media--prod/default/00/fe/b0/00feb0a9-46f4-4d02-92da-f0...

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

С чего ты взял что он физически отключается?

Так у тебя баг в коде, $data=='\r' от прошлой итерации остаётся.

Если это опять псведокод и на самом деле бага нет, то: ответ всегда из ровно одной строки, заканчивается \r ? Что-то ещё приходить не может? Мне кажется там переполняется буфер приёма или отправки и переходник из-за этого ребутает линк в качестве способа убрать ошибки.

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

А еще есть методы обмена непосредственно по USB. Посчитайте, сколько раз на вашей машине за секунду выполняется пустой цикл и сравните со скоростью usb-порта. Одно в другое вмещается?

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

Меня не твой шнурок интересует а что на другом конце и как далеко до него тянуться провода. Гуголь по команде QPIGS говорит что это инвертер т.е. та самая шумная силовая часть от которой хорошо бы развязаться.

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

О !

Вот с буфером ты можешь быть прав, возможно я допустил ошибку в софте тем, что открываю порт, а потом с ним работаю в цикле. Возможно в цикле его нужно открывать, писать, читать, закрывать. И так по кругу. Щас попробую.

windows10 ★★★★★
() автор топика

Кто-нибудь сталкивался с подобным?

Может линуксовый драйвер по умолчанию выдает небольшую мощность на порт?

Даже не читая всё.

disabled by hub (EMI?), re-enabling…

По своему опыту я ловил такое на двух вещах: 1. на USB-хабах, которым не хватает мощности (нужно дополнительное питание и не факт что оно поможет). 2. на хреновых кабелях, где периодически отваливаются устройства.

Может линуксовый драйвер по умолчанию выдает небольшую мощность на порт?

По спецификации USB 2.0 - выдаёт всего 2.5W (0.5A), USB3.0 - 4.5W (0.9A). И то и другое - до зарядника не дотягивают, который может выдавать 2А, а хороший зарядник - 3А. Было такое что заменил короткий кабель USB-микрофона на более длинный - сразу начались провалы и хрип при записи звука. Что ему не хватает: тока или из-за помех - я так и не выяснил.

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

Возможно в цикле его нужно открывать, писать, читать, закрывать. И так по кругу.

Нет, тебе надо один раз открыть файл а далее в цикле послать команду, занулить приемный буфер, в цикле добавлять в приемный буфер принятый байт и если этот байт «\r» то вывести содержимое приемного буфера и выйти из цикла чтения.

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

Нет, тебе надо один раз открыть файл а далее в цикле послать команду, занулить приемный буфер, в цикле добавлять в приемный буфер принятый байт и если этот байт «\r» то вывести содержимое приемного буфера и выйти из цикла чтения.

Предыстория этого всего такова:

Был девайс, Orange Pi. Там использовался встроенный UART, который /dev/ttyS0. Все работало, пока мои лапки не перепутали полярность.

Пока едет вторая апельсина, этот же самый работающий ранее код с минимальными изменениями перекинул на домашний сервер.

Поэтому и подумал что дело в питании.

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

Ты мог бы это все и на копеечную esp32 повесить и анонсить по ble или пихать в mqtt по wifi.

Нет.

Во-первых, мне нужна красивая статистика.

Во-вторых, у ESP32 небольшой ресурс записи флешки + тупорылая её реализация скопом, а не побайтно. Даже если я поставлю запись раз в час, что чревато потерей статистики - ее хватит на плюс-минус два года.

В-третьих вафля тут крайне лаговая, а мне нужен реалтайм.

В-четвертых, мне нужна не только статистика, а еще и управление - смена режимов в зависимости от времени суток, нагрузки дома, напряжения солнечных панелей, etc.

На ESPшке оно у меня уже было. Отказался.

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

Во-первых, мне нужна красивая статистика.

Без проблем, делай какую угодно статистику. ESP это только агент.

Во-вторых, у ESP32 небольшой ресурс записи флешки + тупорылая её реализация скопом, а не побайтно.

Любая флеш-память стирается и пишется блоками (как и диски с их секторами).

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

Не используй эту флеш-память не по назначению, там нет балансировки. Если хочется вести лог то решается sd картой или emmc модулем.

В-третьих вафля тут крайне лаговая, а мне нужен реалтайм.

Ну я х.з. можешь и эзернет по витухе при желании.

В-четвертых, мне нужна не только статистика, а еще и управление - смена режимов в зависимости от времени суток, нагрузки дома, напряжения солнечных панелей, etc.

Да без проблем, любая система домашней автоматизации или даже SCADA. ESP это просто агент.

anonymous
()