本文描述一种基于USB的单反相机远程控制方法,适用于具有USB HOST接口的单片机或其它各类控制芯片。
本文不对USB底层通信逻辑及协议指令做讲解,单单描述实现步骤。
首先,单反相机属于USB设备端,而我们的控制设备属于HOST,当USB设备接入时,首先进入枚举过程,在这个过程里我们可以获得单反相机的很多信息,包括协议版本,序列号,设备名称,以及具体设备类型。
从接口描述符里,我们可以得知class的值为0x06,即Image Class,官方的class分类如下
https://www.usb.org/defined-class-codeshttps://www.usb.org/defined-class-codes好的,知道什么类型那就好办了,因为官方规定好了不同类型的设备使用什么传输方式。这里推荐一款软件,自带解析器,可以直接看到设备的信息。比如我现在电脑上插了一个USB摄像头,可以读到Class为0x0E,正是Video设备。我现在手头没有单反相机,所以没法演示,原理是一样的。
单反相机的话,以我目前开发过的几款来看,几乎普遍有以下几个特点。
- 属于0x06 Image Class
- 除默认0号端点外,关于Image Class通信需要额外3个端点,其中1个使用批量传输IN,1个使用批量传输OUT,1个使用中断传输
- 使用PTP协议,即(PIMA 15740,即ISO 15740)
接下来就是按这个协议去开发就可以了,PTP的Operation code如下,在单反相机控制上,很多都是用不上的,当然也有很多指令是厂商自定义的,也就是你无法从标准PTP协议文档上去找到。但首先建立连接的OpenSession(0x1002)都是必不可少的,接下来就是根据具体厂商的协议指令去实现控制了。
如果说厂家没有提供具体协议,那就只能根据已有的控制设备,通过USB总线监听设备去抓包了。
附上佳能单反相机的控制软件
https://download.csdn.net/download/u011436603/88902663
附上一段佳能单反的抓包数据供参考