4

I'm using gphoto2 to capture images with my nikon dslr connected to a raspberry Zero W

My problem is that the camera stayes awake as long as there is a usb connection.

How can I eject the USB connection?

dmesg:

[  229.503626] Indeed it is in host mode hprt0 = 00021501
[  229.713448] usb 1-1: new high-speed USB device number 2 using dwc_otg
[  229.713817] Indeed it is in host mode hprt0 = 00001101
[  229.954634] usb 1-1: New USB device found, idVendor=04b0, idProduct=0422, bcdDevice= 1.03
[  229.954680] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  229.954694] usb 1-1: Product: NIKON DSC D700
[  229.954703] usb 1-1: Manufacturer: NIKON
[  229.954713] usb 1-1: SerialNumber: 000002138587
[  280.823566] fuse init (API version 7.27)
[  293.303738] usb 1-1: USB disconnect, device number 2
[ 7518.546891] Indeed it is in host mode hprt0 = 00021501
[ 7518.756694] usb 1-1: new high-speed USB device number 3 using dwc_otg
[ 7518.757056] Indeed it is in host mode hprt0 = 00001101
[ 7518.997887] usb 1-1: New USB device found, idVendor=04b0, idProduct=0422, bcdDevice= 1.03
[ 7518.997934] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7518.997947] usb 1-1: Product: NIKON DSC D700
[ 7518.997956] usb 1-1: Manufacturer: NIKON
[ 7518.997965] usb 1-1: SerialNumber: 000002138587
[ 7544.347332] usb 1-1: USB disconnect, device number 3
[ 8400.807853] Indeed it is in host mode hprt0 = 00021501
[ 8401.017718] usb 1-1: new high-speed USB device number 4 using dwc_otg
[ 8401.018079] Indeed it is in host mode hprt0 = 00001101
[ 8401.258897] usb 1-1: New USB device found, idVendor=04b0, idProduct=0422, bcdDevice= 1.03
[ 8401.258945] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 8401.258957] usb 1-1: Product: NIKON DSC D700
[ 8401.258966] usb 1-1: Manufacturer: NIKON
[ 8401.258977] usb 1-1: SerialNumber: 000002138587
[ 8402.857993] usb 1-1: USB disconnect, device number 4
[ 9503.571529] Indeed it is in host mode hprt0 = 00021501
[ 9503.781365] usb 1-1: new high-speed USB device number 5 using dwc_otg
[ 9503.781717] Indeed it is in host mode hprt0 = 00001101
[ 9504.022547] usb 1-1: New USB device found, idVendor=04b0, idProduct=0422, bcdDevice= 1.03
[ 9504.022596] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 9504.022607] usb 1-1: Product: NIKON DSC D700
[ 9504.022617] usb 1-1: Manufacturer: NIKON
[ 9504.022626] usb 1-1: SerialNumber: 000002138587
1

It depends on how your camera detects a USB connection - whether it's by detecting that's power is provided through the USB cable, or whether by detecting that there's an actual USB connection happening in software. In the latter case, there's a software solution that works out-of-the-box, and that's the one you should check first. Provided the camera is the only device connected to the Zero W, you can disable the USB port data connection (not power!) in software:

echo 0 > /sys/devices/platform/soc/20980000.usb/buspower

After this, lsusb will no longer show your camera as a device. If the camera detects this as a disconnection and goes to sleep, then you're in luck! Changing echo 0 to echo 1 and re-running this command will enable the the USB connection again, state of the USB connection will not persist across a reboot AFAIK.


If this does not work out for you, your camera might be using the USB power connection in order to detect whether it's "connected to a PC". In this case, you can use a power switch of some sorts, one that will cut the power connection. I sell this kind of USB switches (for this and many other purposes) on Tindie, here's the schematic I use:

mosfet-driven USB power switch schematic

The data lines and GND pass through unchanged. CTRL is connected to a Raspberry Pi GPIO, +5V is the power line from the Pi Zero, and +5VD is going to the camera. R2 and R3 are used to set the default state of the switch (default off unless set on - vs default on unless set off), you only need one of these at a time. I use IRLML6401 (alternative: CJ2305) for Q2, and 2N2222 (alternative: BC547) for Q1. You can also use a relay to replace the FET - it will be a simpler circuit, but will consume more power.

  • Thanks, you were right..my rpi obviously can't power off usb – user3435167 Mar 24 at 22:05
  • @user3435167 but did the "software switch off" work out in the end? It works with a couple of phones I had to have connected, but didn't work with i.e. a USB microscope I was using (which would switch to the "USB camera mode" even if I just wanted to power it from a laptop). – Арсений Пичугин Mar 25 at 21:56
1

You can download the eject package with sudo apt-get install eject. Here's the eject syntax.

Remember, in order to eject a device, you first need to unmount it.

  • How do I figure out the correct path? The camera is not mounted as a mass storage in order to work with gphoto2 I updated my answer – user3435167 Mar 24 at 13:25
  • @user3435167, is it not listed under /dev/? – David Mar 24 at 13:30
  • No unfortunately pi@raspberrypi:~ $ gphoto2 --auto-detect Modell Port ---------------------------------------------------------- Nikon DSC D700 (PTP mode) usb:001,009 – user3435167 Mar 24 at 13:43
  • Have you checked the /media/user/ directory? – David Mar 24 at 13:46
  • mh what do I have to type to check it? cd /media/user/ didnt work – user3435167 Mar 24 at 13:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.