I2C -verktøy i Linux

I2C -verktøy i Linux
I Linux -miljø er det få kommandoer som kan brukes til å utføre I2C -transaksjoner til slaveenhetene koblet til systemet. Det er flere kommandoer tilgjengelig, vi vil diskutere alle kommandoene som er tilgjengelige på dette tidspunktet med få eksempler og bruke saker.

Beskrivelse

I disse dager er de fleste av Linux -systemene utstyrt med disse kommandoene. Hvis noe system ikke har disse kommandoene, kan disse settes sammen for selve systemet. Samling for selve systemet kan bare gjøres hvis kompilatoranlegget er tilgjengelig. Hvis kompilatoren ikke er tilgjengelig, må disse bli sammensatt i kryss. Kildekode for disse verktøyene er åpen kildekode og samlingen trinn er like samme som for andre Linux-verktøy.

Mye brukte kommandoer tilgjengelig i I2C-Tools-pakken er: I2CDetect, I2CDump, I2Cget, I2Cset, I2CTransfer. La oss diskutere disse kommandoene i detalj.

I2CDETECT

Denne kommandoen brukes til å oppdage og liste opp alle I2C -bussene som er tilgjengelige og kjent for Linux.

Det kan være flere I2C -kontrollere/busser som er tilgjengelige i systemet, og alle bussene kan være oppført med I2CDetect -kommandoen. Eksempel Bruk av I2CDetect er: I2CDETECT -L

Denne kommandoen gir utdataene nedenfor på ett system:

[root] $ i2cdetect -l
I2C-1 I2C 0B234500.I2C-Bus I2C-adapter
I2C-2 I2C 0B234580.I2C-Bus I2C-adapter
I2C-0 I2C 0B234580.I2C-Bus I2C-adapter
I2C-5 I2C 0B234500.I2C-Bus I2C-adapter
[root] $

I utdataene over kan vi se at når vi utfører denne kommandoen med -l -alternativet, lister den alle I2C -bussene til systemet. I utgangen kan vi se at det er 4 busser tilgjengelig og kjent for Linux. 0, 1, 2 og 5 er bussnummeret tildelt av Linux -kjernen. Dette er tallene som trengs i andre kommandooperasjoner.

Mer informasjon om alle slavene som er koblet til den spesifikke bussen, kan også spørres med denne kommandoen. Hvis vi for eksempel ønsker å få detaljene på buss nr. 0, kan vi utstede kommando som i2cget -y 0.

Utgangen fra kommandoen på systemet vårt er:

[root] $ i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 A B C D E F
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 - - - - - 36 -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 - 52 -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[root] $

Som vi kan se i tømmerstokkene ovenfor, er det 4 slaver på buss 0. Slaveadresse til de I2C slaveenhetene på buss 0 er 0x30, 0x36, 0x50, 0x52. Denne I2C -slaveadressen er også nødvendig for I2Cget, I2Cget, I2CDump -kommandoer.

i2cget

I2Cget kan brukes til å lese I2C slaveenhet. Enhver intern lesbar adresse kan leses med i2Cget -kommandoen. Eksempelbruk av denne kommandoen kan demonstreres med en forekomst, si at vi ønsker å lese forskyvningen/intern adresse som 0x0 av I2C slaveenhet med slaveadresse (0x50) på buss nr. 0. Logger av operasjonen fra enheten er:

[root] $ i2cget -y 0 0x50 0
0x23
[root] $

I utgangsloggene. Vi kan se dataene ved forskyvning 0 er 0x23. På lignende måte kan denne kommandoen brukes til å lese hvilken som helst slaveenhet på hvilken.

i2cset

I2Cget -kommandoen kan brukes til å skrive dataene på hvilken som helst spesifisert intern adresse til I2C slaveenhet. I2C intern enhetsadresse skal være skrivbar. I2C skriveoperasjon kan beskyttes på enhetsnivå, eller hvilken som helst intern adresse kan være skrivebeskyttet. Med alle de skrivbare tillatelsene kan I2Cset -kommandoen oppdatere enheten.

Eksempel Bruk av kommandoen, la oss ta et eksempel på å skrive en dataverdi 0x12 til RTC slaveenhet med slaveadresse 0x68 ved forskyvning 0x2. Vi vil demonstrere skriveoperasjonen i følgende sekvens:

  • Les enheten på Offset 0x2
  • Skriv 0x12 ved forskyvning 0x2 av slaveenhet 0x68
  • Les tilbake enheten ved forskyvning 0x2 og bekreft at dataene skal være 0x12.
1.Les enheten på Offset 0x2.
[root] $ i2cget -y 1 0x68 0x2
0x14
[root] $
2.Skriv 0x12 ved forskyvning 0x2 av slaveenhet 0x68
[root] $ i2cset -y 1 0x68 0x2 0x12
[root] $
3.Les tilbake enheten ved forskyvning 0x2 og bekreft at dataene skal være 0x12.
[root] $ i2cget -y 1 0x68 0x2
0x12
[root] $

OVER Eksempel Trinn/utgang i boksen demonstrerer skriveoperasjonen på I2C slaveenhet. Lignende trinn kan følges for å skrive noen data til I2C slaveenhet. Slaveadresse, data eller bussnummer kan endres i henhold til systemet og behovet.

i2cdump

