download_client: Unexpected HTTP response: 400 bad request

Hi there!

I am facing "<err> download_client: Unexpected HTTP response: 400 bad request" error
whenever I am trying to download full modem update from AWS S3 bucket.

My environment

1. nRF SDK = 1.9.1
2. Device  = nRF9160

Prj.conf

CONFIG_TRUSTED_EXECUTION_NONSECURE=y


CONFIG_REBOOT=y
CONFIG_RING_BUFFER=y

# LOGGNG
CONFIG_LOG=y
CONFIG_LOG_BUFFER_SIZE=2048
CONFIG_LOG2_MODE_DEFERRED=y
CONFIG_CBPRINTF_FP_SUPPORT=y
CONFIG_LOG_DEFAULT_LEVEL=4

# Console
CONFIG_PRINTK=y
CONFIG_UART_CONSOLE=n
CONFIG_SHELL=y
CONFIG_KERNEL_SHELL=y
CONFIG_DEVICE_SHELL=y
CONFIG_POSIX_CLOCK=y
CONFIG_DATE_SHELL=y
CONFIG_SHELL_STACK_SIZE=1024
CONFIG_SHELL_BACKEND_SERIAL=n
CONFIG_SHELL_LOG_BACKEND=y
CONFIG_SHELL_RTT_LOG_LEVEL_DBG=y
CONFIG_SHELL_RTT_INIT_LOG_LEVEL_WRN=y

CONFIG_THREAD_MONITOR=y
CONFIG_INIT_STACKS=y
CONFIG_BOOT_BANNER=n
CONFIG_THREAD_NAME=y

#enable RTT shell
CONFIG_USE_SEGGER_RTT=y
CONFIG_SHELL_BACKEND_RTT=y
CONFIG_SEGGER_RTT_BUFFER_SIZE_DOWN=32

# UART
CONFIG_UART_ASYNC_API=y

# Modem library
CONFIG_NRF_MODEM_LIB=y
#CONFIG_POSIX_MAX_FDS=8
CONFIG_MODEM_INFO=y

CONFIG_MODEM_KEY_MGMT=y
CONFIG_DOWNLOAD_CLIENT=y


CONFIG_NEWLIB_LIBC=y

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_NETWORK_MODE_LTE_M=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n

CONFIG_LTE_LOCK_BANDS=y
CONFIG_LTE_LOCK_BAND_MASK="0000000001000000000000000001"

# Network
CONFIG_NETWORKING=y
CONFIG_NET_NATIVE=n
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_OFFLOAD=y

# PDN library
CONFIG_PDN=y
CONFIG_PDN_SYS_INIT=n
CONFIG_PDN_DEFAULTS_OVERRIDE=y
CONFIG_PDN_DEFAULT_APN="apnname"
CONFIG_PDN_DEFAULT_FAM_IPV4=y
CONFIG_PDN_DEFAULT_AUTH_CHAP=y
CONFIG_PDN_DEFAULT_USERNAME="username"
CONFIG_PDN_DEFAULT_PASSWORD="password"


CONFIG_HEAP_MEM_POOL_SIZE=29696

# for debug
CONFIG_DEBUG_OPTIMIZATIONS=y
CONFIG_DEBUG_THREAD_INFO=y

CONFIG_OPENOCD_SUPPORT=y
CONFIG_MAIN_STACK_SIZE=8192
CONFIG_PRIVILEGED_STACK_SIZE=1024
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096


# Flash
CONFIG_SPI=y
CONFIG_FLASH=y

# I2C
CONFIG_I2C_NRFX=y
CONFIG_I2C=y

#IMU
CONFIG_SENSOR=y
CONFIG_ICM42605=y
CONFIG_ICM42605_TRIGGER_NONE=y


# json
CONFIG_JSON_LIBRARY=y

# float
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y

# for Zmod library
CONFIG_FPU=y
CONFIG_FPU_SHARING=y
CONFIG_FP_HARDABI=y

CONFIG_CPU_LOAD=y
CONFIG_CPU_LOAD_LOG_INTERVAL=2000
CONFIG_CPU_LOAD_LOG_PERIODIC=y

CONFIG_DATE_TIME=y


CONFIG_APP_VERSION="v0.0.4"


CONFIG_DEVELOP_MODE=y

CONFIG_STAGING_FLG=n
CONFIG_CJSON_LIB=y

# appication fota update configuration
CONFIG_FOTA_DOWNLOAD=y
CONFIG_FOTA_SOCKET_RETRIES=5

CONFIG_DOWNLOAD_HOST="stg-host.jp"
CONFIG_DOWNLOAD_HOST_PROD="prod-host.jp"

#DFU 
CONFIG_DFU_TARGET=y

# MCUBOOT
CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_MCUBOOT_IMG_MANAGER=y

# Image manager
CONFIG_IMG_MANAGER=y
CONFIG_IMG_ERASE_PROGRESSIVELY=y

CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
CONFIG_DOWNLOAD_CLIENT_BUF_SIZE=2048
CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y
CONFIG_DOWNLOAD_CLIENT_RANGE_REQUESTS=n
CONFIG_DOWNLOAD_CLIENT_LOG_LEVEL_DBG=y
CONFIG_DOWNLOAD_CLIENT_LOG_HEADERS=y


#modem delta update configuartion 

CONFIG_MODEM_DELTA_UPDATE_VERSION="mfw_nrf9160_1.3.2"
CONFIG_MODEM_FULL_UPDATE_VERSION="mfw_nrf9160_1.3.2" 

# DFU Target
CONFIG_DFU_TARGET_STREAM=y
CONFIG_DFU_TARGET_FULL_MODEM=y

# Full modem firmware from external flash support
CONFIG_FMFU_FDEV=y
CONFIG_CDDL_GEN=y

#SPI NOR
CONFIG_SPI_NOR=y

#Stream flash
CONFIG_STREAM_FLASH=y
CONFIG_STREAM_FLASH_ERASE=y

#libmodem
CONFIG_NRF_MODEM_LIB_SYS_INIT=n

#Prevalidation is not yet supported by the modem firmware, so skip it for now.
CONFIG_FMFU_FDEV_SKIP_PREVALIDATION=n

CONFIG_NO_OPTIMIZATIONS=y
CONFIG_EXTRA_EXCEPTION_INFO=y
CONFIG_NCS_SAMPLES_DEFAULTS=n

# Crypto
CONFIG_OBERON_BACKEND=y
CONFIG_NORDIC_SECURITY_BACKEND=y
# Disable all non-used crypto
CONFIG_NRF_SECURITY_RNG=n
CONFIG_MBEDTLS_AES_C=n
CONFIG_MBEDTLS_CHACHA20_C=n
CONFIG_MBEDTLS_POLY1305_C=n
CONFIG_MBEDTLS_ECP_C=n
CONFIG_MBEDTLS_RSA_C=n
CONFIG_MBEDTLS_DHM_C=n
CONFIG_MBEDTLS_SHA1_C=n
CONFIG_MBEDTLS_SHA384_C=n
CONFIG_MBEDTLS_SHA512_C=n
CONFIG_MBEDTLS_GCM_C=n
# This is the one we need
CONFIG_MBEDTLS_SHA256_C=y


update_thread.c

    #define MC_API_BUF_SIZE 3072
    
    static char *mc_api_buf = NULL;
    
    mc_api_buf = k_malloc(MC_API_BUF_SIZE);
	if(mc_api_buf == NULL)
	{
		// 取得失敗
		LOG_ERROR("%s", "mc_api_buf k_malloc error");
		return;
	}
	
	memset(mc_api_buf, 0x00, MC_API_BUF_SIZE);
	
	flash_dev = device_get_binding(EXT_FLASH_DEVICE);
									
	if (flash_dev == NULL) {
		LOG_ERROR("Failed to get flash device: %s\n", EXT_FLASH_DEVICE);
	}

	k_work_init(&fmfu_work, fmfu_work_cb);

	const struct dfu_target_full_modem_params params = {
		.buf = fmfu_buf,
		.len = sizeof(fmfu_buf),
		.dev = &(struct dfu_target_fmfu_fdev){ .dev = flash_dev,
									.offset = 0x3e8000,
									.size = 2048000 }
	};

	ret = dfu_target_full_modem_cfg(&params);
	if (ret != 0) {
		LOG_ERROR("dfu_target_full_modem_cfg failed: %d\n", ret);
	}

	ret = modem_info_init();
	if (ret != 0) {
		LOG_ERROR("modem_info_init failed: %d\n", ret);
	}

	sprintf(mc_api_buf, "https://%s/product/%s/bin/modem/%s/modem_update_%s.cbor", DOWNLOAD_HOST, PRODUCT, json_latest_modem_version->valuestring, removed_dot_modem_version);
	ret = fota_download_start(DOWNLOAD_HOST, mc_api_buf, TLS_MC_API_SEC_TAG, 0, 1024);
	if (ret != 0) {
		LOG_DBG("fota_download_start() failed: %d", ret);
	} 


Error log



build log


I feel, 

CONFIG_HEAP_MEM_POOL_SIZE=29696


this above config in prj.conf is causing the problem.

Please help me in resolving the issue.


Best Regards

Praveen Deshmane





Parents Reply
  • Hello Charlie,

    Thank you for your reply.

    The full modem example from nordic works without any problem.

    The problem is in my current code. 

    CONFIG_HEAP_MEM_POOL_SIZE=29696

    when it was  CONFIG_HEAP_MEM_POOL_SIZE=16384,  It worked wihout problem. We are using k_malloc() to dynamically allocate a single large block of memory with the specified size.

    For other module, we are using another 
    12288 memory to download AGPS online. Which is is included in CONFIG_HEAP_MEM_POOL_SIZE.

    I think, the problem is in my current prj.conf configuration. 




    is this k_malloc() causing the problem?

    Best regards

    Praveen Deshmane




Children
No Data
Related