¿Puedo usar dos interfaces I2C en la misma MCU STM32 para comunicarme entre sí?

Tengo una placa STM32 Discovery y quiero probar el protocolo I2C pero no tengo ningún otro dispositivo con el que probar. Quiero saber si puedo usar dos interfaces I2C en la misma placa para que actúen como dos dispositivos diferentes.

No veo por qué no. Son periféricos completamente independientes. Siempre que pueda procesar todo a tiempo, lo cual no es difícil, si se hace correctamente
El término de búsqueda que está buscando es 'bucle invertido'

Respuestas (2)

Sí, claro que puedes, son dos interfaces completamente independientes.

Simplemente inicialice ambos y comience a comunicarse, pero primero debe pensar qué quiere lograr con él, ¿quiere una interfaz maestra y una interfaz esclava para probar, o desea construir una configuración multimaestro donde ambos pueden ser maestros y esclavos? .

¿Necesito usar algunas resistencias o es seguro conectarlo directamente?

Simplemente configure la otra interfaz I2C en modo esclavo y configure las direcciones, etc. en consecuencia, y funcionará.

Soy nuevo en las comunicaciones I2C, pero sé que I2C es un protocolo multimaestro, por lo que cualquier dispositivo en el bus puede ser maestro y esclavo, ¿no? ¿Por qué debería configurar uno en modo esclavo?
Tienes razón sobre multi-master. Realmente depende de lo que estés tratando de lograr. Una opción es tener un monitor I2C, que no reacciona a los mensajes, simplemente los registra. Dispositivo esclavo sería algo que responde a un mensaje enviado a una determinada dirección. El Maestro estaría enviando esos mensajes.
puede tener varios maestros, pero solo el dispositivo esclavo puede recibir algo. Los maestros no tienen dirección a la que dirigirse. Los maestros siempre inician la comunicación. Entonces, puede tener varios maestros, pero si desea enviar algo desde un I2C y recibirlo con otro, ese otro en ese momento debe ser un esclavo y tener una dirección. Después de recibir todo, puede convertirse en maestro e iniciar la comunicación también, no hay problema.
Si es nuevo en I2C, primero buscaría medios para ver el contenido de los mensajes. Tal vez un monitor personalizado, un bus pirata o un osciloscopio que pueda leer los mensajes. Los problemas con I2C suelen ser algo pequeño, como olvidarse de poner un bit de parada donde debería estar.
El STM32 no tiene una inicialización separada para los modos maestro o esclavo. Solo hay un init y debe configurarlo incluyendo las direcciones de los esclavos, pero puede optar por seleccionar una dirección ficticia. Si bien el protocolo I2C define multimaestro, no todos los maestros tienen capacidad multimaestro y los esclavos, por definición, no son maestros. STM32 admite multimaestro.
Además, algunos búferes de bus pueden impedir el uso de multimaestro. Y algunas implementaciones usan I2C "bit banging", lo que significa una implementación de software de I2C, sin usar el HW incorporado de STM32.