USB-I2C 인터페이스를 사용하여 노트북이 SRF02 센서와 통신하도록 하려고 합니다. 내 노트북에는 Debian Jessie가 실행되고 있습니다.
질문:
실행 중에는 sudo i2cdetect -y 0
어떤 장치도 전혀 볼 수 없습니다. 이는 포트 1과 동일하지만 그 외에는 많은 장치가 임의의 위치에 표시됩니다(예를 들어 포트 4는 거의 완전한 테이블을 표시합니다). EX70은 장치의 기본 위치인 3개 미만의 포트를 차지하지 않습니다.
부팅 시 i2c-dev를 자동으로 로드하려고 시도했지만 문제가 지속됩니다. 모듈 문서에는 FTDI VCP 드라이버가 필요하다고 나와 있지만 이는 Linux 커널에 포함되어야 합니다.
저는 정확히 동일한 장치와 설정을 사용하여 Windows 8을 실행하는 컴퓨터에서 데이터를 얻을 수 있었기 때문에 이것이 소프트웨어 문제라고 확신합니다.
이에 대한 게시물이 많았지만 모두 특별히 Raspberry Pi를 기반으로 하며 USB 대신 Raspbian 및 GPIO 핀을 사용합니다.
편집: 다음은 장치를 연결한 후 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
. 커널 드라이버가 로드되지 않은 경우 grep
공급업체/제품 조합( 0403:6001
, 에도 표시됨 lsusb
)을 검색(예: Google 또는 커널 소스 사용)하고 장치용 커널 드라이버를 찾아볼 수 있습니다.
다른 답변에 언급된 드라이버는 bcm2708
전혀 관련이 없습니다. 이것은 노트북이 아닌 Raspberry Pi와 같은 I2C 버스용 드라이버입니다.
그러나 우리는 이미 직렬 인터페이스만 제공하고 커널 I2C 인프라에 대한 연결은 제공하지 않는 작동하는 드라이버를 보유하고 있습니다. 그러니 lmsensors
잠깐만 i2detect
요. 이 중 아무 것도 작동하지 않습니다(추가 드라이버를 작성하거나 찾지 않는 한).
이것웹사이트귀하의 의견에서 언급한 USB-I2C 변환기는 직렬 링크를 통해 사용되는 프로토콜을 설명합니다. 즉, 일련의 바이트를 보내고 선택적으로 응답으로 일련의 바이트를 받습니다. 명령 순서는 다음과 같습니다.
<command-byte> <address> <register (0-2 bytes)> <data byte count (0-1 bytes)> <write data>
그리고 웹페이지SRF 02센서 칩의 레지스터가 어떻게 생겼는지 설명합니다: 읽을 수 있는 레지스터 6개, 쓸 수 있는 명령 레지스터 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
하고 재부팅하세요.