I2C y SPI: ¿comparte líneas de reloj?

que mezclar SPI e I2C es una mala idea, pero cuando se usa un microcontrolador con pines cortos, ¿es seguro compartir relojes entre ambos buses, siempre que ambos funcionen a frecuencias tolerables por el bus?

En mi solicitud, planeo usar un autobús a la vez, pero supongo que esta pregunta se aplica incluso si ese no fuera el caso.

Hm. ¿Por qué la pregunta vinculada no es lo suficientemente buena para usted?
Depende del acoplamiento de ruido parásito para blindar pares en dos cables y ruido de tierra. Impedancia del cable, carga y tiempo de subida, timbre
Esa pregunta se refiere a compartir reloj y datos.
Si hay una línea que no mezclaría, es el reloj. Aunque en casos puntuales puede seguir funcionando. Gracioso, nunca vi tal problema, probablemente no deberías tenerlo también, con el diseño correcto.
Tenga en cuenta que los dispositivos esclavos de destino I2C pueden realizar estiramientos de reloj en la línea SCL. Eso requiere un comportamiento de drenaje abierto en el lado maestro. El reloj SPI generalmente querría una etapa de controlador push-pull activa en lugar del tiempo de subida perezoso que ofrece un drenaje abierto con una resistencia pull-up.
Bien. No me importa la velocidad, pero el desajuste de drenaje abierto/activo es un problema.
Pensé en este problema hace mucho tiempo. En ese momento, me di cuenta de que sería más seguro compartir una línea de datos y tener líneas de reloj separadas. En última instancia, encontré una solución diferente, por lo que no pude construir ni probar un sistema en el que I2C y SPI compartan líneas.
¿Pero no sigue existiendo el mismo problema de la unidad activa frente al colector abierto? ¿O puedes salirte con la tuya aquí?

Respuestas (1)

En teoría, podría hacer esto, pero tendría que usar dos búferes diferentes. El sistema que estoy imaginando tendría un búfer bidireccional con tres estados que podrían funcionar (o tal vez dos) y podría encender el bus SPI y apagar el bus I2C.

Los pull ups para I2C podrían estar al otro lado del búfer

Sin embargo, si uno está usando un micro pequeño, probablemente lo esté haciendo para ahorrar espacio y también podría usar un micro más grande que un micro y un búfer (o dos).

¿Por qué necesitarías buffers (asumiendo que tu micro es el maestro de ambos buses)? Cuando está hablando de SPI, el I2C SDA no se mueve, por lo que no hay condición de inicio de I2C. Cuando está hablando de I2C, las líneas SPI nCS permanecen inactivas.
Por lo tanto, podría descuidar los pull ups y evitar señalar el bus I2C cuando está ejecutando el reloj. Supongo que podría compartir solo la línea del reloj, pero la velocidad podría disminuir con los pull ups allí. Como mínimo, me gustaría almacenar en búfer la línea I2C y cambiar las líneas SPI para empujar y tirar