CentOS 8.0에서 SMBus 장치와 통신하려고 합니다. i2c-tools와 libi2c를 설치했습니다. 행위
find / -name "smbus.h" 2>/dev/null
결과를 반환하지 않습니다. 달리기
i2cdump
작동하지 않습니다.
i2cdump 4 0x12 sp
"Error: Block read failed, return code -6"
주문하다
i2cget
"오류: 읽기 실패"를 반환합니다.
다음 블록에서 읽기 위해 ac 프로그램을 직접 컴파일하려고 합니다.이 가이드하지만 컴파일하려고 하면 다음과 같이 표시됩니다.
"치명적인 오류: i2c/smbus.h: 해당 파일이나 디렉터리가 없습니다."
yum whatprovides */smbus.h
kernel-devel에 대한 일부 결과를 표시하지만 설치가 도움이 되지 않습니다. smbus.h 파일이 비어 있습니다. SMBUS와 통신하는 방법은 무엇입니까?
i2cdetect -l
프로그램
i2c-3 i2c DPDDC-C I2C adapter
i2c-1 i2c i915 gmbus dpc I2C adapter
i2c-4 smbus SMBus I801 adapter at f040 SMBus adapter
i2c-2 i2c i915 gmbus misc I2C adapter
i2c-0 i2c i915 gmbus dpb I2C adapter
통신회사 답변 후 업데이트
i2cDetect -F 4 출력:
Functionalities implemented by /dev/i2c-4:
I2C no
SMBus Quick Command yes
SMBus Send Byte yes
SMBus Receive Byte yes
SMBus Write Byte yes
SMBus Read Byte yes
SMBus Write Word yes
SMBus Read Word yes
SMBus Process Call no
SMBus Block Write yes
SMBus Block Read yes
SMBus Block Process Call no
SMBus PEC yes
I2C Block Write yes
I2C Block Read yes
i2c 감지 4 출력:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- 0b -- -- -- --
10: 10 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
편집 2: 내가 읽으려고 했던 장치가 0x0b인 것을 발견했습니다. 다음을 사용하여 i2c 덤프를 성공적으로 수행할 수 있습니다.
i2cdump 4 0x0b
그러나 이는 오류 검사 기능이 있는 smbus 장치이므로 올바른 명령은 다음과 같습니다.
i2cdump 4 0x0b sp
하지만 이 명령을 사용하면 이 오류가 발생합니다.
오류: 반환 코드 -74로 인해 블록 읽기에 실패했습니다.
답변1
Unix 및 Linux StackExchange에 오신 것을 환영합니다!
이 라이브러리 패키지를 사용하는 자신만의 프로그램을 컴파일하려면 libi2c
해당 개발 패키지도 설치해야 합니다 libi2c-devel
.
i2cdump
및 의 i2cget
경우 유용한 작업을 수행하려면 버스 번호/이름과 버스 주소를 지정해야 하는 것 같습니다.
귀하의 경우 smbus i2c-4
또는 버스 번호 4. 기본적으로 도구는 버스 번호 0(예: SMBus 대신 i2c)을 사용하려고 시도할 수 있으며 해당 버스는 이미 i915 GPU 드라이버의 제어를 받고 있을 수 있으며 이는 명령이 실패하는 또 다른 이유일 수 있습니다.
모든 i2c/SMBus 어댑터가 모든 명령을 지원하는 것은 아닙니다. 먼저 i2cdetect -F 4
SMBus 어댑터가 지원하는 명령을 확인하세요. 출력은 다음과 같습니다:
# i2cdetect -F 4
Functionalities implemented by /dev/i2c-4:
I2C no
SMBus Quick Command yes
SMBus Send Byte yes
SMBus Receive Byte yes
SMBus Write Byte yes
SMBus Read Byte yes
SMBus Write Word yes
SMBus Read Word yes
SMBus Process Call no
SMBus Block Write yes
SMBus Block Read yes
SMBus Block Process Call no
SMBus PEC yes
I2C Block Write yes
I2C Block Read yes
다음과 같이 버스에서 장치 감지를 실행할 수도 있습니다.
# i2cdetect 4
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-4.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- UU -- UU -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 -- -- 34 35 -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
그러면 버스의 간단한 명령에 응답하는 것으로 나타나는 버스 주소 값이 나열됩니다. 유효한 주소 및 버스 명령 목록을 사용하여 버스의 개별 장치 검색을 시작할 수 있습니다.