요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
==========================
Introduzione a I2C e SMBus
==========================
I²C (letteralmente "I al quadrato C" e scritto I2C nella documentazione del
kernel) è un protocollo sviluppato da Philips. É un protocollo a 2 fili (a
velocità variabile, solitamente fino a 400KHz, e in modalità alta velocità fino
a 5 MHz). Questo protocollo offre un bus a basso costo per collegare dispositivi
di vario genere a cui si accede sporadicamente e utilizzando poca banda. I2C è
ampiamente usato nei sistemi integrati. Alcuni sistemi usano varianti che non
rispettano i requisiti originali, per cui non sono indicati come I2C, ma hanno
nomi diversi, per esempio TWI (Interfaccia a due fili), IIC.
L'ultima specifica ufficiale I2C è la `"Specifica I2C-bus e manuale utente"
(UM10204) <https://www.nxp.com/docs/en/user-guide/UM10204.pdf>`_ pubblicata da
NXP Semiconductors, al momento della scrittura si tratta della versione 7
SMBus (Bus per la gestione del sistema) si basa sul protocollo I2C ed è
principalmente un sottoinsieme di protocolli e segnali I2C. Molti dispositivi
I2C funzioneranno su SMBus, ma alcuni protocolli SMBus aggiungono semantica
oltre quanto richiesto da I2C. Le moderne schede madri dei PC si affidano a
SMBus. I più comuni dispositivi collegati tramite SMBus sono moduli RAM
configurati utilizzando EEPROM I2C, e circuiti integrati di monitoraggio
hardware.
Poiché SMBus è principalmente un sottoinsieme del bus I2C, possiamo farne uso su
molti sistemi I2C. Ci sono però sistemi che non soddisfano i vincoli elettrici
sia di SMBus che di I2C; e altri che non possono implementare tutta la semantica
o messaggi comuni del protocollo SMBus.
Terminologia
============
Il bus I2C connette uno o più circuiti integrati controllori a dei dispositivi.
.. kernel-figure:: ../../../i2c/i2c_bus.svg
:alt: Un semplice bus I2C con un controllore e 3 dispositivi
Un semplice Bus I2C
Un circuito integrato **controllore** (*controller*) è un nodo che inizia le
comunicazioni con i dispositivi (*targets*). Nell'implementazione del kernel
Linux è chiamato **adattatore** o bus. I driver degli adattatori si trovano
nella sottocartella ``drivers/i2c/busses/``.
Un **algoritmo** contiene codice generico che può essere utilizzato per
implementare una intera classe di adattatori I2C. Ciascun driver dell'
adattatore specifico dipende da un driver dell'algoritmo nella sottocartella
``drivers/i2c/algos/`` o include la propria implementazione.
Un circuito integrato **dispositivo** è un nodo che risponde alle comunicazioni
quando indirizzato dal controllore. In Linux è chiamato **client**. Nonostante i
dispositivi siano circuiti integrati esterni al sistema, Linux può agire come
dispositivo (se l'hardware lo permette) e rispondere alla richieste di altri
controllori sul bus. Questo verrà chiamato **dispositivo locale** (*local
target*). Negli altri casi si parla di **dispositivo remoto** (*remote target*).
I driver dei dispositivi sono contenuti in una cartella specifica per la
funzionalità che forniscono, ad esempio ``drivers/media/gpio/`` per espansori
GPIO e ``drivers/media/i2c/`` per circuiti integrati relativi ai video.
Per la configurazione di esempio in figura, avrai bisogno di un driver per il
tuo adattatore I2C e driver per i tuoi dispositivi I2C (solitamente un driver
per ciascuno dispositivo).
Sinonimi
--------
Come menzionato precedentemente, per ragioni storiche l'implementazione I2C del
kernel Linux usa "adatattore" (*adapter*) per i controllori e "client" per i
dispositivi. Un certo numero di strutture dati usano questi sinonimi nei loro
nomi. Dunque, durante le discussioni riguardanti l'implementazione dovrete
essere a coscienza anche di questi termini. Tuttavia si preferiscono i termini
ufficiali.
Terminologia obsoleta
---------------------
Nelle prime specifiche di I2C, il controllore veniva chiamato "master" ed i
dispositivi "slave". Questi termini sono stati resi obsoleti con la versione 7
della specifica. Inoltre, il loro uso viene scoraggiato dal codice di condotta
del kernel Linux. Tuttavia, potreste ancora trovare questi termini in pagine non
aggiornate. In generale si cerca di usare i termini controllore e dispositivo.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
I2C와 SMBus의 관계
1-30I²C는 문자 그대로 ‘I 제곱 C’라고 읽으며, 커널 문서에서는 `I2C`로 표기합니다. Philips가 개발한 2선식 프로토콜로, 속도는 가변적이고 보통 최대 400KHz, 고속 모드에서는 최대 5 MHz입니다.
I2C는 접근 빈도가 낮고 대역폭 요구가 작은 여러 장치를 저비용 버스로 연결하는 데 적합합니다. 이 특성 때문에 임베디드 시스템에서 널리 사용됩니다.
일부 시스템은 원래 I2C 요구 사항을 완전히 따르지 않으므로 I2C라는 이름 대신 TWI(Two-Wire Interface, 2선식 인터페이스) 또는 IIC 같은 이름을 사용합니다. 이름이 다르다고 해서 모든 전기적·프로토콜 특성이 자동으로 같다는 뜻은 아닙니다.
작성 시점의 최신 공식 규격은 NXP Semiconductors가 발행한 ‘I2C-bus specification and user manual’ `UM10204` 버전 7입니다. 원문에 제시된 NXP PDF 링크는 규격의 공식 출처를 가리킵니다.
SMBus(System Management Bus)는 I2C를 기반으로 하며, 주로 I2C 프로토콜과 신호의 부분집합입니다. 그래서 많은 I2C 장치가 SMBus에서도 동작하지만, 모든 조합이 호환되는 것은 아닙니다.
일부 SMBus 프로토콜은 I2C가 요구하는 수준을 넘어 추가 의미론을 정의합니다. 현대 PC 메인보드는 SMBus에 의존하며, 대표적인 연결 장치는 I2C EEPROM으로 구성되는 RAM 모듈과 하드웨어 감시 집적 회로입니다.
SMBus가 대체로 I2C의 부분집합이므로 많은 I2C 시스템에서 SMBus 기능을 사용할 수 있습니다. 그러나 SMBus와 I2C 양쪽의 전기적 제약을 모두 충족하지 못하거나, SMBus의 전체 의미론 또는 공통 메시지를 구현하지 못하는 시스템도 있습니다.
두 버스의 관계를 기능과 제약 관점에서 정리합니다.
비슷한 2선식 계열이라도 규격 준수 범위는 확인해야 합니다.
원문에 명시된 속도 범위와 주된 설계 목적입니다.
==========================
Introduzione a I2C e SMBus
==========================
I²C (letteralmente "I al quadrato C" e scritto I2C nella documentazione del
kernel) è un protocollo sviluppato da Philips. É un protocollo a 2 fili (a
velocità variabile, solitamente fino a 400KHz, e in modalità alta velocità fino
a 5 MHz). Questo protocollo offre un bus a basso costo per collegare dispositivi
di vario genere a cui si accede sporadicamente e utilizzando poca banda. I2C è
ampiamente usato nei sistemi integrati. Alcuni sistemi usano varianti che non
rispettano i requisiti originali, per cui non sono indicati come I2C, ma hanno
nomi diversi, per esempio TWI (Interfaccia a due fili), IIC.
L'ultima specifica ufficiale I2C è la `"Specifica I2C-bus e manuale utente"
(UM10204) <https://www.nxp.com/docs/en/user-guide/UM10204.pdf>`_ pubblicata da
NXP Semiconductors, al momento della scrittura si tratta della versione 7
SMBus (Bus per la gestione del sistema) si basa sul protocollo I2C ed è
principalmente un sottoinsieme di protocolli e segnali I2C. Molti dispositivi
I2C funzioneranno su SMBus, ma alcuni protocolli SMBus aggiungono semantica
oltre quanto richiesto da I2C. Le moderne schede madri dei PC si affidano a
SMBus. I più comuni dispositivi collegati tramite SMBus sono moduli RAM
configurati utilizzando EEPROM I2C, e circuiti integrati di monitoraggio
hardware.
Poiché SMBus è principalmente un sottoinsieme del bus I2C, possiamo farne uso su
molti sistemi I2C. Ci sono però sistemi che non soddisfano i vincoli elettrici
sia di SMBus che di I2C; e altri che non possono implementare tutta la semantica
o messaggi comuni del protocollo SMBus.
역할, 드라이버, 버스 구조
31-66I2C 버스는 하나 이상의 컨트롤러 집적 회로를 여러 장치에 연결합니다. 원문의 `kernel-figure`는 `../../../i2c/i2c_bus.svg`를 사용하며, 컨트롤러 하나와 장치 세 개가 같은 버스에 연결된 단순 구성을 보여 줍니다.
**컨트롤러**(`controller`)는 장치(`targets`)와 통신을 시작하는 노드입니다. Linux 커널 구현에서는 이 역할을 **어댑터**(`adapter`) 또는 버스라고 부르며, 어댑터 드라이버는 `drivers/i2c/busses/`에 있습니다.
**알고리즘**은 I2C 어댑터 한 종류 전체를 구현하는 데 재사용할 수 있는 공통 코드입니다. 특정 어댑터 드라이버는 `drivers/i2c/algos/`의 알고리즘 드라이버에 의존하거나 자체 구현을 포함합니다.
**장치**는 컨트롤러가 주소를 지정했을 때 통신에 응답하는 노드입니다. Linux에서는 이를 **클라이언트**(`client`)라고 부릅니다.
장치는 보통 시스템 외부의 집적 회로이지만, 하드웨어가 지원하면 Linux 자체가 장치 역할로 동작해 다른 컨트롤러의 요청에 응답할 수도 있습니다. 이 경우를 **로컬 장치**(`local target`)라고 하며, 그 밖의 버스 장치는 **원격 장치**(`remote target`)라고 합니다.
장치 드라이버는 제공 기능에 맞는 디렉터리에 놓입니다. 원문은 GPIO 확장기에 `drivers/media/gpio/`, 비디오 관련 집적 회로에 `drivers/media/i2c/`를 예로 듭니다. 이 경로는 원문 그대로 보존합니다.
그림의 예시 구성을 실제로 구동하려면 I2C 어댑터용 드라이버 하나와 각 I2C 장치용 드라이버가 필요합니다. 일반적으로 장치 종류마다 하나의 드라이버를 사용합니다.
원문 SVG의 연결 관계를 동일한 구조로 다시 나타냅니다.
규격 용어와 Linux 구현 용어를 대응시킵니다.
각 구현 요소의 역할과 원문 경로입니다.
버스를 만드는 드라이버와 버스 위 장치를 다루는 드라이버가 모두 필요합니다.
Terminologia
============
Il bus I2C connette uno o più circuiti integrati controllori a dei dispositivi.
.. kernel-figure:: ../../../i2c/i2c_bus.svg
:alt: Un semplice bus I2C con un controllore e 3 dispositivi
Un semplice Bus I2C
Un circuito integrato **controllore** (*controller*) è un nodo che inizia le
comunicazioni con i dispositivi (*targets*). Nell'implementazione del kernel
Linux è chiamato **adattatore** o bus. I driver degli adattatori si trovano
nella sottocartella ``drivers/i2c/busses/``.
Un **algoritmo** contiene codice generico che può essere utilizzato per
implementare una intera classe di adattatori I2C. Ciascun driver dell'
adattatore specifico dipende da un driver dell'algoritmo nella sottocartella
``drivers/i2c/algos/`` o include la propria implementazione.
Un circuito integrato **dispositivo** è un nodo che risponde alle comunicazioni
quando indirizzato dal controllore. In Linux è chiamato **client**. Nonostante i
dispositivi siano circuiti integrati esterni al sistema, Linux può agire come
dispositivo (se l'hardware lo permette) e rispondere alla richieste di altri
controllori sul bus. Questo verrà chiamato **dispositivo locale** (*local
target*). Negli altri casi si parla di **dispositivo remoto** (*remote target*).
I driver dei dispositivi sono contenuti in una cartella specifica per la
funzionalità che forniscono, ad esempio ``drivers/media/gpio/`` per espansori
GPIO e ``drivers/media/i2c/`` per circuiti integrati relativi ai video.
Per la configurazione di esempio in figura, avrai bisogno di un driver per il
tuo adattatore I2C e driver per i tuoi dispositivi I2C (solitamente un driver
per ciascuno dispositivo).
동의어와 폐기된 용어
67-84역사적인 이유로 Linux 커널 I2C 구현은 컨트롤러를 `adapter`, 장치를 `client`라고 부릅니다. 여러 데이터 구조의 이름에도 이 동의어가 들어 있으므로 구현을 논의할 때 두 이름 체계를 모두 알아야 합니다.
문서와 새 논의에서는 공식 용어인 `controller`와 `target` 또는 device를 우선합니다. 구현 식별자에 남은 `adapter`와 `client`는 기존 API를 이해하기 위한 대응어로 읽으면 됩니다.
초기 I2C 규격에서는 컨트롤러를 `master`, 장치를 `slave`라고 불렀습니다. 이 표현은 I2C 규격 버전 7에서 폐기되었으며 Linux 커널 행동 강령에서도 사용을 권장하지 않습니다.
아직 갱신되지 않은 페이지나 오래된 식별자에서는 폐기된 표현을 만날 수 있습니다. 새로운 설명에서는 일반적으로 controller와 device라는 용어를 사용합니다.
공식 용어, Linux 구현 동의어, 폐기된 표현을 구분합니다.
규격 버전 7 이후에는 공식 역할 중심 용어를 우선합니다.
표현을 발견했을 때의 해석 기준입니다.
Sinonimi
--------
Come menzionato precedentemente, per ragioni storiche l'implementazione I2C del
kernel Linux usa "adatattore" (*adapter*) per i controllori e "client" per i
dispositivi. Un certo numero di strutture dati usano questi sinonimi nei loro
nomi. Dunque, durante le discussioni riguardanti l'implementazione dovrete
essere a coscienza anche di questi termini. Tuttavia si preferiscono i termini
ufficiali.
Terminologia obsoleta
---------------------
Nelle prime specifiche di I2C, il controllore veniva chiamato "master" ed i
dispositivi "slave". Questi termini sono stati resi obsoleti con la versione 7
della specifica. Inoltre, il loro uso viene scoraggiato dal codice di condotta
del kernel Linux. Tuttavia, potreste ancora trovare questi termini in pagine non
aggiornate. In generale si cerca di usare i termini controllore e dispositivo.
요약·해설
summary.rst:1-84I2C는 저비용 2선식 버스이고 SMBus는 주로 그 부분집합이지만, 전기적 제약과 메시지 의미론 때문에 모든 장치와 시스템이 상호 호환되는 것은 아닙니다.
Linux에서는 controller를 adapter, device/target을 client라고도 부릅니다. 새 문서에서는 controller와 target/device를 우선하며, master와 slave는 규격 버전 7에서 폐기된 과거 용어로 다룹니다.