← Documents Documentation/translations/it_IT/i2c/i2c-protocol.rst GitHub 원문 ↗

Linux 6.18.37 · Translations

I2C 프로토콜 기본 트랜잭션

I2C 시작·정지·주소·ACK 기호, 단순 송수신과 결합 전송, 프로토콜 수정 메시지 플래그를 설명합니다.

Source pathDocumentation/translations/it_IT/i2c/i2c-protocol.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

i2c-protocol.rst:1-99

I2C 트랜잭션은 시작 조건 `S`, 7비트 주소와 `Rd/Wr`, ACK/NACK, 8비트 데이터, 정지 조건 `P`의 순서로 진행합니다. 대괄호는 장치가 보낸 비트나 바이트를 나타냅니다.

커널은 단순 송수신과 반복 시작을 사용하는 결합 전송을 제공하며, 특수 장치에는 NACK 무시, 읽기 ACK 생략, 시작·주소 생략, 방향 반전, 강제 STOP 플래그를 사용할 수 있습니다. 비표준 플래그는 장치 규격이 요구할 때만 적용해야 합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 =================
2 Il protocollo I2C
3 =================
4
5 Questo documento è una panoramica delle transazioni di base I2C e delle API
6 del kernel per eseguirli.
7
8 Spiegazione dei simboli
9 =======================
10
11 =============== ===========================================================
12 S Condizione di avvio
13 P Condizione di stop
14 Rd/Wr (1 bit) Bit di lettura/scrittura. Rd vale 1, Wr vale 0.
15 A, NA (1 bit) Bit di riconoscimento (ACK) e di non riconoscimento (NACK).
16 Addr (7 bit) Indirizzo I2C a 7 bit. Nota che questo può essere espanso
17 per ottenere un indirizzo I2C a 10 bit.
18 Dati (8 bit) Un byte di dati.
19
20 [..] Fra parentesi quadre i dati inviati da dispositivi I2C,
21 anziché dal master.
22 =============== ===========================================================
23
24
25 Transazione semplice di invio
26 =============================
27
28 Implementato da i2c_master_send()::
29
30 S Addr Wr [A] Dati [A] Dati [A] ... [A] Dati [A] P
31
32
33 Transazione semplice di ricezione
34 =================================
35
36 Implementato da i2c_master_recv()::
37
38 S Addr Rd [A] [Dati] A [Dati] A ... A [Dati] NA P
39
40
41 Transazioni combinate
42 =====================
43
44 Implementato da i2c_transfer().
45
46 Sono come le transazioni di cui sopra, ma invece di uno condizione di stop P
47 viene inviata una condizione di inizio S e la transazione continua.
48 Un esempio di lettura di un byte, seguita da una scrittura di un byte::
49
50 S Addr Rd [A] [Dati] NA S Addr Wr [A] Dati [A] P
51
52
53 Transazioni modificate
54 ======================
55
56 Le seguenti modifiche al protocollo I2C possono essere generate
57 impostando questi flag per i messaggi I2C. Ad eccezione di I2C_M_NOSTART, sono
58 di solito necessari solo per risolvere problemi di un dispositivo:
59
60 I2C_M_IGNORE_NAK:
61 Normalmente il messaggio viene interrotto immediatamente se il dispositivo
62 risponde con [NA]. Impostando questo flag, si considera qualsiasi [NA] come
63 [A] e tutto il messaggio viene inviato.
64 Questi messaggi potrebbero comunque non riuscire a raggiungere il timeout
65 SCL basso->alto.
66
67 I2C_M_NO_RD_ACK:
68 In un messaggio di lettura, il bit A/NA del master viene saltato.
69
70 I2C_M_NOSTART:
71 In una transazione combinata, potrebbe non essere generato alcun
72 "S Addr Wr/Rd [A]".
73 Ad esempio, impostando I2C_M_NOSTART sul secondo messaggio parziale
74 genera qualcosa del tipo::
75
76 S Addr Rd [A] [Dati] NA Dati [A] P
77
78 Se si imposta il flag I2C_M_NOSTART per il primo messaggio parziale,
79 non viene generato Addr, ma si genera la condizione di avvio S.
80 Questo probabilmente confonderà tutti gli altri dispositivi sul bus, quindi
81 meglio non usarlo.
82
83 Questo viene spesso utilizzato per raccogliere le trasmissioni da più
84 buffer di dati presenti nella memoria di sistema in qualcosa che appare
85 come un singolo trasferimento verso il dispositivo I2C. Inoltre, alcuni
86 dispositivi particolari lo utilizzano anche tra i cambi di direzione.
87
88 I2C_M_REV_DIR_ADDR:
89 Questo inverte il flag Rd/Wr. Cioè, se si vuole scrivere, ma si ha bisogno
90 di emettere una Rd invece di una Wr, o viceversa, si può impostare questo
91 flag.
92 Per esempio::
93
94 S Addr Rd [A] Dati [A] Dati [A] ... [A] Dati [A] P
95
96 I2C_M_STOP:
97 Forza una condizione di stop (P) dopo il messaggio. Alcuni protocolli
98 simili a I2C come SCCB lo richiedono. Normalmente, non si vuole essere
99 interrotti tra i messaggi di un trasferimento.
100

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

