2024-10-29 06:07 AM
I am using an STM32F767 with MQTT, and everything works without using TLS. But when I try to enable TLS, it fails to connect to the server because of a memory issue (calloc fails). I read other message boards that state that I need up to 60K of RAM to use TLS (this seems excessive). What are the correction options for configuring stm32F767 when using TLS? Thank you in advance.
steps:
1. this works.
mqtt_client_info.tls_config = altcp_tls_create_config_client((const uint8_t *)tls_root_ca_cert , strlen(tls_root_ca_cert) + 1);
2. this fails with -1, failed malloc
err = mqtt_client_connect(mqtt_client, &pServerSetting->ip_pri, pServerSetting->priServerPort, mqtt_connection_cb, LWIP_CONST_CAST(void*, &mqtt_client_info), &mqtt_client_info);
Other info.
SRAM2 is used for ethernet buffer which is 16K.
I have an external SDRAM (FMC interface) currently being used for a display buffer with plenty of space available is it possible to configure it to use as the buffer?
in lwipopts.h
#define LWIP_RAM_HEAP_POINTER (0x20078000)
in main.c mpu is configured correctly
/** Initializes and configures the Region and the memory to be protected
*/
MPU_InitStruct.Number = MPU_REGION_NUMBER3;
MPU_InitStruct.BaseAddress = 0x20078000;
MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/** Initializes and configures the Region and the memory to be protected
*/
MPU_InitStruct.Number = MPU_REGION_NUMBER4;
MPU_InitStruct.BaseAddress = 0x2007C000;
MPU_InitStruct.Size = MPU_REGION_SIZE_1KB;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);