我正在尝试让我的笔记本电脑与使用 USB-I2C 接口的 SRF02 传感器进行通信。我的笔记本电脑运行的是 Debian Jessie。
问题:
当我跑步时,sudo i2cdetect -y 0
我根本看不到任何设备。这与端口 1 相同,但除此之外,许多设备显示在随机位置(例如端口 4 显示几乎完整的表)。 EX70 不占用 < 3 个端口,这是设备的默认位置。
我已尝试在启动时自动加载 i2c-dev 但问题仍然存在。模块文档说您需要 FTDI VCP 驱动程序,但这应该包含在 Linux 内核中。
我确信这是一个软件问题,因为我能够使用完全相同的设备和设置从运行 Windows 8 的计算机获取数据。
已经有很多关于此的帖子,但所有帖子都是专门基于 Raspberry Pi 的,并使用 Raspbian 和 GPIO 引脚而不是 USB。
编辑:这是插入设备后 dmesg 输出的链接。日志太大,无法在此发布:P http://pasted.co/38dc9292
提前致谢,
最大限度
答案1
相关行dmesg
是:
[ 518.172735] usb 1-3: new full-speed USB device number 4 using xhci_hcd
[ 518.306677] usb 1-3: New USB device found, idVendor=0403, idProduct=6001
[ 518.306686] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 518.306689] usb 1-3: Product: FT232R USB UART
[ 518.306692] usb 1-3: Manufacturer: FTDI
[ 518.306695] usb 1-3: SerialNumber: AK04P01W
[ 518.309382] ftdi_sio 1-3:1.0: FTDI USB Serial Device converter detected
[ 518.309442] usb 1-3: Detected FT232RL
[ 518.309445] usb 1-3: Number of endpoints 2
[ 518.309448] usb 1-3: Endpoint 1 MaxPacketSize 64
[ 518.309450] usb 1-3: Endpoint 2 MaxPacketSize 64
[ 518.309453] usb 1-3: Setting MaxPacketSize 64
[ 518.309771] usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB0
这些是相关的行,因为根据时间戳,它们属于在一起,作为对插入设备时发生的情况的反应,并且它们在启动消息之后发生足够长的时间,因此与此没有任何联系。
正如您所看到的,检测到一个新的 USB 设备,您将获得该设备的详细信息,并且作为反应,ftdi_sio
加载模块,该模块提供特殊的设备文件/dev/ttyUSB0
。如果没有加载内核驱动程序,您可以搜索(例如使用 google 或grep
内核源代码)供应商/产品组合(0403:6001
,也在 中显示lsusb
),然后尝试查找该设备的内核驱动程序。
其他答案中提到的驱动程序bcm2708
根本不相关:这是 I2C 总线的驱动程序,例如 Raspberry Pi,而不是您的笔记本电脑。
但我们已经有一个工作驱动程序,它只提供串行接口,与内核 I2C 基础设施没有连接。所以lmsensors
,i2detect
等等,所有这些都不起作用(除非您编写或找到额外的驱动程序)。
这网站您在评论中提到的 USB-I2C 转换器解释了通过串行链路使用的协议:您发送一个字节序列,然后可选地接收一个字节序列作为答案。命令序列看起来像
<command-byte> <address> <register (0-2 bytes)> <data byte count (0-1 bytes)> <write data>
以及网页SRF 02解释了传感器芯片的寄存器的样子:6个可以读取的寄存器,1个可以写入的1个命令寄存器。
因此,例如,要读取版本,您需要01
从寄存器 中读取字节00
,默认芯片地址是E0
,LSB 是 R/W 位,因此您可以使用E1
as 地址,以及 USB-I2C 适配器所需的命令是55
。因此,您通过串行发送的完整序列是55 E1 00 01
,然后您将读取一个字节作为答案。
您可以从命令行执行此操作:
$ printf '\x55\xE1\x00\x01' > /dev/ttyUSB0
$ hexdump -n 1 -e '"%02x \n"' < /dev/ttyUSB0
或者,您可以/dev/ttyUSB0
用您最喜欢的语言打开,然后使用您的语言提供的命令读取和写入字节。
答案2
有两个i2c
内核模块:
i2c-bcm2708
和
i2c-dev
将两者添加到/etc/modules
,然后重新启动。