Buenos días,
Llevo unos días probando escrituras y lecturas de ese chip mediante un test de estrés que me he montado con python en una Raspberry 3. La idea es desarrollar una PCB con hasta 8 chips (Lo que permite su direccionamiento) de estos. El circuito lo tengo montado en una proto y es una versión básica con un único chip. Estoy poniendo a prueba el montaje más sencillo: 1 chip (clk spi funcionando a 1Mhz). Cabe decir que estoy tomando los 3.3V de los pines VDD de la Raspberry puesto que con un único chip el consumo no es prohibitivo.
EL test de python consiste en:
1.- configurar un banco como salidas y el otro como entradas con Rpull up habilitada.
2.- Las salidas escribirán siempre '0', nunca '1'.
3.- De entre todas las entradas algunas puede que estén directamente conectadas a alguna/s salida/s o bien no estar conectadas a nada, con lo cual leerán '0' o bien '1' (si están fotando/al aire).
4.- Las entradas también podrían estar durante la ejecución leyendo un contacto a GND (imaginad un usuario llevando una especie de "sonda" que lleva GND a las entradas GPIOs) o bien también puede ser un punto fijo (nadie lo cambia de posición) que está GND.
Ahora he probado qué tal se comporta en una proto teniendo 8 bits del chip de para entradas y otros 8 para salidas. Con un hilo a GND llevo GND a una de las entradas y con otros hilos juego a cerrar circuito conectando una entrada y una salida (con lo cual leería '0').
Problema:Todo va perfecto hasta que ocurre que se dispara el consumo y se me calienta al punto de tocarlo y escaldarte. Le queda poco para quemarse. La cosa se resuelve si inmediatamente reseteo el chip. Levanto el pin de reset y se acabó. Luego vuelvo a arrancar y sigue leyendo bien sin recalentarse ni consumir fuera de lo habitual.
He consultado este tema y existe literatura que hace hincapié en estas posibles causas: * el switching en tecnología CMOS, en las que
la prolongación en tiempo de un switcheo 0<->1 puede provocar enclavamientos y picos de corriente destructivos porque permanecería demasiado tiempo los dos transistores del inversor conduciendo. Esta es una de las principales causas del sobrecalentamiento indeseado. Por otro lado, pienso que leer "0-1" de forma prolongada -imaginad leer un tren de pulsos, palabras binarias de un bus- no puede ser que eso dañe un dispositivo por recibir en un pin '1' y '0' durante un tiempo no muy extenso, y, lo mismo, si así es no sé cómo protegen, de esto, a ese pin los diseñadores.
* Diferencias o caídas de tensión diferentes puntos de GND --> no sé si tener hilos desde la Rasp hasta la proto afectaría mucho a eso.
* Que esté llevando una tensión para Vih muy superior a VDD --> cosa imposible porque es el mismo chip el que escribe vih y escribe 3.3V. Igualmente no escribimos Vih, sino ViL siempre.
* También hubo quien me sugirió también que una posible causa de este comportamiento podría ser "latch up" por ESD (un tiristor parásito) por el hecho que se arreglase al resetear el chip:
https://es.wikipedia.org/wiki/Enclavamiento_(electr%C3%B3nica) --> Pero no sé cómo protegerlas de ese fenómeno. Y me extraña ser la única a la que pase esto con tantos ejemplos de uso de este chip y conectándolo a circuitos más complejos. Nunca me había pasado esto.
Sugerencias de solución:La gente me sugiere proteger con condensadores, Rs y diodos estas GPIOs; pero digo yo, no es exagerado meter en cada una de mis 64 GPIOs diodos, C y Rs? Más que nada porque no he visto ningún ejemplo de circuito que proteja así sus GPIOs (ni en MCUs ni en este chip en concreto), como mucho una R por si conectan por error una salida a un pulsador .
Yo no he visto esto ni con diodos, ni con condensadores y muchas veces ni si quiera Rs. Me gustaría saber cómo se suele proteger de una forma eficaz y eficiente las GPIOs. El circuito es muy sencillo, lo único es que tiene 64 puntos y se comunican con Rasp por SPI. Pero las GPIOs las usaré para cerrar circuito entre salida-entrada o las dejaré abiertas y leeré. No hay mucho más.
También me recomendaron usar Rs de 10K a las salidas y a las entradas. Yo lo he probado parece que no ha disparado el sobrecalentamiento (por ahora). Es cierto que estoy conectando y desconectando hilos durante la ejecución. Será ese el problema? Quizás los diseñadores no pongan condensadores ni diodos por que dan por hecho que no necesitarán proteger porque ven poco riesgo de cometer ciertos errores, o no conectarán cosas estando en marcha una ejecución, etc. Pero estos dispositivos que uso mantienen sus estados aunque se pare la ejecución. Y aunque un usuario no cambie conexiones de hilos hasta que no finalice la ejecución tengo miedo que esos cambios de hilos despierten a la fiera y se se achicharren las placas.
Sigo buscando ejemplos de circuitos con GPIO protegidas con diodos y condensadores para ver si me ilumino.
Agradecería si alguien me comparte su experiencia tratando GPIOs y protegiéndolas o bien sobre el tema de recalentamiento por sobreconsumo de este chip. Cualquier añadido será útil!
Gracias de antemano.
