¿Esclavo I2C compatible con el protocolo SMBus?

Tengo algunas consultas sobre el uso de un controlador esclavo I2C (de Arria 10 FPGA).

Actualmente estamos evaluando la compatibilidad con el protocolo MCTP en nuestro dispositivo, cuya capa física se basa en SMBus/I2C, de acuerdo con las especificaciones de MCTP. Nuestro punto de partida sería usar el controlador I2C integrado en nuestro procesador fijo dentro de la fpga. Nuestro dispositivo solo actuaría como esclavos I2C, lo que significa que no inicia ninguna comunicación.

Entiendo que SMBus e I2C tienen similitudes en su mayoría en el nivel de la señal eléctrica, excepto en las velocidades (SMBus solo funciona hasta el reloj de 100 KHz, mientras que I2C admite relojes más altos; pero de todos modos estamos justo después de la implementación básica en el reloj de 100 KHz, por lo que esto no es una preocupación) . Sin embargo, más adelante en las especificaciones de MCTP, describe el comportamiento de MCTP solo en términos de protocolo SMBus, como escritura de bloque SMBus, que no veo el protocolo equivalente exacto en I2C. También recomendó usar ARP, que creo que no está especificado en I2C y solo en SMBus. Así que espero que el host MCTP me envíe comandos a mí, al dispositivo, en términos del protocolo SMBus. Ahora, si tenemos un controlador SMBus en Arria 10, esto no será un problema, pero solo tenemos I2C, y no estoy seguro de si nuestro controlador "esclavo" I2C comprenderá el protocolo SMBus. I' Intenté investigar en línea, pero tengo puntos de vista contradictorios. También le pregunté a Altera, pero sigo esperando su respuesta. Lo que seguí leyendo es que "SMBus es un subconjunto de I2C".

Lo que más me preocupa son las transacciones de varios bytes (escritura en bloque, lectura, escritura de varios bytes, cualquiera que sea su nombre), ya que el host enviará paquetes y yo responderé con cierta cantidad de bytes de datos. ¿Funcionará nuestro controlador I2C con el protocolo SMBus? Déjame saber lo que piensas.

Esta respuesta a una pregunta relacionada puede tener información útil si aún no la ha visto.
Gracias por el enlace. Lo he leído. Principalmente aborda el caso de I2C como maestro y smbus como esclavo; mi caso es viceversa: soy el esclavo I2C, lo más probable es que reciba órdenes del maestro respetuoso del protocolo SMBus. El enlace que he leído está aquí . Estoy confundido ya que aconseja ajustar el lado SMBus cuando no tengo ningún control allí.

Respuestas (1)

Eso depende de la cantidad de protocolo I2C que se implemente en su controlador Arria. Si solo está informando los "eventos" al programa (como "DETENER detectado", "INICIO detectado", "ACK recibido", "Dirección recibida", etc.), lo más probable es que pueda implementar la mayoría de los SMBus, excepto quizás ARP que requiere, AFAIR, responder a una dirección de transmisión (que su controlador puede no tener soporte). La otra preocupación son los tiempos de espera. Los SMBus tienen tiempos de espera más estrictos, especialmente en lo que respecta a la extensión del reloj. La compatibilidad dependería en gran medida de la medida en que el maestro utilice el protocolo SMBus y espere conformidad.

Por otro lado, si su Arria proporciona una abstracción de mayor nivel (como "Enviar byte I2C"), lo más probable es que sea un obstáculo.

Si tiene alguna placa de evaluación para su Arria 10 FPGA, recomendaría probar el concepto usando esa placa antes de usar este chip para el diseño y la producción.

Estoy de acuerdo, las pequeñas diferencias de bajo nivel probablemente no sean un problema, pero la implementación de las funciones SMBus de nivel superior podría ser un problema. De hecho, a 100 kHz, el I2C no es totalmente compatible con el SMBus. Por ejemplo, se permite que SDA y SCL bajen al mismo tiempo para I2C pero no para SMBus.