Монитор питания по USB

Тема в разделе "Raspberry Pi", создана пользователем Igor68, 12 окт 2018.

  1. Igor68

    Igor68 Гуру

    Кстати это для новых сообщений (СПАСИБО!!!) А когда нормально и сообщений не должно быть... насколько понимаю. Потому и нет вывода.
     
  2. Для чего вы в цикл sleep добавили? Типа если в кольцевом буфере д-месга уже 300 записей, будем тупить 5 минут.
    Я при чтении д-месга, получал все сообщения который были прежде, и парсить дату в сообщении как то ломало. Думаю возьму текущее время в секундах, добавлю пару секунд и буду матчить записи которые будут поступать только после этого времени, тренировался на кошках на флешках, устанавливал, извлекал и ловил сообщения.
    Код (Bash):

    #!/bin/bash

    function get_time() {
      local __var=$1
      local t="$(date +%s)"
      t=$((${t#0}))
      eval $__var="'$t'"
    }

    function dmesg_handle() {
      local start_time
      local current_time
      get_time start_time
      start_time=$((${start_time}+2))

      dmesg -wktc |while read line; do
      get_time current_time
      if [ "$current_time" -gt "$start_time" ]; then
        if [[ $line == *"New USB device found"* ]]; then
          echo "USB plugged"
        fi
        if [[ $line == *"USB disconnect"* ]]; then
          echo "USB unplugged"
        fi
      fi
      done
    }

    dmesg_handle
     
    Для отлова Under и normalized такой фокус не прошел, вообще ничего не ловилось, пришлось отказаться от фиксации времени.
    Вот и со слипом «Меня терзают смутные сомнения»(C)
    Многие вещи, на первый взгляд кажущиеся очевидными, порой оказываются не очень понятными.
    Например для нагрузки процессора, imho самого энергоемкого устройства на малине, вы нагружаете ssh клиентами (интенсивная нагрузка только в момент хендшейка), иксами (я вообще не понимаю зачем иксы для устройства на батарейках), вместо того чтоб нагрузить все ядра процессора на 100% обычным рандомом. Каждый художник видит этот мир по своему :):)
    А я вот у вас хотел поинтересоваться, как на малине вы обычно останавливаете выдачу питания для юсб-порта?
    Вопрос практический, юсб-модем порой виснет намертво, перестает отвечать драйверу, лечится только снятием питания.
     
  3. Igor68

    Igor68 Гуру

    Для чего вы в цикл sleep добавили?

    Да просто при тесте для наглядности... и echo тоже...
    А зачем иксы? Я ими и не пользуюсь... вот только удобно gedit применять и иногда Arduino IDE... Всё на устройстве... редактирую, компилю, испытываю... а иногда меняю прошивку в ардуине применяя Arduino IDE. Всё делаю на устройстве в RAM-диске и потом сохраняю на его же microSD... не таскать же его по wifi туда-сюда. Вот и держу соединение по ssh с кючом -X.
     
  4. Igor68

    Igor68 Гуру

    Нет это пока не делаю... но заметил что оно (Питание) подаётся на устройства (смотрел по светодиодам на подключенной ардуине и шилдам на ней) после окончания загрузки системы. Думаю это после запуска подгруженного модуля... ведь не сразу после подачи питания.
    думаю надо поискать по lsmod
     
  5. Ясна, типа иксы это не через wifi...
    А я по старинке по scp файло туда-сюда передаю.
    Вы же собирались отключать, чего темнить, расскажите как это делать будете.
    П.С. Выгружая/загружая модули ядра вы надеетесь управлять линей VBUS юсб-порта, удачи. Чтоб не терять времени, сначала убедитесь что она там есть.
     
    Последнее редактирование: 17 окт 2018
  6. Igor68

    Igor68 Гуру

    Кстати вот пытаюсь... читаю тут:
    http://sysadm.pp.ua/linux/usb.html
    https://ru.stackoverflow.com/questions/20539/Управление-питанием-usb-портов
    https://unixforum.org/viewtopic.php?t=127154
    Ну и конечно любая перезагрузка... reboot выключает питание... ну и после запуска включает. Смотрю по светодиодам питания контроллера на шилдах и ардуине. Пробую по ссылкам, что указал.
     
  7. Вы сами то проверяли эти ссылки на малине?
    Берете светодиод с резистором для ограничения по току и подключаете к юсб-порту снимаете питание с порта, самая честная проверка.
    Минимум 2 секунды как обеспечиваете таким отключением?
     
    Последнее редактирование: 17 окт 2018
  8. Igor68

    Igor68 Гуру

    ...Говорю ведь: ПРОБУЮ... ЧИТАЮ... Я не сказал, что всё работает. Но честно сказать мне конкретно надо: сохранить данные и poweroff(halt). А выключение порта USB рассматриваю... пока рассматриваю как ещё один вариант.
    Вот нихрена по написанному не выходит... ПРОБУЮ... ИЩУ. Но ведь система включает и выключает... может это и не важно в моём случае. Но ребятам бы неплохо бы передёргивать зависшие USB устройства.
     
  9. Igor68

    Igor68 Гуру

    Вот кстати:
    Тут применение и др.
    https://www.raspberrypi.org/forums/viewtopic.php?t=93463
    позволяет снимать питание именно на малине с USB... может кому надо передёргивать устройство на USB. Кому-то модем зависший... ну и др.
    Исходник и инструкция тут
    https://github.com/codazoda/hub-ctrl.c
    Надо установить:
    sudo apt-get install libusb-dev
    откомпилировать один файл на Си(в исходнике):
    gcc -o hub-ctrl hub-ctrl.c -lusb
    Ну и там по первой ссылке есть фото... где какой порт.

    Кстати и мне будет пригодно... ардуина с шилдами бывает зависает... не часто, но бывает. А это один из вариантов.
    Как пример по ссылке:
    Код (Text):

    Reset ETH 0, and I lost my connection (have to reboot)
    sudo ./hub-ctrl -h 0 -P 1 -p 0 ; sleep 3; sudo ./hub-ctrl  -h 0 -P 1 -p 1

    Reset all USB and ETH
    sudo ./hub-ctrl -h 0 -P 2 -p 0 ; sleep 3; sudo ./hub-ctrl  -h 0 -P 2 -p 1

    Reset USB 4
    sudo ./hub-ctrl -h 0 -P 3 -p 0 ; sleep 3; sudo ./hub-ctrl  -h 0 -P 3 -p 1

    Reset USB 2
    sudo ./hub-ctrl -h 0 -P 4 -p 0 ; sleep 3; sudo ./hub-ctrl  -h 0 -P 4 -p 1

    Reset USB 3
    sudo ./hub-ctrl -h 0 -P 4 -p 0 ; sleep 3; sudo ./hub-ctrl  -h 0 -P 4 -p 1
    тут перезапуск - выключение на 3 секунды.
    Работает:)... молодцы ребята!!!!
     
  10. Включил малину, проверил питание на 4-х юсб-портах, везде 5V
    Пытаюсь отключить питание для второго порта.
    Код (Bash):
    pi@raspberrypi:~/hub $ sudo ./hub-ctrl -v -h 0 -P 2 -p 0
    Hub #0 at 001:002
     INFO: individual power switching.
     WARN: Port indicators are NOT supported.
     Hub Port Status:
      Port 1: 0000.0503 highspeed power enable connect
      Port 2: 0000.0100 power
      Port 3: 0000.0100 power
      Port 4: 0000.0100 power
      Port 5: 0000.0100 power
     Hub Port Status:
      Port 1: 0000.0503 highspeed power enable connect
    Send control message (REQUEST=1, FEATURE=8, INDEX=2)
     Hub Port Status:
      Port 1: 0000.0503 highspeed power enable connect
      Port 2: 0000.0000
      Port 3: 0000.0100 power
      Port 4: 0000.0100 power
      Port 5: 0000.0100 power
    Проверяю питание на 4-х юсб-портах, везде 0V
    Включаю питание для второго порта.
    sudo ./hub-ctrl -v -h 0 -P 2 -p 1
    Проверяю питание на 4-х юсб-портах, везде 5V
    Повторяю отключение для портов 3, 4, 5 - питание не отключается, на всех портах остается 5V.
    Опыты проводил на ‘Raspberry Pi Model B+ V1.2’
    Если загрузились с внешнего usb-hdd и захотели отключить зависший юсб-модем, отключив питание таким образом со всех портов сразу, можете получить неприятный сюрприз:)
     
    Igor68 нравится это.
  11. Igor68

    Igor68 Гуру

    Я опыт проводил на Raspberry Pi3... там на форуме был разговор про Raspberry Pi2... а на модели Pi B+ вроде как 2 USB... вполне может быть это аппаратные различия. Сам исходник на Си не смотрел... видите ли был 3-й час ночи или около того. Всё перед сном. Надо посмотреть исходник.
     
  12. Igor68

    Igor68 Гуру

    Как аз в моём случае и USB-вебкамера и USB-serial для аруины передёргивать при неработе самое то. Осталось только контролировать просадку питания - собственно в этом и вопрос.
     
  13. Igor68

    Igor68 Гуру

    Это ведь не только мне
    Но ведь не плохо? Согласитесь!
     
  14. А чему радоваться, хотел выключить один порт, а выключил все разом.
    Минимальный уровень заряда лития 2,7В, критический 2,5В конвертер dc/dc step-up и с меньшего напряжения вам на выходе 5 вольт вытянет, какие просадки по питанию контролировать будите?
    Плавного падения можете не дождаться, после критического уровня, контроллер заряда, чтоб не убить аккумулятор жестоким обращением, просто выключит dc/dc конвертер при минимальном уровне.
     
  15. Igor68

    Igor68 Гуру

    Понял... сейчас попробую... выключение портов.
     
  16. Igor68

    Igor68 Гуру

    Выключаю USB2(там у меня ардуина с шилдами).... верно:
    Код (Text):
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    VIDIOC_DQBUF: No such device
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    VIDIOC_DQBUF: No such device
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    send CMD3 error! ...dev: 1  addr: 144
    VIDIOC_DQBUF: No such device
    send CMD16 error! ...dev: 1  addr: 144
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    send CMD3 error! ...dev: 1  addr: 144
    VIDIOC_DQBUF: No such device
    send CMD16 error! ...dev: 1  addr: 144
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    VIDIOC_DQBUF: No such device
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    send CMD3 error! ...dev: 1  addr: 144
    send CMD16 error! ...dev: 1  addr: 144
    Выключилась и камера и ардуина с шилдами
    и новый запуск:
    Код (Text):
    www-data@pi02:~/ramdisk/mainwork_17_10_2018/work$ ./work.sh start

    >>> ARBOT (Дата:24.09.2018 Вурсия:02.01.01) <<<
    servoANDmotor: no process found
    sonar: no process found
    wsbots: no process found
    camwork: no process found
    Модуль управления приводами...................... дата и версия: Дата: 03.10.2018  Весия: 01.01.01
    Модуль сонара ультразвукового.................... дата и версия: Дата: 10.10.2018  Весия: 01.02.04
    /dev/ttyUSB0: No such file or directory
    Модуль сервера доступа по HTML через websocket... дата и версия: Дата: 08.10.2018  Весия: 01.02.04
    Модуль работы с WEB-камерой...................... дата и версия: Дата: 03.10.2018  Весия: 01.01.02
    res=0
    BMP filename:  work.bmp
    Size Struct info 124 dec   7c hex
    Version "5"
    --- step x 3
    --- step y 1920
    ---------------------------------------------------------------------------------
    Type         : 4d42
    Size          : 921738 bytes
    Start addr: 8a hex
    ---------------------------------------------------------------------------------
    Widht :  640
    Haight : 480
    Bit in Pixel(color) 24
    res=0
    www-data@pi02:~/ramdisk/mainwork_17_10_2018/work$ Not camera detect
    и вот запуск после включения этого USB2:
    Код (C++):
    www-data@pi02:~/ramdisk/mainwork_17_10_2018/work$ ./work.sh start

    >>> ARBOT (Дата:24.09.2018 Вурсия:02.01.01) <<<
    servoANDmotor: no process found
    sonar: no process found
    wsbots: no process found
    camwork: no process found
    Модуль управления приводами...................... дата и версия: Дата: 03.10.2018  Весия: 01.01.01
    Модуль сонара ультразвукового.................... дата и версия: Дата: 10.10.2018  Весия: 01.02.04
    receive ansver CMD16 error! ...dev: 1  addr: 144
    receive ansver CMD3 error! ...dev: 1  addr: 144
    receive ansver CMD16 error! ...dev: 1  addr: 144
    receive ansver CMD3 error! ...dev: 1  addr: 144
    receive ansver CMD16 error! ...dev: 1  addr: 144
    receive ansver CMD3 error! ...dev: 1  addr: 144
    receive ansver CMD16 error! ...dev: 1  addr: 144
    receive ansver CMD3 error! ...dev: 1  addr: 144
    receive ansver CMD16 error! ...dev: 1  addr: 144
    receive ansver CMD3 no main CMD! ...dev: 1  addr: 144 sendCMD: 03 recvCMD: 10
    send bytes: 01 03 00 90 00 08 21 44
    recv bytes: 01 10 00 90 00 08 E2 C1
    Модуль сервера доступа по HTML через websocket... дата и версия: Дата: 08.10.2018  Весия: 01.02.04
    Модуль работы с WEB-камерой...................... дата и версия: Дата: 03.10.2018  Весия: 01.01.02
    res=0
    BMP filename:  work.bmp
    Size Struct info 124 dec   7c hex
    Version "5"
    --- step x 3
    --- step y 1920
    ---------------------------------------------------------------------------------
    Type         : 4d42
    Size          : 921738 bytes
    Start addr: 8a hex
    ---------------------------------------------------------------------------------
    Widht :  640
    Haight : 480
    Bit in Pixel(color) 24
    res=0
    www-data@pi02:~/ramdisk/mainwork_17_10_2018/work$ start cam loop...
    BMP filename:  work.bmp
    Size Struct info 124 dec   7c hex
    Version "5"
    --- step x 3
    --- step y 1920
    ---------------------------------------------------------------------------------
    Type         : 4d42
    Size          : 921738 bytes
    Start addr: 8a hex
    ---------------------------------------------------------------------------------
    Widht :  640
    Haight : 480
    Bit in Pixel(color) 24
     
    ...с номерами портов конечно что-то не то... но неприятно то, что устройства меняют имя по ls /dev
    пример:
    Код (Text):
    ttyUSB1
    video1
    конечно для тех у кого диск SSD/HDD по USB это некий ступор... понимаю! Но если надо по WIFI клиенту сказать о выключении на последнем издыхании... отключив всё наверное пригодно. Простите далее не разбирался.
     
  17. Igor68

    Igor68 Гуру

    Производилось при запущенном пакете программ... но стоит остановить работу этого пакента то сразу при перевключении порта имена по ls /dev восстановлены:
    Код (Text):
    ttyAMA0
    video0
    Ну тут простите... надо либо переделать, либо подстроиться под возможность переподключения. Возможно в ряде случаем не пригодно. Тут ещё и ETH выключается... но WIFI на месте.
     
  18. Igor68

    Igor68 Гуру

    какие просадки по питанию контролировать будите?
    Именно кратковременную нестабильность этого самого dc/dc конвертора при увеличении нагрузки, чем обуславливается достаточная просадка. Это как вариант. Конечно можно было взять и плату с интерфейсом для этих целей... но вот я и сам дурак... да и в конструкцию бутерброда она сразу не вписалась. А скорее всего просто я и сам дурак... а может не подумал, да и i2c для сонара сразу сделал.