Mcumgr maximum throughput for FS download

Hi,

In our project, we're using Mcumgr FS to download files from our device.

After tweaking the BLE configuration parameters using the throughput sample (https://github.com/nrfconnect/sdk-nrf/tree/main/samples/bluetooth/throughput#id1), I'm seeing a maximum speed of 18KBps using Nordic's device Manager on an Android phone with the following connection parameters:

PHY: 2M
Connection Interval: 9
Slave Latency: 0
Connection Supervisory Timeout: 42

And according to this post on GitHub (github.com/.../53558maximum throughput is 18KBps

I would like to confirm if that's still the case or not? or Are there other options I can tweak to improve the throughput?

Kconfig file:

# fs_dirent structures are big.
CONFIG_MAIN_STACK_SIZE=2048

# Let __ASSERT do its job
CONFIG_DEBUG=y

CONFIG_LOG=y
CONFIG_LOG_MODE_MINIMAL=y

CONFIG_FLASH=y
CONFIG_FLASH_MAP=y
CONFIG_FLASH_PAGE_LAYOUT=y

CONFIG_SPI=y
CONFIG_SPI_NOR=y
CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096

CONFIG_FILE_SYSTEM=y
CONFIG_FILE_SYSTEM_LITTLEFS=y

CONFIG_PM_PARTITION_REGION_LITTLEFS_EXTERNAL=y
CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=n

CONFIG_BT=y
CONFIG_BT_DEBUG_LOG=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_MAX_CONN=2
CONFIG_BT_DEVICE_APPEARANCE=962

CONFIG_HEAP_MEM_POOL_SIZE=4096

# Over-ride various BT settings for extended data packet size
CONFIG_BT_USER_DATA_LEN_UPDATE=y
CONFIG_BT_USER_PHY_UPDATE=y
CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=y

CONFIG_BT_BUF_ACL_RX_SIZE=502
CONFIG_BT_ATT_PREPARE_COUNT=2
CONFIG_BT_L2CAP_TX_BUF_COUNT=10
CONFIG_BT_L2CAP_TX_MTU=498
CONFIG_BT_L2CAP_DYNAMIC_CHANNEL=y
CONFIG_BT_CONN_TX_MAX=10
CONFIG_BT_BUF_ACL_TX_COUNT=10
CONFIG_BT_BUF_ACL_TX_SIZE=502

CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
CONFIG_BT_CTLR_PHY_2M=y
CONFIG_BT_CTLR_PHY_CODED=y
CONFIG_BT_CTLR_SDC_MAX_CONN_EVENT_LEN_DEFAULT=4000000

CONFIG_BT_GATT_CLIENT=y

CONFIG_BT_DEVICE_NAME_DYNAMIC=y

# This example requires more workqueue stack
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_BT_RX_STACK_SIZE=4096
CONFIG_BT_HCI_TX_STACK_SIZE=2048

#MCUMGR
CONFIG_NET_BUF=y
CONFIG_ZCBOR=y
CONFIG_CRC=y
CONFIG_MCUMGR=y
CONFIG_MCUMGR_GRP_OS=y

# Enable the Bluetooth mcumgr transport (unauthenticated).
CONFIG_MCUMGR_TRANSPORT_BT=y
CONFIG_MCUMGR_TRANSPORT_BT_AUTHEN=n
CONFIG_MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL=y

# Enable the mcumgr Packet Reassembly feature over Bluetooth and its configuration dependencies.
# MCUmgr buffer size is optimized to fit one SMP packet divided into five Bluetooth Write Commands,
# transmitted with the maximum possible MTU value: 498 bytes.
CONFIG_MCUMGR_TRANSPORT_BT_REASSEMBLY=y
CONFIG_MCUMGR_TRANSPORT_NETBUF_SIZE=2475
CONFIG_MCUMGR_GRP_OS_MCUMGR_PARAMS=y
CONFIG_MCUMGR_TRANSPORT_WORKQUEUE_STACK_SIZE=4608
CONFIG_MCUMGR_TRANSPORT_NETBUF_COUNT=6

CONFIG_PM_PARTITION_SIZE_LITTLEFS=0x2000000
CONFIG_FS_LITTLEFS_HEAP_PER_ALLOC_OVERHEAD_SIZE=128
#FS BLE
CONFIG_MCUMGR_GRP_FS=y

# Enable the storage erase command.
CONFIG_MCUMGR_GRP_ZBASIC=y
CONFIG_MCUMGR_GRP_ZBASIC_STORAGE_ERASE=y

# Disable Bluetooth ping support
CONFIG_BT_CTLR_LE_PING=n

# Disable shell commands that are not needed
CONFIG_CLOCK_CONTROL_NRF_SHELL=n
CONFIG_DEVICE_SHELL=n
CONFIG_DEVMEM_SHELL=n
CONFIG_FLASH_SHELL=n

CONFIG_TIMING_FUNCTIONS=y

# I2C
CONFIG_I2C=y
CONFIG_NRFX_TWIM1=y
CONFIG_NRFX_TWIM0=y

Best regards,

Mehdi

Parents
  • Hello Mehdi,

    The maximum speed depends upon device, memory speed, transport, and so on.. I checked internally regarding this.. The 18KiBps quoted in the Github post was for the PR which was showing the increase of speed from how things were done previously and was for one specific hardware setup.. So the throughput value depends on your hardware setup and other factors pertaining to your design.

    Best Regards,

    Swathy

Reply
  • Hello Mehdi,

    The maximum speed depends upon device, memory speed, transport, and so on.. I checked internally regarding this.. The 18KiBps quoted in the Github post was for the PR which was showing the increase of speed from how things were done previously and was for one specific hardware setup.. So the throughput value depends on your hardware setup and other factors pertaining to your design.

    Best Regards,

    Swathy

Children
Related