QIOvsDIO,GPIO9 y GPIO10,problemas wemos y acceso a la memoria

Administrator

  • Administrator
  • Jr. Member
  • *****
    • Mensajes: 72
    • Ver Perfil

La foto de arriba muestra internamente como esta construido un ESP12 de AI Thinker, basicamente es lo mismo que un esp01 nada mas que con una chapita para frenar interferencia. El modulo ESP12, fue uno de los modelos mas exitosos de AI THINKER que quizo que competidores quisieran copiarlos. Tengan en cuenta que el ESP8266EX que es el corazon del micro esta fabricado por ESPRESSIF. No confundir ESPRESSIF con AI THINKER son 2 empresas distintas

Version corta:
El tópico va a tratar básicamente sobre como recuperar los GPIO9 y GPIO10 para algún uso (les debo el código) y hablar los distintos tipos de acceso a la memoria flash y los problemas con módulos que no son de AI-THINKER


Version larga:

Cita
El tema es así, el esp8266ex es el corazón (el micro que realiza todas las operaciones) esta desarrollado por Espressif, luego hay diversos fabricantes que hacen módulos, el mas conocido es AI-thinker (esp01 esp07 esp12) que es el que usan las placas nodemcu.

No sabia los otros fabricantes (que son los que generan el problema con el flasheo en modo QIO) y en el proyecto de abajo lo aclaran

Si tu esp8266 no es de AI-THINKER y el flash no funciona bien en modo QIO para el spi, intenta el modo DIO.

Vendedores con este posible problema, bah con memorias flash que generan este problema.

Hysiry
ESP-F



https://hackaday.io/project/11570-wifi-webradio-on-esp8266-or-esp32



Cita

Como se puso en la primer imagen basicamente el ESP12, es como un ESP01 nada mas que con una chapita para evitar interferencia, pero el mismo continua teniendo la memoria flash, que en el caso del ESP01 es de fácil acceso y facilita su cambio por una de mayor tamaño



Sobre esta imagen nos vamos a enfocar en los pines SPI que tienen comunicación con la memoria
    Z,     /* GPIO6 - flash chip SPI */
    Z,     /* GPIO7 - flash chip SPI */
    Z,     /* GPIO8 - flash chip SPI */
    PERIPHS_IO_MUX_SD_DATA2_U,  /* 9  - D11 (SD2) (flash chip if QIO) */
    PERIPHS_IO_MUX_SD_DATA3_U,  /* 10 - D12 (SD3) (flash chip if QIO) */
    Z,     /* GPIO11 - flash chip SPI */



Que para que se ubiquen mejor también existen en el nodemcu



No es de extrañar si al usar GPIO9 en low se resetea el ESP8266: la mayoría de las veces se conecta a la entrada SPI Flash/HOLD que pone el pin DO en estado Z cuando está en low... El ESP8266 ya no puede tener acceso al Flash y el watchdog simplemente reinicia el chip.

En cuanto a GPIO10, normalmente está conectado a la entrada /WP (Write Protect), así que aunque no se reinicie el chip como GPIO9, existe la posibilidad de que si lo usas en low, ya no puedas escribir en el chip...

Esto significa que incluso si están disponibles en el módulo, estos pines sólo están destinados a accionar el chip Flash SPI externo, a menos que no estén conectados internamente como se supone que debe ser para los módulos ESP12-D, ver mi comentario sobre HaD:
https://hackaday.com/2017/10/01/trouble-flashing-your-esp8266-meet-dio-and-qio/#comment-4089284

"Los chips Flash SPI tienen 8 pines: VCC, GND, CLK, /CS, DI, DO, /HOLD y /WP. Los primeros 3 pines son obvios, los 5 restantes tienen diferentes funciones dependiendo del modo de funcionamiento.




En el modo estándar SPI, /CS pin habilita y deshabilita el funcionamiento del dispositivo, el pin /WP impide que se escriba el registro de estado, por lo que desde el sector de 4KB a todo el conjunto de memoria puede ser protegido por hardware. El pin /HOLDl se utiliza para hacer una pausa en el dispositivo y poner el pin de salida DO en estado Z. DI es MOSI y se utiliza para escribir instrucciones, dirección o datos en el dispositivo, mientras que DO es MISO y se utiliza para leer datos o estado del dispositivo

En el modo DOUT, es lo mismo que el SPI estándar, pero DI se convierte en IO0 y DO en IO1, y se utilizan como pines de salida de 2 bits para leer datos o estado del dispositivo. Tenga en cuenta que el DI de un solo pin se sigue utilizando como MOSI para escribir instrucciones, dirección o datos en el dispositivo.

En el modo DIO, es lo mismo que DOUT, pero DI (como IO0) y DO (como IO1) también se utilizan para escribir direcciones y datos en el dispositivo. Tenga en cuenta que el DI de un solo pin se sigue utilizando como MOSI para escribir instrucciones.

