brintos

brintos / linux-shallow public Read only

0
0
Text · 3.4 KiB · ba7c8cd Raw
100 lines · plain
1=================2Il protocollo I2C3=================4 5Questo documento è una panoramica delle transazioni di base I2C e delle API6del kernel per eseguirli.7 8Spiegazione dei simboli9=======================10 11=============== ===========================================================12S               Condizione di avvio13P               Condizione di stop14Rd/Wr (1 bit)   Bit di lettura/scrittura. Rd vale 1, Wr vale 0.15A, NA (1 bit)   Bit di riconoscimento (ACK) e di non riconoscimento (NACK).16Addr  (7 bit)   Indirizzo I2C a 7 bit. Nota che questo può essere espanso17                per ottenere un indirizzo I2C a 10 bit.18Dati  (8 bit)   Un byte di dati.19 20[..]            Fra parentesi quadre i dati inviati da dispositivi I2C,21                anziché dal master.22=============== ===========================================================23 24 25Transazione semplice di invio26=============================27 28Implementato da i2c_master_send()::29 30  S Addr Wr [A] Dati [A] Dati [A] ... [A] Dati [A] P31 32 33Transazione semplice di ricezione34=================================35 36Implementato da i2c_master_recv()::37 38  S Addr Rd [A] [Dati] A [Dati] A ... A [Dati] NA P39 40 41Transazioni combinate42=====================43 44Implementato da i2c_transfer().45 46Sono come le transazioni di cui sopra, ma invece di uno condizione di stop P47viene inviata una condizione di inizio S e la transazione continua.48Un 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] P51 52 53Transazioni modificate54======================55 56Le seguenti modifiche al protocollo I2C possono essere generate57impostando questi flag per i messaggi I2C. Ad eccezione di I2C_M_NOSTART, sono58di solito necessari solo per risolvere problemi di un dispositivo:59 60I2C_M_IGNORE_NAK:61    Normalmente il messaggio viene interrotto immediatamente se il dispositivo62    risponde con [NA]. Impostando questo flag, si considera qualsiasi [NA] come63    [A] e tutto il messaggio viene inviato.64    Questi messaggi potrebbero comunque non riuscire a raggiungere il timeout65    SCL basso->alto.66 67I2C_M_NO_RD_ACK:68    In un messaggio di lettura, il bit A/NA del master viene saltato.69 70I2C_M_NOSTART:71    In una transazione combinata, potrebbe non essere generato alcun72    "S Addr Wr/Rd [A]".73    Ad esempio, impostando I2C_M_NOSTART sul secondo messaggio parziale74    genera qualcosa del tipo::75 76      S Addr Rd [A] [Dati] NA Dati [A] P77 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, quindi81    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 appare85    come un singolo trasferimento verso il dispositivo I2C. Inoltre, alcuni86    dispositivi particolari lo utilizzano anche tra i cambi di direzione.87 88I2C_M_REV_DIR_ADDR:89    Questo inverte il flag Rd/Wr. Cioè, se si vuole scrivere, ma si ha bisogno90    di emettere una Rd invece di una Wr, o viceversa, si può impostare questo91    flag.92    Per esempio::93 94      S Addr Rd [A] Dati [A] Dati [A] ... [A] Dati [A] P95 96I2C_M_STOP:97    Forza una condizione di stop (P) dopo il messaggio. Alcuni protocolli98    simili a I2C come SCCB lo richiedono. Normalmente, non si vuole essere99    interrotti tra i messaggi di un trasferimento.100