Cómo hacer un esquema de partición en un PLC industrial ESP32

Aprende a dividir un código grande en varias partes para cargarlo en el controlador del PLC
8 de abril de 2021 por
Cómo hacer un esquema de partición en un PLC industrial ESP32
Boot & Work Corp. S.L., Quesada Dani Salvans

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


Leer >>

Fundamentos del sistema de archivos SPIFFS y del ESP32 PLC industrial

Leer >>

Cómo controlar un PLC industrial ESP32 a través de Bluetooth

Leer >>

Cómo programar un PLC industrial ESP32 de 10 E/S a través de WiFi

Leer >>

Cómo encontrar mi PLC industrial ideal

Leer >>

Productos de la familia 10 I/Os PLC

Leer >>

Familia de productos ESP32 PLC

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 Family
esp32plc.upload.tool=esptool_py
esp32plc.upload.maximum_size=1310720
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=default
esp32plc.build.defines=
esp32plc.build.flash_freq=80m
esp32plc.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, Flags
nvs, 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. 

Buscar en nuestro blog

Cómo hacer un esquema de partición en un PLC industrial ESP32
Boot & Work Corp. S.L., Quesada Dani Salvans 8 de abril de 2021
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>