개요와 기호

1-23

이 문서는 기본 I2C 트랜잭션과 이를 실행하는 커널 API를 개괄합니다. 각 프레임은 시작·정지 조건, 주소, 방향 비트, 승인 비트와 데이터 바이트의 순서로 표현합니다.

`S`는 시작 조건이고 `P`는 정지 조건입니다. 시작 조건이 버스 점유와 전송 시작을 알리고 정지 조건이 현재 트랜잭션의 끝을 표시합니다.

`Rd/Wr`은 1비트 읽기·쓰기 방향입니다. `Rd`는 1, `Wr`은 0이며 7비트 주소 뒤에 붙어 주소 단계에서 전송 방향을 결정합니다.

`A`는 ACK, `NA`는 NACK인 1비트 응답입니다. 수신 측은 바이트를 받아들였는지 또는 더 받지 않겠는지를 이 비트로 알립니다.

`Addr`는 기본 7비트 I2C 주소이며 10비트 주소 형식으로 확장할 수 있습니다. `Data`는 한 바이트인 8비트 데이터입니다.

대괄호 `[..]`는 해당 항목을 마스터가 아니라 I2C 장치가 보냈다는 뜻입니다. 대괄호가 없는 데이터와 승인 비트는 마스터가 구동합니다.

이 표기는 전기적 파형의 정확한 시간 간격보다 버스에서 일어나는 논리 단계와 송신 주체를 보여줍니다. 실제 SCL·SDA 타이밍과 속도 등급은 장치와 컨트롤러의 별도 규격을 따라야 합니다.

I2C 표기 기호
기호비트 수의미
S조건시작
P조건정지
Rd/Wr1읽기=1, 쓰기=0
A / NA1ACK / NACK
Addr7I2C 주소
Data8데이터 바이트

트랜잭션 시퀀스를 읽는 데 필요한 기호입니다.

기호의 송신 주체
표기송신 주체
[Data], [A], [NA]I2C 장치
Data, A, NA마스터

대괄호 여부로 버스를 구동한 쪽을 구분합니다.

=================
Il protocollo I2C
=================

Questo documento è una panoramica delle transazioni di base I2C e delle API
del kernel per eseguirli.

Spiegazione dei simboli
=======================

=============== ===========================================================
S               Condizione di avvio
P               Condizione di stop
Rd/Wr (1 bit)   Bit di lettura/scrittura. Rd vale 1, Wr vale 0.
A, NA (1 bit)   Bit di riconoscimento (ACK) e di non riconoscimento (NACK).
Addr  (7 bit)   Indirizzo I2C a 7 bit. Nota che questo può essere espanso
                per ottenere un indirizzo I2C a 10 bit.
Dati  (8 bit)   Un byte di dati.

[..]            Fra parentesi quadre i dati inviati da dispositivi I2C,
                anziché dal master.
=============== ===========================================================

단순 송신 트랜잭션

24-32

단순 송신은 `i2c_master_send()`가 구현합니다. 마스터가 시작 조건과 주소·쓰기 비트를 보낸 뒤 장치의 ACK를 확인하고 데이터 바이트들을 전송합니다.

각 데이터 바이트 뒤의 `[A]`는 장치가 해당 바이트를 승인했음을 뜻합니다. 마지막 데이터도 승인된 뒤 마스터가 `P` 정지 조건으로 전송을 끝냅니다.

시퀀스의 `...`는 동일한 `Data [A]` 쌍이 필요한 길이만큼 반복될 수 있다는 뜻입니다.

