oriolrius.cat

Des del 2000 compartiendo sobre…

Tag: i2c

I2C – Inter Integrated Circuit bus

Reading time: 3 – 5 minutes

Tornant al tema dels busos que poden treballar sobre GPIO aquí teniu un altre bus molt i molt usat en aquest tipus de ports.

Definició

El I2C (“eye-squared-see”) el va inventar Philips cap als anys 80 amb la finalitat de connectar diferents IC (circutis integrats) amb les seves CPUs dintre d’una TV. Bàsicament és un bus pensat per curtes distàncies i poc ampla de banda.

A més I2C és capaç de detectar col·lisions, sincronitzar el rellotge i negociar el master en sistemes on n’hi pugui haver més d’un. El rellotge sempre el genera el master, però els slaves poden mantenir el rellotge parat per generar un estat d’espera.
Sovint el master en un bus I2C és el microcontrolador.

El número màxim de dispositius que es pot connectar en un bus I2C és calcula a partir de la màxima capacitància de la linia (uns 400pF), i el límit d’adreces és de 16k; normalment cada dipositiu té una capacitància d’uns 10pF. Així doncs diposem de 127 adreces disponibles. En principi les adreces de cada IC és assignable pel dissenyador del sistema.

Com funciona

Només es necessiten dos cables per treballar amb I2C, dos cables actius i el terra. Els cables actius són el SDA (Serial Data Line) i el SCL (Serial Clock Line). O sigui, el primer per dades i el segon pel rellotge.

i2c.gif

Només amb aquests dos cables actius en tenim prou per establir comunicacions full-duplex. L’interficie sovint funciona a velocitats baixes, de 100KHz a 400KHz. En un bus I2C, cada IC connectat al bus té una adreça única. Cada dispositiu pot treballar com a receptor i/o transmisor depenent de la seva funcionalitat.

Sobre el tema de l’amplada de banda, escencialment hi ha tres modes de funcionament un estàndard de fins a 100kbps i un de ràpid de fins a 400kpbs. El darrer mode és el High-Speed que pot arribar fins a 3.4Mbps.

Usos

Un dispositiu molt comú que sovint s’usa a través d’un bus I2C són les EEPROMs, també n’hi ha d’altres com els sensors, i els rellotges de temps real. A vegades també s’usen busos I2C només com a línia de senyalització per altres línies de dades, per exemple, en aplicacions multimèdia, on sovint s’usen sintonitzadors RF, codificadors i/o decodificadors de video, processadors d’audio. De fet, el mercat és ple de centenars d’IC que usen el bus I2C com a protocol de comunicacions en els seus busos.

Exemples d’us

Maxim té dintre del seu repositori d’articles tècnics un munt de referències a aplicacions sobre aquest protocol. He trobat molt interessant concretament una aplicació que ens permet controlar una pantalla LCD amb interficie HD44780 (local). Al document s’explica com serialitzar els 11 pins que necessita aquest dispositu per treballar només amb els 2 cables que té el bus I2C.

Un altre ús, jo diria que més que útil, és el que ens permet connectar el bus I2C al port paral·lel del PC. De fet, el circuit que ens ho permet fer és força simple si en voleu més informació: I2C interfacing via PC parallel port.

Fonts

GPIO – General Porpuse Input/Output

Reading time: 2 – 2 minutes

Aquest acrònim s’acostuma a usar en dispostius incrustats, els dispositius GPIO ens facilitat ports d’entrada i sortida (I/O) que es poden configurar indiferenment com a ports d’entrada o de sortida. Sobre aquests ports podem fer correr protocols de BUS, com per exemple I²C, SPI and SMBus. Sovint el fet d’usar xips GPIO és una solució més econòmica que l’ús de micro-controladors.

Com que aquesta explicació queda molt generècia, el millor és parlar d’un exemple ben senzill de perquè serveix un GPIO en un dispositu embedded. El Linksys WRT54G per exemple, té un GPIO que no usa tots els seus PINs. Per tant, és un dispositiu que tots tenim a l’abast i amb el que a través d’un linux podem començar a jugar amb el GPIO. A comesfa.org hi ha un artícle titulat: Connexió d’un relé a un Linksys WRT54G on s’usa aquest GPIO del que us parlava per connectar-hi un relé a través del qual podem encendre i apagar dispositus.

gpio.jpg

Un petit trick que sovint podem fer amb els pins del GPIO és connectar-hi directament un LED, sovint si configurem el pin com a sortida i connectem l’altre pota del LED la posem a massa n’hi ha prou per fer encendre i apagar el LED quan volguem. De totes formes si no voleu sucarrimar el LED, us recomano mirar amb el tester quina tensió dona el pin en estat activat, ja que mai se sap què hi pot haver. Si mireu l’article anterior que us he dit de comesfa, veureu un tros de codi en C que mostra fins a quin punt serà de senzill controlar que el LED s’ensengui o s’apagui.