在 Debian 上啟用 I2C - i2cdetect 不顯示設備
我試圖讓我的筆記型電腦與使用 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 基礎設施沒有任何連接。所以
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
作為地址,以及 USB-I2C 適配器所需的命令是55
。因此,您通過串列發送的完整序列是55 E1 00 01
,然後您將讀取一個字節作為答案。您可以從命令行執行此操作:
$ printf '\x55\xE1\x00\x01' > /dev/ttyUSB0 $ hexdump -n 1 -e '"%02x \n"' < /dev/ttyUSB0
或者您可以
/dev/ttyUSB0
用您喜歡的語言打開,然後使用您的語言提供的命令讀取和寫入字節。