controlador I2C Análisis Linux

  

I2C es un protocolo de bus serial de dos hilos desarrollado por Phillips. Normalmente se utiliza en sistemas embebidos permiten diferentes componentes de comunicación, tablero de PC se pueden comunicar a través de I2C con diferentes sensores. Estos sensores típicamente reportados velocidad del ventilador, la temperatura, y todo el sistema de hardware procesador de información, este protocolo también se pueden utilizar en los chips de memoria RAM, el DIMM para proporcionar OS de prueba.

2.0 en las fuentes del núcleo I2C no se encuentra en el núcleo, el núcleo 2.4 incluye un poco de soporte para I2C, principalmente controlador de vídeo. En el kernel 2.6, una gran cantidad de código I2C en el núcleo. Gracias a los esfuerzos de muchos desarrolladores del núcleo, que conforman la interfaz más fácilmente aceptado por la comunidad del kernel. Algunos conductores están todavía fuera del árbol de CVS, no ponga en kernel.org, pero sólo una cuestión de tiempo antes de que se trasplantan.

I2C las fuentes del núcleo se divide en varias partes: el núcleo I2C, los conductores de bus I2C, conductores algoritmo I2C y conductores de chips I2C. Vamos a pasar por alto la parte central I2C, pero preocupado acerca de cómo escribir un autobús y un algoritmo impulsada.

bus I2C controladores de unidad de bus I2C con un conductor de autobús i2c_adapter estructura descrita, el fichero de configuración include /linux /i2c.h en la definición. Los siguientes campos obligatorios en el conductor del autobús se proporciona: * Módulo de estructura propietario; -set al valor (THIS_MODULE) que permite la referencia del módulo counting.unsigned clase adecuada int; -el tipo de dispositivos de clase I2C que apoya este controlador general, esto es. establecido en la i2c_algorithm valor I2C_ADAP_CLASS_SMBUS.struct * algo; -a puntero a la estructura i2c_algorithm struct que describe la manera los datos se transfieren a través de este controlador de bus I2C Más información sobre esta estructura se proporciona below.char nombre [I2C_NAME_SIZE];. -set a un nombre descriptivo del controlador de bus I2C. este valor se muestra en el nombre del archivo sysfs asociada con este adaptador I2C.

etiquetas desde el siguiente ejemplo de un adaptador tiny_i2c_adap.c I2C unidad, pueden estar en el sitio FTP Linux Journal [ftp.ssc.com/pub/lj/listings/issue116/7136.tgz [1]] se obtiene. Para ver cómo se proporciona i2c_adapter estructura: static struct i2c_adapter tiny_adapter = {.owner = THIS_MODULE, .class = I2C_ADAP_CLASS_SMBUS, .algo = &tiny_algorithm, .name = " pequeño adaptador ",};

Para adaptador I2C registro, el controlador llama i2c_add_adapter función, estructura de parámetros i2c_adapter es un puntero. retval = i2c_add_adapter (&tiny_adapter);

Para registrar un adaptador I2C, controlador llama i2c_del_adapter, los parámetros estructura i2c_adapter puntero. De esta manera: i2c_del_adapter (&tiny_adapter);
algoritmo

I2C Algoritmo DriversI2C para conducir el bus I2C entre el bus I2C y capaz de dialogar, muchos conductor bus I2C para utilizar sus propias definiciones y algoritmo. Debido a que están estrechamente conectados, el conductor del autobús la forma de lograr el diálogo y los tipos específicos de hardware. Por alguna conductor bus I2C, muchos algoritmo de I2C se ha escrito. Algunos ejemplos: adaptadores ITE, los conductores de directorio /I2C /I2C-algo-ite.c; IBM PPC 405 adaptadores en el directorio drivers /I2C /I2C-algo-ibm_ocp.c; un algoritmo de desplazamiento de bits I2C genérico en los controladores de directorio /I2C /I2C-algo-bit.c; todos ellos han sido escritas algoritmo tiene su propia función, conductor del bus I2C Debe registrarse para usar. Para obtener más información al respecto, se puede ver el código fuente del núcleo conductores de directorio /I2C /I2C-algo -. * C.

Vamos a crear un accionamiento propio algoritmo I2C, un algoritmo de conducción se define la estructura i2c_algorithm, la estructura se define en el directorio /linux /i2c.h incluir, la siguiente es una descripción de los campos de uso común: char nombre [32];: el nombre de la algorithm.unsigned ID int;: descripción del tipo de algoritmo de esta estructura define estos diferentes tipos se definen en el archivo de inclusión /Linux /i2c-id.h y empezar con los caracteres I2C_ALGO_
int (* master_xfer) (struct i2c_adapter * ADAP, struct i2c_msg Mensajes [], int num);:. un puntero de función que se activa si este controlador algoritmo puede hacer I2C nivel directa accesos Si se establece, esta función se llama siempre que un controlador de chip I2C quiere comunicarse con el dispositivo de chip. Si se establece en NULL, la función smbus_xfer se utiliza en su lugar.

int (*) (smbus_xfer i2c_adapter struct * ADAP, u16 addr, banderas cortos sin signo , lectura_escritura char, comando U8, int size, unión i2c_smbus_data * datos);: un puntero de función que se activa si este controlador algoritmo puede hacer SMB accesos al bus PCI-bas más. los conductores de autobús ed I2C son capaces de hacer esto, y ellos deben establecer este puntero de función. Si se establece, esta función se llama cuando un controlador de chip I2C quiere comunicarse con el dispositivo de chip. Si se establece en NULL, la función master_xfer se utiliza instead.u32 (* funcionalidad) (struct i2c_adapter *);:. un puntero de función llamada por el núcleo I2C para determinar qué tipo de lecturas y escrituras el controlador del adaptador I2C puede hacer

adaptador I2C la conducción en, i2c_adapter estructura referenciada variables de tiny_algorithm, la estructura se define como sigue: static tiny_algorithm struct i2c_algorithm = {.name = " pequeña algoritmo de ", id = I2C_ALGO_SMBUS, .smbus_xfer = tiny_access, .functionality = tiny_func ,.}; función tiny_func muy simple, básico I2C de este algoritmo puede decir qué tipo de mensajes I2C. En esta unidad, queremos apoyar a muchos tipos diferentes de mensajes I2C: tiny_func u32 estática (struct i2c_adapter * adaptador) {I2C_FUNC_SMBUS_QUICK retorno | I2C_FUNC_SMBUS_BYTE | I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA;} todos los tipos de mensajes I2C en el include /linux /i2c.h definido para comenzar I2C_FUNC_.

Cuando controlador de cliente I2C al diálogo y bus I2C es se llama una función de tiny_access. Por ejemplo, nuestra función es muy simple, sólo I2C chips solicitudes de registros conductor para Syslog, mientras que un regreso exitoso a la persona que llama.

Copyright © Conocimiento de Windows All Rights Reserved