Implementato da i2c_master_send()::

  S Addr Wr [A] Dati [A] Dati [A] ... [A] Dati [A] P
단순 송신 프레임
SAddr + Wr
장치 [A]마스터 Data
장치 [A]반복 Data / [A]
P종료

마스터 송신과 장치 ACK가 바이트마다 교대합니다.

i2c_master_send 단계
단계주체내용
시작·주소·방향마스터S Addr Wr
주소 승인장치[A]
데이터마스터Data
바이트 승인장치[A]
정지마스터P

송신 시 각 요소의 주체입니다.


Transazione semplice di invio
=============================

Implementato da i2c_master_send()::

  S Addr Wr [A] Dati [A] Dati [A] ... [A] Dati [A] P

단순 수신 트랜잭션

33-40

단순 수신은 `i2c_master_recv()`가 구현합니다. 마스터가 시작 조건과 주소·읽기 비트를 보내고 장치의 주소 ACK를 받습니다.

읽기에서는 장치가 `[Data]`를 보내고 마스터가 다음 바이트를 원하면 `A`로 승인합니다. 따라서 데이터는 대괄호 안에 있고 그 뒤 ACK는 대괄호 밖에 있습니다.

마지막 바이트 뒤에는 마스터가 `NA`를 보내 더 이상 데이터를 받지 않겠다고 알린 다음 `P`로 종료합니다.

Implementato da i2c_master_recv()::

  S Addr Rd [A] [Dati] A [Dati] A ... A [Dati] NA P
단순 수신 프레임
SAddr + Rd
장치 [A]장치 [Data]
마스터 A반복 [Data] / A
마지막 [Data]마스터 NA
P종료

장치 데이터와 마스터 ACK가 교대하며 마지막에는 NACK로 끝을 알립니다.

수신의 ACK 규칙
데이터 위치마스터 응답의미
중간 바이트A다음 바이트 요청
마지막 바이트NA수신 종료

계속 읽기와 종료를 마스터 응답으로 구분합니다.

Transazione semplice di ricezione
=================================

Implementato da i2c_master_recv()::

  S Addr Rd [A] [Dati] A [Dati] A ... A [Dati] NA P

결합 트랜잭션과 반복 시작

41-52

결합 트랜잭션은 `i2c_transfer()`로 구현합니다. 여러 메시지를 하나의 버스 트랜잭션으로 묶어 중간에 정지 조건을 보내지 않습니다.

앞 메시지의 `P` 대신 새 `S` 시작 조건을 보내고 다음 주소와 방향을 전송합니다. 이 반복 시작은 다른 마스터가 버스를 차지할 틈 없이 방향이나 대상 메시지를 전환합니다.

예제는 장치에서 한 바이트를 읽고 `NA`로 수신을 마친 직후 반복 시작을 보냅니다. 이어 같은 주소에 쓰기 방향으로 한 바이트를 전송하고 마지막에만 `P`를 보냅니다.

결합 전송을 사용할 때 각 부분 메시지의 주소, 방향, 데이터 소유권은 일반 송신·수신 규칙과 동일합니다. 달라지는 것은 중간 경계가 정지가 아니라 반복 시작이라는 점입니다.

Implementato da i2c_transfer().

Sono come le transazioni di cui sopra, ma invece di uno condizione di stop P
viene inviata una condizione di inizio S e la transazione continua.
Un esempio di lettura di un byte, seguita da una scrittura di un byte::

  S Addr Rd [A] [Dati] NA S Addr Wr [A] Dati [A] P
읽기 후 쓰기 결합 전송
S Addr Rd장치 [A] / [Data]
마스터 NA반복 S
Addr Wr장치 [A]
Data / [A]P

중간 P 없이 반복 S로 방향을 바꿉니다.

단순 전송과 결합 전송
형식중간 경계최종 경계
독립 트랜잭션P 후 새 SP
결합 트랜잭션반복 SP

메시지 사이의 버스 조건이 다릅니다.

Transazioni combinate
=====================

Implementato da i2c_transfer().

Sono come le transazioni di cui sopra, ma invece di uno condizione di stop P
viene inviata una condizione di inizio S e la transazione continua.
Un esempio di lettura di un byte, seguita da una scrittura di un byte::

  S Addr Rd [A] [Dati] NA S Addr Wr [A] Dati [A] P

IGNORE_NAK, NO_RD_ACK, NOSTART

53-87

