Como I²C EEPROM habla al autobús

Probablemente conozca I²C, un bus serie que se utiliza normalmente para comunicaciones no muy rápidas con microcontroladores periféricos. Sin embargo, probablemente, a menos que sea un asistente de I²C, no estará íntimamente consciente de las complicaciones de su funcionamiento, y cada nuevo dispositivo le traerá un largo período de estudio de hojas de datos y rascarse la cabeza.

Si el párrafo anterior te describe, sigue leyendo. [Clint Stevenson] escribió una biblioteca para vincular I²C-EEPROM a plataformas Arduino, y cuando un usuario encontró un error mientras lo usaba en ATtiny85, escribió su solución. La pieza resultante es una explicación clara de cómo las ICU-EEPROM se comunican con el autobús, las diversas operaciones que puede realizar en ellas y lo anterior de cada ubicación en el autobús. Luego continúa explicando el tiempo EEPROM y cómo, debido a que el dispositivo necesita algo de tiempo para completar cada tarea, el microcontrolador debe asegurarse de que haya terminado antes de pasar a la siguiente.

En el caso de [Clint]En la biblioteca, el problema resultó ser una pequeña incompatibilidad con la biblioteca Arduino Wire en el manejo de las condiciones de arranque I²C. I²C tiene un reloj y una línea de datos, ambos altos cuando no se realizan tareas. Una condición inicial indica a los dispositivos en el bus que algo sucederá, y es indicada por la línea de datos bajando mientras la línea del reloj permanece alta por algún tiempo antes de que la línea del reloj comience y la línea de datos lleve el comando I²C. Publicó muestras de código en la página vinculada anterior, y puede encontrar su biblioteca en su repositorio de GitHub.

Si desea saber más sobre I²C, consulte La-Tecnologia Editor [Elliot Williams’] clases magistrales sobre el tema: Qué podría salir mal, edición I²C e Incrustar con Elliot, escaneo de bus I²C.

EEPROM serial muere imagen, de Epop (trabajo propio) [CC0], a través de Wikimedia Commons.

  • Erik Slagter dice:

    Parece común que los implementadores de controladores i2c se acorten porque no están lejos de las situaciones oscuras que puedan ocurrir. No me sorprende del todo que haya algunos errores en de Arduino i2c lib a este respecto. Escribir una lectura desde / hacia EEPROM en serie no es realmente ciencia espacial (en comparación con, por ejemplo, el sensor ambiental BMP180).

  • danjovic dice:

    Cuando se trata de I2C, nunca olvidará el tic-tac del reloj ...

  • Erik Slagter dice:

    De hecho, no muchos dispositivos modernos utilizan un mecanismo de relojería.

    • Tim dice:

      Ha vuelto ahora cuando los sensores I2C se están calentando un poco en 8051 o Cortex-M0 para implementar tanto los problemas del sensor (temp-comp, sensor-merging) como las comunicaciones de alojamiento. Pasé tiempo con un diseñador que usaba dos IMU BNO055, tratando de hacer muchas otras cosas; esas cosas pasan como locas.

  • D dice:

    He conectado muchos dispositivos i2c a Arduinos, como sensores NXT de terceros, etc. y, por lo general, puedo ejecutarlos bien. A veces, sin embargo ... hay un demonio en el bus y los analizadores lógicos serán maldecidos si puedo arreglarlo.

    El último problema es un motor VexIQ inteligente que funciona perfectamente toda la semana y de repente deja de funcionar. El analizador lógico muestra que el motor mantiene baja la línea del reloj (al menos rebota cuando lo apago). Pasé parte de una semana simplemente averiguando qué pedidos enviaba el autobús (cuando funcionó a la perfección).

    Ugh ... perdón por la furia.

  • DillonMCU dice:

    Quemé restaurando mi MCU mientras se lee el esclavo i2c (acelerómetro) y el esclavo coloca datos en SDA. El esclavo i2c mantuvo la línea de datos baja y su máquina de estado a pesar de que estaba en read.state. Mi MCU no pudo controlar el bus.

    Encontré una secuencia de reinicio esclavo I2C en este programa que lo solucionó.
    http://ww1.microchip.com/downloads/en/AppNotes/01028B.pdf

    Obliga a un esclavo a permanecer inactivo y eso explica mis problemas. Lo único es que hay que morderlo al empezar

    "La siguiente secuencia se puede enviar para
    asegúrese de que el dispositivo EEPROM en serie sea adecuado
    Reiniciar:
    • Empiece un poco
    • Reloj en nueve bits de '1'
    • Empiece un poco
    • Detente un momento "

  • PizzaPlaneta dice:

    Soy un estudiante de informática, ¿con qué protocolo sería mejor aprender / experimentar primero?

    • cuerda de arranque dice:

      RS232 / UART, sin tratamiento, solo punto a punto, dúplex. Tome los datos en serie lentamente, analice los mensajes, etc.

  • Marvin dice:

    Todo es divertido y jugable hasta que conoces un dispositivo 24RFXX 🙂

Victoria Prieto
Victoria Prieto

Deja una respuesta

Tu dirección de correo electrónico no será publicada.