ESP 8266 - Como trocar Firmware

O ESP8266 possui bootloader que auxilia na transferência de blocos de códigos em sua memória Flash facilmente através da porta serial.

Basicamente, a transferência de firmware ocorre quando dois pinos recebem níveis indicando para entrar no modo de transferência.

Bootloader oficial da Espressif

NodeMCU Flasher

https://github.com/nodemcu/nodemcu-flasher

Flash mode

O ESP8266 e o ESP32 suportam 4 formas diferentes de acesso ao SPI Flash: DIO, DOUT, QIO e QOUT.

Este modo pode ser selecionado através da opção --flash_mode do esptool.py write_flash.

Estas opções controlam quantos pinos são usados para a comunicação com o SPI Flash e quais comandos SPI serão usados.

Modo QIO - Quad I/O - EBH Quad I/O Fast Read command

Usa 4 pinos para endereços e dados e é o método mais rápido. O host usa 2 pinos adicionais além de usar MOSI e MISO para a leitura e escrita de dados.

Modo QOUT - Quad Output - 6BH Quad Output Fast Read command

Usa 4 pinos para dados e é aproximadamente 15% mais lento que o QIO. O host usa 2 pinos adicionais além de usar MOSI e MISO para a leitura de dados.

Modo DIO - Dual I/O - BBH Dual I/O Fast Read command

Usa 2 pinos para endereços e dados e é aproximadamente 45% mais lento do que o QIO. O host usa MOSI e MISO para leitura e escrita de dados.

Modo DOUT - Dual Output - 3BH Dual Output Fast Read command

Usa 2 pinos para dados e é aproximadamente 50% mais lento do que o QIO. O host usa MOSI e MISO para leitura de dados.

Em geral, escolha o método mais rápido que funcione no seu dispositivo. Nem todos os dispositivos funcionam em todos os modos. Utilize o comando esptool.py flash_id para identificar se o chip Flash suporta o modo QIO.

Método de Reset

Modo ck

RTS controla o pino RESET ou o CH_PD, DTR controla o GPIO0.

Modo wifio

TXD controla o pino GPIO0 através de transistor e DTR controla RESET através de capacitor.|

Modo nodemcu

GPIO0 e RESET são controlados usando 2 transistores como é feito no devkit NodeMCU.

Sistema de arquivos SPIFFS

O sistema de arquivos é armazenado na memória flash, no mesmo chip que a memória de programa e portanto, temos o sketch, o espaço pro OTA, os arquivos de configurações e o conteúdo do servidor WEB no mesmo lugar.

O diagrama abaixo, ilustra o layout da memória flash usado no ambiente Arduino

+-- 0x00000 inicio
|  Area do boot (4096)
+---0x01000
|  Area do sketch (249856)
+---0x3E000
|  Area do OTA
+-----
|  SPIFFS
+-----
|  EEPROM
+-----
|  WiFi Config (SDK
+-- Fim

Portanto, o sistema de arquivos depende do tamanho da memória flash. Há uma tabela de placas no endereço https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html#flash-layout

Apesar do SPIFFS não suportar estrutura de diretórios, podemos utilizar o caractere '/' no nome do diretório para simular a estrutura e o próprio sistema de arquivos dá suporte a usar os subdiretórios.

Outra limitação é quanto aos nomes de arquivos que dever ter 31 caracteres de comprimento, pois o ultimo caractere seria reservado para o terminador de string '\0'. Isso quer dizer que os nomes devem ser curtos e também haverá limites para a quantidade de níveis de subdiretórios que contarão a quantidade de caracteres somados com os caracteres '/'.

Para mais detalhes, leia em https://github.com/esp8266/Arduino/blob/master/cores/esp8266/spiffs/README.md