일부 비표준 장치를 지원하기 위해 I2C 메시지 플래그로 기본 프로토콜을 수정할 수 있습니다. `I2C_M_NOSTART`를 제외하면 대개 장치의 특수 문제를 우회할 때만 필요합니다.

`I2C_M_IGNORE_NAK`가 없으면 장치가 `[NA]`로 응답하는 즉시 메시지를 중단합니다. 이 플래그를 켜면 모든 `[NA]`를 `[A]`처럼 취급하고 메시지 전체를 계속 보냅니다.

NACK를 무시해도 SCL이 낮은 상태에서 높은 상태로 전환되지 않는 타임아웃은 여전히 발생할 수 있습니다. 이 플래그가 물리적 버스 정지까지 해결하지는 않습니다.

`I2C_M_NO_RD_ACK`는 읽기 메시지에서 마스터가 보내는 `A/NA` 비트를 생략합니다. 표준 수신 종료 절차를 기대하지 않는 특수 장치용입니다.

`I2C_M_NOSTART`는 결합 트랜잭션의 부분 메시지 앞에 정상적인 `S Addr Wr/Rd [A]`를 생성하지 않을 수 있게 합니다.

두 번째 부분 메시지에 적용한 예제는 첫 읽기 뒤에 주소 단계 없이 `Data [A]`를 이어 보냅니다. 여러 시스템 메모리 버퍼를 장치 입장에서는 하나의 연속 전송처럼 모을 때 사용할 수 있습니다.

첫 번째 부분 메시지에 `I2C_M_NOSTART`를 설정하면 시작 조건 `S`는 나오지만 주소는 생성되지 않습니다. 버스의 다른 장치가 혼란스러울 수 있으므로 사용하지 않는 편이 좋습니다.

일부 특수 장치는 전송 방향이 바뀌는 경계에서도 NOSTART를 사용합니다. 이는 일반 I2C 장치가 기대하는 주소·방향 재선언을 생략하므로 장치 규격을 확인해야 합니다.

I2C_M_IGNORE_NAK:
    Normalmente il messaggio viene interrotto immediatamente se il dispositivo
    risponde con [NA]. Impostando questo flag, si considera qualsiasi [NA] come
    [A] e tutto il messaggio viene inviato.
    Questi messaggi potrebbero comunque non riuscire a raggiungere il timeout
    SCL basso->alto.

I2C_M_NO_RD_ACK:
    In un messaggio di lettura, il bit A/NA del master viene saltato.

I2C_M_NOSTART:
    In una transazione combinata, potrebbe non essere generato alcun
    "S Addr Wr/Rd [A]".
    Ad esempio, impostando I2C_M_NOSTART sul secondo messaggio parziale
    genera qualcosa del tipo::

      S Addr Rd [A] [Dati] NA Dati [A] P

    Se si imposta il flag I2C_M_NOSTART per il primo messaggio parziale,
    non viene generato Addr, ma si genera la condizione di avvio S.
    Questo probabilmente confonderà tutti gli altri dispositivi sul bus, quindi
    meglio non usarlo.

    Questo viene spesso utilizzato per raccogliere le trasmissioni da più
    buffer di dati presenti nella memoria di sistema in qualcosa che appare
    come un singolo trasferimento verso il dispositivo I2C. Inoltre, alcuni
    dispositivi particolari lo utilizzano anche tra i cambi di direzione.
수정 플래그 동작
플래그변경주의
I2C_M_IGNORE_NAK[NA]를 [A]처럼 처리SCL 타임아웃은 가능
I2C_M_NO_RD_ACK읽기의 마스터 A/NA 생략특수 장치 전용
I2C_M_NOSTARTS Addr Wr/Rd [A] 생략버스 장치 혼란 가능

표준 프로토콜에서 생략하거나 무시하는 요소를 정리합니다.

NOSTART 두 번째 메시지
S Addr Rd [A][Data] NA
NOSTARTData [A]
P종료

반복 주소 단계 없이 데이터가 이어집니다.

NOSTART 사용 판단
장치 규격 확인주소 단계 생략 필요?
NOSTART 적용
아니요표준 반복 시작 유지

연속 버퍼 전송 또는 장치 특수 요구가 확인된 경우에만 사용합니다.

Transazioni modificate
======================

Le seguenti modifiche al protocollo I2C possono essere generate
impostando questi flag per i messaggi I2C. Ad eccezione di I2C_M_NOSTART, sono
di solito necessari solo per risolvere problemi di un dispositivo:

