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