Estoy diseñando mi propio protocolo de datos para la comunicación entre PIC, IC, etc. y en la especificación me gustaría compararlo con el protocolo I2C existente.
Hay dos tipos de funcionamiento en el bus I2C:
Solo para aclararme esto: ¿hay alguna forma de usar estas operaciones, de acuerdo con la especificación del protocolo, para leer y escribir datos dentro de una sola operación? Ganarías en rapidez porque no tienes que enviar dos veces la dirección. Entonces, ¿es esto posible?
No hay forma de hacer lo que quiere y seguir el protocolo I2C. Lo más cercano que puede obtener es la condición de "Inicio repetido". Incluso con un inicio repetido, debe enviar la dirección una segunda vez para leer.
El "inicio repetido" se utiliza en el caso de un sistema multimaestro y permite que un maestro bloquee el bus y evite que otro maestro lo tome. En lugar de emitir un bit de parada, el maestro envía otro bit de inicio y retiene el control del bus hasta que se envía el bit de parada. De esta manera, podría llamar al inicio repetido una sola "operación", aunque se pueden realizar múltiples lecturas/escrituras.
En su protocolo teórico, ¿cuánta velocidad cree que ganará si no emite la dirección por segunda vez? ¿Es ese ahorro de tiempo necesario para su diseño?
No del todo posible. Dado que hay un solo pin de entrada y salida de datos, no puede leer y escribir simultáneamente.
I2C utiliza el bit menos significativo del byte de dirección para controlar si la operación es de lectura o escritura. Pase lo que pase, la dirección siempre se envía al comienzo de una transacción y se envía si hay un reinicio, por lo que su declaración sobre no tener que enviar la dirección dos veces no tiene sentido para mí.
En una escritura/lectura "combinada", todavía hay una sobrecarga de direcciones:
Si desea una comunicación verdaderamente simultánea, necesita múltiples buses I2C independientes (y obviamente múltiples maestros y esclavos).
¿Quiere ahorrar velocidad al no escribir 8 bits adicionales a 100/400/1000khz? Solo te estarías ahorrando (a 100khz de velocidad) 8/100000 segundos (0,08 milisegundos/80 microsegundos). Es una cantidad trivial de datos.
Pero, no se puede hacer en el estándar i2c o SMBUS . Pero si está escribiendo su propio protocolo de datos, adelante, es su protocolo, usted decide si puede combinar read/right . Diséñelo de modo que un inicio repetido signifique que solo el mismo esclavo que fue direccionado con el inicio inicial entre en modo de lectura sin direccionamiento.
Inicio - Escribir dirección - Datos - Datos - Reiniciar - Leer - Leer
Sin embargo, no cumplirá con el estándar i2c.
dext0rb
usuario17592
Chetan Bhargava
usuario17592
nick johnson
usuario17592