I2CDump -kommandoen kan brukes til å dumpe data fra hvilken som helst I2C -slaveenhet. Bare inngang som er nødvendig for denne kommandoen utførelse er I2C -bussnummeret, slaveadressen. Adresseområde kan også spesifiseres med kommandoen. La oss ta et eksempel på lesebyte fra Offset 0x0 til 0xf i.e., Første 16 byte.

[root] $ i2cdump -y -r 0x0-0xf 1 0x68
Ingen størrelse spesifisert (ved hjelp av byte-data-tilgang)
0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
00: 58 29 12 06 08 10 21 00 00 00 00 00 00 00 18 00 x)????!.. ?.
[root] $

Områdeadresse er valgfri, hvis dette området ikke er spesifisert som standard, dumper den første 0xFF -byte. Jeg.e., 256 byte.

I2CTransfer

I2CTransfer -kommandoen er veldig nyttig og kan brukes til å lese eller skrive flere antall byte i samme kommando.

I2CTransfer å lese 14 byte fra 0ffset 0x2, kommandoen vil være som følger:

[root] $ i2ctransfer -y 1 w1@0x68 2 r14
0x12 0x06 0x08 0x10 0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x00
[root] $

I2CTransfer å skrive 2 byte data 0x10, 0x16 ved forskyvning 0x1 og 0x2, kommandoen vil være som følger:

[root] $ i2ctransfer -y 1 w3@0x68 1 0x10 0x16
[root] $
Les tilbake; For å bekrefte skrivedataene:
[root] $ i2ctransfer -y 1 w1@0x68 1 R2
0x10 0x16
[root] $

Over eksempler demonstrerte I2CTransfer -bruken med en forekomst. Ved hjelp av denne bruken kan en annen brukssaker enkelt utføres. Enhver slaveenhet og enhver intern adresse kan leses ved hjelp av denne kommandoen.

Hva om slaveenheten er 2-byte adresserbar?

Det er få I2C-slaveenheter, spesielt EEPROM-enhet som er 2 byte-adresserbare. I2C -overføring gir den enklere måten å få tilgang til enheten i et slikt scenario. Hvis denne enheten, vil vi få tilgang til med I2Cget/I2CSet vi må vurdere de to byte -adressene.

Jeg har en EEPROM-enhet med meg som er to-byte adresserbar. La oss observere I2Cget/I2CSet med EEPROM, og så vil vi observere I2CTransfer:

Vi vil prøve å lese byte fra Offset 0. Vi vil prøve med samme kommando som omtalt i forrige del av I2Cget I.e., Kommando vil være: I2cget -y 1 0x50 0

[root] $ i2cget -y 1 0x50 0
0xff
[root] $

Vi kan se at dataene som returneres er 0xff, og dette er derfor ikke de riktige dataene.

For å lese fra Offset 0, må vi først skrive 2-byte-adresse med I2Cset-kommandoen. Dette er måten å lese dataene fra 2 byte-adresserbar enhet. Eksempel Bruk-sak:

[root] $ i2cset -y 1 0x50 0x0 0x0
[root] $ i2cget -y 1 0x50
0x45
[root] $

I I2Cset-kommandoen må vi skrive 2-byte interne EEPROM-adresse. To 0 -er etter slaveadresse 0x50 er den interne EEPROM -adressen som 0x0000.

Etter det hvis vi leser dataene med I2Cget, vil vi få riktige data. Vi kan se i vårt eksempel det er 0x45. Tidligere var det 0xff, som er en ugyldig data.

I2CTransfer i 2-byte-adresseringsenhet

I2CTransfer kan oppgi dataene med samme kommando. Tenk på samme eksempel Brukssak fra I2CGET/I2CSET som ovenfor.

[root] $ i2ctransfer -y 1 w2@0x50 0x0 0x0 R1
0x45
[root] $

Med denne kommandoen kan vi lese dataene på Offset 0000. Merk at vi må skrive intern adresse etter å ha delt inn i 2 byte.

Et annet eksempel på å lese 16 byte fra Offset 0x0000:

[root] $ i2ctransfer -y 1 w2@0x50 0x0 0x0 R16
0x45 0x41 0x3d 0x41 0x41 0x42 0x42 0x43 0x43 0x44 0x44 0x44 0x45 0x45 0x30 0x0a
[root] $

Et eksempel til å lese 4 byte fra Offset 0x0004:

[root] $ i2ctransfer -y 1 w2@0x50 0x0 0x4 R4
0x41 0x42 0x42 0x43
[root] $

Dette eksemplet kan verifiseres med forrige leseoperasjon der vi har lest 16 byte fra Offset 0000. Nå har vi lest undergruppen. Hvis vi sammenligner resultatene fra denne lesesoperasjonen og verifiserer med den forrige, samsvarer resultatene nøyaktig samsvarer. Derfor kan vi konkludere med at denne lesningen er vellykket.

Konklusjon

Vi har diskutert I2C -verktøypakken i Linux. Ulike kommandoer er tilgjengelige i denne I2C-Tools-pakken. Noen spesielle brukssaker som to-byte-adressering, hvordan du bruker kommandoer i disse spesielle scenariene. Mange eksempel har vi sett så langt. Vi bekreftet alle kommandoene som fungerte med eksemplet og demonstrasjonene. I2Cset, I2Cget, I2CDump, I2CDetect og I2CTransfer er kommandoene til I2C -Tools -pakken.