I2C_M_IGNORE_NAK:
    Normalmente il messaggio viene interrotto immediatamente se il dispositivo
    risponde con [NA]. Impostando questo flag, si considera qualsiasi [NA] come
    [A] e tutto il messaggio viene inviato.
    Questi messaggi potrebbero comunque non riuscire a raggiungere il timeout
    SCL basso->alto.

I2C_M_NO_RD_ACK:
    In un messaggio di lettura, il bit A/NA del master viene saltato.

I2C_M_NOSTART:
    In una transazione combinata, potrebbe non essere generato alcun
    "S Addr Wr/Rd [A]".
    Ad esempio, impostando I2C_M_NOSTART sul secondo messaggio parziale
    genera qualcosa del tipo::

      S Addr Rd [A] [Dati] NA Dati [A] P

    Se si imposta il flag I2C_M_NOSTART per il primo messaggio parziale,
    non viene generato Addr, ma si genera la condizione di avvio S.
    Questo probabilmente confonderà tutti gli altri dispositivi sul bus, quindi
    meglio non usarlo.

    Questo viene spesso utilizzato per raccogliere le trasmissioni da più
    buffer di dati presenti nella memoria di sistema in qualcosa che appare
    come un singolo trasferimento verso il dispositivo I2C. Inoltre, alcuni
    dispositivi particolari lo utilizzano anche tra i cambi di direzione.

REV_DIR_ADDR와 STOP

88-99

`I2C_M_REV_DIR_ADDR`는 주소 단계의 `Rd/Wr` 비트를 반전합니다. 호출자가 쓰기 메시지를 준비했더라도 버스에는 `Rd`를 내보내거나 그 반대로 만들 수 있습니다.

예제는 읽기 방향 비트를 보낸 뒤 마스터 데이터가 이어지는 비표준 조합입니다. 일반적인 방향 비트 의미와 다르므로 이를 요구하는 장치에만 사용합니다.

`I2C_M_STOP`은 해당 메시지 뒤에 강제로 정지 조건 `P`를 생성합니다. SCCB처럼 I2C와 비슷하지만 메시지 경계마다 정지를 요구하는 프로토콜에서 필요합니다.

일반 I2C 결합 전송에서는 메시지 사이를 정지시키지 않는 것이 보통입니다. STOP 플래그는 결합 트랜잭션의 원자성과 반복 시작 의미를 바꾸므로 장치 프로토콜이 요구할 때만 설정합니다.

I2C_M_REV_DIR_ADDR:
    Questo inverte il flag Rd/Wr. Cioè, se si vuole scrivere, ma si ha bisogno
    di emettere una Rd invece di una Wr, o viceversa, si può impostare questo
    flag.
    Per esempio::

      S Addr Rd [A] Dati [A] Dati [A] ... [A] Dati [A] P

I2C_M_STOP:
    Forza una condizione di stop (P) dopo il messaggio. Alcuni protocolli
    simili a I2C come SCCB lo richiedono. Normalmente, non si vuole essere
    interrotti tra i messaggi di un trasferimento.
방향과 메시지 경계 수정
플래그수정 대상대표 용도
I2C_M_REV_DIR_ADDR주소의 Rd/Wr 비트비표준 방향 의미 장치
I2C_M_STOP메시지 뒤 조건SCCB 등 정지 요구 프로토콜

두 플래그가 주소 비트와 버스 조건을 각각 바꿉니다.

REV_DIR_ADDR 송신 예
S Addr Rd장치 [A]
마스터 Data장치 [A]
반복 Data / [A]P

버스의 방향 비트와 실제 데이터 흐름이 반대로 보입니다.

STOP 플래그 효과
메시지 완료I2C_M_STOP
P 생성다음 메시지는 새 S

기본 결합 경계를 강제 정지로 바꿉니다.

I2C_M_REV_DIR_ADDR:
    Questo inverte il flag Rd/Wr. Cioè, se si vuole scrivere, ma si ha bisogno
    di emettere una Rd invece di una Wr, o viceversa, si può impostare questo
    flag.
    Per esempio::

      S Addr Rd [A] Dati [A] Dati [A] ... [A] Dati [A] P

I2C_M_STOP:
    Forza una condizione di stop (P) dopo il messaggio. Alcuni protocolli
    simili a I2C come SCCB lo richiedono. Normalmente, non si vuole essere
    interrotti tra i messaggi di un trasferimento.