Introduction
Una flash de ESP32 puede contener más de una aplicación, y varios tipos de información (sistemas de archivos, almacenamiento de parámetros, datos de calibración, etc.). Por esta razón, hay una tabla de particiones que se flashea a 0x8000 en la flash (considerando el offset por defecto). La longitud de la tabla de particiones es de 0xC00 bytes, con un máximo de 95 entradas. También hay una suma de control MD5 para comprobar la integridad de la tabla de particiones, añadida después de los datos de la tabla. Cada una de las entradas de la tabla de particiones tiene un nombre (también llamado etiqueta), un tipo (app, data, etc.), un subtipo y el offset en flash donde se carga la partición.
Uno de los principales objetivos de los esquemas de partición es dividir un código grande en múltiples partes para poder cargarlo en el dispositivo. En este post te contamos cómo hacerlo.
Requirements
Los puntos clave que debes tener en cuenta son los siguientes:
PLC industrial basado en ESP32 (familia de PLCs de 10 E/S o familia de PLCs ESP32)
Placas Industrial Shields Leer >>
Related links
Explanation
En primer lugar, abre el documento Boards ubicado en la siguiente ruta en Windows (y su equivalente en Linux, siempre teniendo en cuenta que puede haber algunas diferencias dependiendo de la ubicación de la ruta):
C:\Users\User_Name\AppData\Local\Arduino15\packages\industrialshields\hardware\esp32\1.0.8
Este es el archivo de configuración de Industrial Shields ESP32. Aunque tiene un montón de parámetros de configuración, vamos a centrarnos en esta parte::
################################################## ESP32 PLC #######################################################################esp32plc.name=ESP32 PLC Familyesp32plc.upload.tool=esptool_pyesp32plc.upload.maximum_size=1310720esp32plc.upload.maximum_data_size=327680esp32plc.upload.wait_for_upload_port=trueesp32plc.upload.speed=460800esp32plc.serial.disableDTR=trueesp32plc.serial.disableRTS=trueesp32plc.build.mcu=esp32esp32plc.build.core=industrialshieldsesp32plc.build.board=ESP32_DEVesp32plc.build.f_cpu=240000000Lesp32plc.build.flash_mode=dioesp32plc.build.flash_size=4MBesp32plc.build.boot=dioesp32plc.build.partitions=defaultesp32plc.build.defines=esp32plc.build.flash_freq=80mesp32plc.build.code_debug=0
El otro documento a considerar es el que se encuentra en esta ruta en Windows:
C:\Users\User_Name\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4
También se llama Boards, pero este es el archivo de configuración por defecto para el ESP32. A partir de aquí, vamos a centrarnos en las diferentes opciones de Esquema de Partición:
esp32.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS) esp32.menu.PartitionScheme.default.build.partitions=default esp32.menu.PartitionScheme.defaultffat=Default 4MB with ffat (1.2MB APP/1.5MB FATFS) esp32.menu.PartitionScheme.defaultffat.build.partitions=default_ffat esp32.menu.PartitionScheme.default_8MB=8M Flash (3MB APP/1.5MB FAT) esp32.menu.PartitionScheme.default_8MB.build.partitions=default_8MB esp32.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 esp32.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) esp32.menu.PartitionScheme.minimal.build.partitions=minimal esp32.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 esp32.menu.PartitionScheme.noota_3g=No OTA (1MB APP/3MB SPIFFS) esp32.menu.PartitionScheme.noota_3g.build.partitions=noota_3g esp32.menu.PartitionScheme.noota_3g.upload.maximum_size=1048576 esp32.menu.PartitionScheme.noota_ffat=No OTA (2MB APP/2MB FATFS) esp32.menu.PartitionScheme.noota_ffat.build.partitions=noota_ffat esp32.menu.PartitionScheme.noota_ffat.upload.maximum_size=2097152 esp32.menu.PartitionScheme.noota_3gffat=No OTA (1MB APP/3MB FATFS) esp32.menu.PartitionScheme.noota_3gffat.build.partitions=noota_3gffat esp32.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576 esp32.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS) esp32.menu.PartitionScheme.huge_app.build.partitions=huge_app esp32.menu.PartitionScheme.huge_app.upload.maximum_size=3145728 esp32.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) esp32.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs esp32.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080 esp32.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FAT) esp32.menu.PartitionScheme.fatflash.build.partitions=ffat esp32.menu.PartitionScheme.fatflash.upload.maximum_size=2097152 esp32.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9MB FATFS) esp32.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB esp32.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728
En el segundo archivo, puedes ver todas las opciones del Partition Scheme (Esquema de Partición) disponibles, que también puedes consultar en formato csv en esta otra ruta en Windows:
C:\Users\User_Name\AppData\Local\Arduino15\packages\industrialshields\hardware\esp32\1.0.8\tools\partitions
Una vez seleccionada la configuración de Partition Scheme que vas a utilizar, debes poner su nombre en el parámetro particiones del primer fichero. Aparte de esto, también hay que abrir el documento csv de la configuración que has elegido para consultar el tamaño de la app (la negrita. En este caso vamos a tomar como ejemplo huge_app).
# Name, Type, SubType, Offset, Size, Flagsnvs, data, nvs, 0x9000, 0x5000,otadata, data, ota, 0xe000, 0x2000,app0, app, ota_0, 0x10000, 0x300000,eeprom, data, 0x99, 0x310000,0x1000,spiffs, data, spiffs, 0x311000,0xEF000,
Una vez consultado el tamaño de la aplicación, hay que convertir este valor de hex a dec y poner en el primer archivo Boards este número en el parámetro maximum_size. Finalmente, el primer archivo Boards (la parte del documento) debería tener este aspecto (con estas dos líneas en negrita actualizadas):
############################################ ###### ESP32 PLC ########################### ############################################ esp32plc.name=ESP32 PLC Family esp32plc.upload.tool=esptool_py esp32plc.upload.maximum_size=3145728 esp32plc.upload.maximum_data_size=327680 esp32plc.upload.wait_for_upload_port=true esp32plc.upload.speed=460800 esp32plc.serial.disableDTR=true esp32plc.serial.disableRTS=true esp32plc.build.mcu=esp32 esp32plc.build.core=industrialshields esp32plc.build.board=ESP32_DEV esp32plc.build.f_cpu=240000000L esp32plc.build.flash_mode=dio esp32plc.build.flash_size=4MB esp32plc.build.boot=dio esp32plc.build.partitions=huge_app esp32plc.build.defines= esp32plc.build.flash_freq=80m esp32plc.build.code_debug=0
Y esto es todo, ahora sólo tienes que compilar y cargar el código con el IDE de Arduino seleccionando el dispositivo y el puerto adecuados.
Cómo hacer un esquema de partición en un PLC industrial ESP32