En el modo QOUT, es lo mismo que en el modo SPI estándar, pero el pin /WP se convierte en IO2 y el pin /HOLD se convierte en IO3, y DI (como IO0), DO (como IO1), /WP (como IO2) y /HOLD (como IO3) se utilizan como pines de salida de 4 bits para leer datos o estado del dispositivo. Tenga en cuenta que el DI de un solo pin se sigue utilizando como MOSI para escribir instrucciones, dirección o datos en el dispositivo.

En el modo QIO, es lo mismo que en el modo QUOT, pero DI (como IO0), DO (como IO1), /WP (como IO2) y /HOLD (como IO3) también se utilizan para escribir direcciones y datos en el dispositivo. Tenga en cuenta que el DI de un solo pin se sigue utilizando como MOSI para escribir instrucciones.

En términos de rendimiento, QIO > QOUT > DIO > DOUT > SPI, no todos los chips SPI Flash soportan todos los modos.

Sin embargo, debido a que el comando en sí (y el comando de estado de lectura) se envían utilizando sólo el SPI estándar, duplicar la velocidad del reloj SPI proporciona un aumento de velocidad mayor que cambiar de DOUT a QIO.

Los modos OTOH, DIO/DOUT liberan el GPIO 9 y 10 para otros usos, a menos que estén conectados a los pines de entrada del chip FLash /WP y /HOLD SPI dentro del módulo...

En el caso de Pete, el fabricante de WEMOS tiene la culpa: ellos eligieron un módulo ESP12 diferente, este diagrama de pines de AI-Thinker parece indicar que GPIO9 y GPIO10 sólo pueden ser usados en ESP12-D (Dual?), no en ESP12E o ESP12-Q (Quad?):

Y por supuesto, GPIO 9 y 10 no están disponibles en el ESP12-S, y el ESP12-F es igual que el ESP12-E, pero con una mejor antena en el PCB".


Cita



ESP8266 DIO misterios DIO resueltos

resulta que algunas de las nuevas tarjetas WEMOS requieren el modo DIO para la programación de los chips FLASH - simplemente no programarán o se mostrarán pero no se ejecutarán si se utiliza el modo de programación QIO (una flag utilizada al flashear).

Verás que si el FLASH está programado en modo DIO, al menos en teoría, deberíamos poder recuperar GPIO9 y GPIO10 como puertos generales!!

Añadí rápidamente en las pruebas de mi código ESP8266 para configurar GPIO9/10 a las salidas - y seleccionar encendido o apagado dependiendo de un parámetro.

Curiosamente, al encender estos parecen ser salidas - porque mi LED de prueba se iluminó brillantemente - pero podrían ser sencillamente pull-ups. No importa, GPIO10 se enciende y apaga. pero sólo en el flasheo en el modo DIO .

Luego me centré en GPIO9. Bueno, enciende y apaga -sin duda alguna... sin embargo, el simple hecho de programar GPIO9 como salida y ponerlo a 0, asegura que el ESP8266 se REBOOTEA después de unos segundos.

A continuación, configuro GPIO9 como una entrada y la monitorizo - el estado predeterminado es 1. No hay ningún problema, pero llevarla físicamente a tierra - resultó en el bloqueo de la placa.

Eso me puso en marcha otra búsqueda que volvió con esta discusión informativa..

Resulta que aunque GPIO9 no es necesario para el modo DIO, sigue conectado al flash.

Así que el modo DIO nos da un pin GPIO extra (10) en realidad.

Pero, ¿puede programarse de esta manera cualquier tarjeta ESP8266 antigua?

En la prueba, una placa estándar parecía poder programarse pero entonces se encendió su pequeña luz azul y estaba muerta. Afortunadamente, la reprogramación en modo QIO le devolvió la vida.

¡Así que ahora lo sabemos! Me pregunto qué modo utilizan las auténticas placas WEMOS.

El resultado final

Como resultado de esto - en mi código ESP8266 que se encuentra en el menú de la derecha, he añadido un nuevo comando, simple por ahora, {dio10: x] donde x es 0 o 1. Esto hace que GPIO10 (SD3) esté disponible, pero sólo en las placas que anda el pin - y que utilizan el modo DIO. No me gustaría pensar qué pasaría si lo usas en una placa programada por QIO. Esto sólo se aplica a mi versión de software 2.2.17 en adelante. Aún así, es una duda más que el que la mayoría de nosotros teníamos hasta ahora. Comprobé si escribir 0 a GPIO10 hizo que el FLASH sea de sólo lectura - no lo es - pero no puedo garantizar que otras placas se comporten de la misma manera - si tienes que intentar usar GPIO10 en modo DIO - es tu eleccion.

https://tech.scargill.net/esp8266-dio-mysteries-solved/
« Última Modificación: septiembre 15, 2018, 02:48:10 am by Administrator »