Debian

在 Debian 上啟用 I2C - i2cdetect 不顯示設備

  • January 29, 2017

我試圖讓我的筆記型電腦與使用 USB-I2C 介面的 SRF02 感測器通信。我的筆記型電腦正在執行 Debian Jessie。

問題:

當我跑步時,sudo i2cdetect -y 0我根本看不到任何設備。這與埠 1 相同,但除此之外,許多設備顯示在隨機位置(例如,埠 4 顯示幾乎完整的表)。在所有小於 3 的埠上均未採用 EX70,這是設備的預設位置。

我嘗試在啟動時自動載入 i2c-dev,但問題仍然存在。模組文件說您需要 FTDI VCP 驅動程序,但這應該包含在 Linux 核心中。

我確信這是一個軟體問題,因為我能夠使用完全相同的設備從執行 Windows 8 的電腦上獲取數據並進行設置。

已經有很多關於這個的文章,但它們都是專門基於 Raspberry Pi 的,並且使用 Raspbian 和 GPIO 引腳而不是 USB。

編輯:這是插入設備後到 dmesg 輸出的連結。日誌太大,無法在此處發布:P http://pasted.co/38dc9292

提前致謝,

最大限度

相關行來自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 位,因此您使用E1作為地址,以及 USB-I2C 適配器所需的命令是55。因此,您通過串列發送的完整序列是55 E1 00 01,然後您將讀取一個字節作為答案。

您可以從命令行執行此操作:

$ printf '\x55\xE1\x00\x01' > /dev/ttyUSB0
$ hexdump -n 1 -e '"%02x \n"' < /dev/ttyUSB0

或者您可以/dev/ttyUSB0用您喜歡的語言打開,然後使用您的語言提供的命令讀取和寫入字節。

引用自:https://unix.stackexchange.com/questions/340789