요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
=====================
I2C Ten-bit Addresses
=====================
The I2C protocol knows about two kinds of device addresses: normal 7 bit
addresses, and an extended set of 10 bit addresses. The sets of addresses
do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
address 0x10 (though a single device could respond to both of them).
To avoid ambiguity, the user sees 10 bit addresses mapped to a different
address space, namely 0xa000-0xa3ff. The leading 0xa (= 10) represents the
10 bit mode. This is used for creating device names in sysfs. It is also
needed when instantiating 10 bit devices via the new_device file in sysfs.
I2C messages to and from 10-bit address devices have a different format.
See the I2C specification for the details.
The current 10 bit address support is minimal. It should work, however
you can expect some problems along the way:
* Not all bus drivers support 10-bit addresses. Some don't because the
hardware doesn't support them (SMBus doesn't require 10-bit address
support for example), some don't because nobody bothered adding the
code (or it's there but not working properly.) Software implementation
(i2c-algo-bit) is known to work.
* Some optional features do not support 10-bit addresses. This is the
case of automatic detection and instantiation of devices by their,
drivers, for example.
* Many user-space packages (for example i2c-tools) lack support for
10-bit addresses.
Note that 10-bit address devices are still pretty rare, so the limitations
listed above could stay for a long time, maybe even forever if nobody
needs them to be fixed.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
7비트와 10비트 주소 공간
1-16I2C 프로토콜에는 일반 7비트 장치 주소와 확장된 10비트 장치 주소가 있습니다. 두 주소 집합은 서로 겹치지 않습니다. 7비트 주소 `0x10`과 10비트 주소 `0x10`은 서로 다른 주소이며, 한 장치가 둘 모두에 응답하도록 구현될 수는 있습니다.
사용자에게 모호하지 않게 보이도록 Linux는 10비트 주소를 별도 사용자 주소 공간 `0xa000`~`0xa3ff`에 매핑합니다. 앞의 `0xa`는 10을 나타내며 10비트 모드임을 표시합니다.
이 매핑은 sysfs 장치 이름을 만들 때 사용하고, sysfs의 `new_device` 파일로 10비트 장치를 생성할 때도 필요합니다.
10비트 주소 장치와 주고받는 I2C 메시지는 7비트 주소 메시지와 형식이 다릅니다. 세부 전송 형식은 I2C 규격을 참조해야 합니다.
프로토콜 주소와 Linux 사용자 표시 주소를 분리합니다.
실제 10비트 주소를 사용자 표시 값으로 바꿉니다.
=====================
I2C Ten-bit Addresses
=====================
The I2C protocol knows about two kinds of device addresses: normal 7 bit
addresses, and an extended set of 10 bit addresses. The sets of addresses
do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
address 0x10 (though a single device could respond to both of them).
To avoid ambiguity, the user sees 10 bit addresses mapped to a different
address space, namely 0xa000-0xa3ff. The leading 0xa (= 10) represents the
10 bit mode. This is used for creating device names in sysfs. It is also
needed when instantiating 10 bit devices via the new_device file in sysfs.
I2C messages to and from 10-bit address devices have a different format.
See the I2C specification for the details.
현재 10비트 주소 지원의 한계
17-33현재 10비트 주소 지원은 최소 수준입니다. 기본 동작은 가능해야 하지만 실제 사용 중 문제가 생길 수 있습니다.
모든 버스 드라이버가 10비트 주소를 지원하지는 않습니다. 하드웨어 자체가 지원하지 않는 경우가 있으며 SMBus는 10비트 주소 지원을 요구하지 않습니다. 코드를 추가한 사람이 없거나 구현이 제대로 동작하지 않는 경우도 있습니다. 소프트웨어 구현인 `i2c-algo-bit`는 동작하는 것으로 알려져 있습니다.
일부 선택 기능도 10비트 주소를 지원하지 않습니다. 예를 들어 드라이버가 장치를 자동 감지하고 생성하는 기능은 10비트 주소를 처리하지 못합니다.
`i2c-tools`를 비롯한 많은 사용자 공간 패키지도 10비트 주소 지원이 없습니다.
10비트 주소 장치는 여전히 매우 드물기 때문에 필요로 하는 사람이 수정하지 않으면 이런 제약은 오랫동안, 어쩌면 계속 남을 수 있습니다.
문제가 생길 수 있는 계층과 알려진 상태입니다.
The current 10 bit address support is minimal. It should work, however
you can expect some problems along the way:
* Not all bus drivers support 10-bit addresses. Some don't because the
hardware doesn't support them (SMBus doesn't require 10-bit address
support for example), some don't because nobody bothered adding the
code (or it's there but not working properly.) Software implementation
(i2c-algo-bit) is known to work.
* Some optional features do not support 10-bit addresses. This is the
case of automatic detection and instantiation of devices by their,
drivers, for example.
* Many user-space packages (for example i2c-tools) lack support for
10-bit addresses.
Note that 10-bit address devices are still pretty rare, so the limitations
listed above could stay for a long time, maybe even forever if nobody
needs them to be fixed.
요약·해설
ten-bit-addresses.rst:1-33Linux는 7비트 주소와 구분하기 위해 10비트 주소를 사용자 공간의 `0xa000`~`0xa3ff`에 매핑합니다. 지원은 최소 수준이므로 컨트롤러, 버스 드라이버와 사용자 도구의 실제 기능을 확인해야 합니다.
원문 분량과 핵심 검토 대상을 요약합니다.
문서의 주요 판단과 동작을 압축합니다.