在 Debian 上启用 I2C - i2cDetect 不显示设备

在 Debian 上启用 I2C - i2cDetect 不显示设备

我正在尝试让我的笔记本电脑与使用 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 基础设施没有连接。所以lmsensorsi2detect等等,所有这些都不起作用(除非您编写或找到额外的驱动程序)。

网站您在评论中提到的 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 位,因此您可以使用E1as 地址,以及 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,然后重新启动。

相关内容