I'm trying to implement OTA update via BLE on my nrf52dk using Zephyr. I'm following this configuration guide to implement the FOTA in my project. However, when connecting using the nRF Connect app on iOS and choosing the DFU option, I'm getting the following error: OTA DFU Failed: insufficient MTU: 20.
I feel like there's a configuration option I'm missing. Can someone point me in the right direction?
Here's my prj.conf:
# Enable timing CONFIG_TIMING_FUNCTIONS=y CONFIG_BT=y CONFIG_BT_MAX_CONN=1 CONFIG_BT_L2CAP_TX_BUF_COUNT=5 CONFIG_BT_PERIPHERAL=y CONFIG_BT_DEVICE_NAME="HIDRATE_TEST" CONFIG_BT_DEVICE_APPEARANCE=962 CONFIG_HEAP_MEM_POOL_SIZE=2048 # This example requires more workqueue stack CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 CONFIG_BT_DIS=y CONFIG_BT_DIS_PNP=n CONFIG_BT_DIS_MODEL="Project Oslo" CONFIG_BT_DIS_MANUF="HidrateSpark" CONFIG_BT_DIS_SERIAL_NUMBER=y CONFIG_BT_DIS_FW_REV=y CONFIG_BT_DIS_HW_REV=y CONFIG_BT_DIS_SW_REV=n CONFIG_BT_DIS_SERIAL_NUMBER_STR="000" CONFIG_BT_DIS_FW_REV_STR="1.0" CONFIG_BT_DIS_HW_REV_STR="1.0" CONFIG_BT_DEVICE_NAME="Oslo" # Enable the BMS service CONFIG_BT_BMS=y # MCUMgr for DFU CONFIG_MCUMGR=y CONFIG_MCUMGR_SMP_BT=y CONFIG_MCUMGR_SMP_BT_AUTHEN=n # Enable flash operations. CONFIG_FLASH=y CONFIG_FLASH_MAP=y CONFIG_FLASH_PAGE_LAYOUT=y # CONFIG_BT_SMP=y # CONFIG_BT_KEYS_OVERWRITE_OLDEST=y # CONFIG_BT_SETTINGS=y # CONFIG_NVS=y # CONFIG_SETTINGS=y CONFIG_SETTINGS_RUNTIME=y CONFIG_SETTINGS=y CONFIG_SETTINGS_NONE=y CONFIG_BT_DIS_SETTINGS=y CONFIG_BT_DIS_STR_MAX=21 # Accelerometer Configuration CONFIG_STDOUT_CONSOLE=y CONFIG_I2C=y CONFIG_SENSOR=y CONFIG_LIS2DH=y CONFIG_CBPRINTF_FP_SUPPORT=y # LED Config CONFIG_LOG=y CONFIG_LED_STRIP=y CONFIG_LED_STRIP_LOG_LEVEL_DBG=y CONFIG_WS2812_STRIP=y CONFIG_WS2812_STRIP_SPI=y # Mcuboot CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_MCUMGR_CMD_OS_MGMT=y CONFIG_MCUMGR_CMD_IMG_MGMT=y CONFIG_MCUMGR_SMP_BT=y # loadcell CONFIG_HX711=y CONFIG_HX711_TRIGGER_NONE=y CONFIG_FPU=y
Here's my initialization function:
static void smp_svr_init(void) { /* Register the built-in mcumgr command handlers. */ #ifdef CONFIG_MCUMGR_CMD_FS_MGMT fs_mgmt_register_group(); #endif #ifdef CONFIG_MCUMGR_CMD_OS_MGMT os_mgmt_register_group(); #endif #ifdef CONFIG_MCUMGR_CMD_IMG_MGMT img_mgmt_register_group(); #endif #ifdef CONFIG_MCUMGR_CMD_STAT_MGMT stat_mgmt_register_group(); #endif }
I've also included the following call in my bt_ready call:
/* Initialize the Bluetooth mcumgr transport. */ smp_bt_register();