CONFIG_APP_MSC_STORAGE_RAM VS FLASH_FATFS

Hi Team,
NCS v2.3.0
nrf52840

my project works as expected with CONFIG_APP_MSC_STORAGE_RAM=y

but I need storage FLASH_FATFS

I set CONFIG_APP_MSC_STORAGE_FLASH_FATFS=y
and the disk does not open in Windows, it gives an error window when connecting nrf USB.

Thank you.

4034.chatDK_update.7z
Parents
  • Hi,

    Could you please show the error that you get?

    Best regards,
    Dejan

  • Hi,
    so far nothing has helped.

    Best regards,
    Serhii

  • Hi,

    This may or may not be related to your issue, but due to some blocking behavior when working with USB, all shell_print statements in model_handler.c should ideally be either removed or replaced by either printk or LOG.

    Regarding the persistent USB storage, I have tested successfully with a following configuration changes applied to your project:

    prj.conf

    CONFIG_NVS=n 							
    CONFIG_SETTINGS=n 	
    CONFIG_PM_SINGLE_IMAGE=n 					
    # CONFIG_PM_PARTITION_SIZE_SETTINGS_STORAGE=0x8000		
    CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE=n 				
    CONFIG_BT_SETTINGS=n
    CONFIG_APP_MSC_STORAGE_FLASH_FATFS=y
    #CONFIG_APP_MSC_STORAGE_RAM=y


    nrf52840dk_nrf52840.overlay
    storage_partition: partition@0 {
    			label = "storage";
    			#reg = <0x00000000 DT_SIZE_K(8000)>;
    			reg = <0x00000000 0x00020000>;
    		};


    With above-mentioned changes I could see USB disk with persistent storage after the reset.

    Best regards,
    Dejan


  • Thank you Dejan, I will be satisfied with this option if I can replace shell_print to some kind of uart_tx?

    To give out an msg array to the uart.

  • In version with FOTA and CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y

    when I add to prj.conf your changes

    when I set CONFIG_NVS=n I have error

    C:\ncs\v2.3.0\nrf\include\flash_map_pm.h:41:22: error: 'PM_storage_partition_ID' undeclared (first use in this function)
       41 | #define PM_ID(label) PM_##label##_ID
          |                      ^~~
    C:\ncs\v2.3.0\nrf\include\flash_map_pm.h:46:35: note: in expansion of macro 'PM_ID'
       46 | #define FIXED_PARTITION_ID(label) PM_ID(label)
          |                                   ^~~~~
    c:\da\ncs\chat\src\mass.c:23:41: note: in expansion of macro 'FIXED_PARTITION_ID'
       23 | #define STORAGE_PARTITION_ID            FIXED_PARTITION_ID(STORAGE_PARTITION)
          |                                         ^~~~~~~~~~~~~~~~~~
    c:\da\ncs\chat\src\mass.c:34:36: note: in expansion of macro 'STORAGE_PARTITION_ID'
       34 |         mnt->storage_dev = (void *)STORAGE_PARTITION_ID;
          |                                    ^~~~~~~~~~~~~~~~~~~~
    C:\ncs\v2.3.0\nrf\include\flash_map_pm.h:41:22: note: each undeclared identifier is reported only once for each function it appears in
       41 | #define PM_ID(label) PM_##label##_ID
          |                      ^~~
    C:\ncs\v2.3.0\nrf\include\flash_map_pm.h:46:35: note: in expansion of macro 'PM_ID'
       46 | #define FIXED_PARTITION_ID(label) PM_ID(label)
          |                                   ^~~~~
    c:\da\ncs\chat\src\mass.c:23:41: note: in expansion of macro 'FIXED_PARTITION_ID'
       23 | #define STORAGE_PARTITION_ID            FIXED_PARTITION_ID(STORAGE_PARTITION)
          |                                         ^~~~~~~~~~~~~~~~~~
    c:\da\ncs\chat\src\mass.c:34:36: note: in expansion of macro 'STORAGE_PARTITION_ID'
       34 |         mnt->storage_dev = (void *)STORAGE_PARTITION_ID;

  • Hi,

    There might be a problem with coexistence of storage partition with external flash partition. It would be useful if I could reproduce this issue. Could you make a minimal sample which I could use for this purpose?

    Best regards,
    Dejan

Reply Children
  • Hi,

    I have tested your sample and found 2 pairs of conflicting lines in your prj.conf. 

    CONFIG_NVS=y
    and
    CONFIG_NVS=n
    as well as 
    CONFIG_PM_SINGLE_IMAGE=y
    and
    CONFIG_PM_SINGLE_IMAGE=n



    You should have assigned the value for each configuration option once.

    CONFIG_NVS=n
    CONFIG_PM_SINGLE_IMAGE=n


    Best regards,
    Dejan

  • Hi,

    Could you share your changed prj.conf file?

    Best regards,
    Dejan

  • #
    # Copyright (c) 2020 Nordic Semiconductor ASA
    #
    # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
    #
    CONFIG_NCS_SAMPLES_DEFAULTS=y
    
    # Deffered logging helps improve LPN power consumption
    # when friendship is established.
    CONFIG_LOG_MODE_DEFERRED=y
    
    # General configuration
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    CONFIG_FLASH=y
    CONFIG_FLASH_MAP=y
    #CONFIG_NVS=y
    CONFIG_SETTINGS=y
    CONFIG_HWINFO=y
    CONFIG_DK_LIBRARY=y
    #CONFIG_PM_SINGLE_IMAGE=y
    #CONFIG_PM_PARTITION_SIZE_SETTINGS_STORAGE=0x8000
    #CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE=y
    
    # Bluetooth configuration
    CONFIG_BT=y
    CONFIG_BT_COMPANY_ID=0x0059
    CONFIG_BT_DEVICE_NAME="Mesh Chat"
    CONFIG_BT_L2CAP_TX_MTU=69
    CONFIG_BT_L2CAP_TX_BUF_COUNT=8
    CONFIG_BT_OBSERVER=y
    CONFIG_BT_PERIPHERAL=y
    #CONFIG_BT_SETTINGS=y
    CONFIG_BT_RX_STACK_SIZE=2000
    
    # Disable unused Bluetooth features
    CONFIG_BT_CTLR_DUP_FILTER_LEN=0
    CONFIG_BT_CTLR_LE_ENC=n
    CONFIG_BT_DATA_LEN_UPDATE=n
    CONFIG_BT_PHY_UPDATE=n
    CONFIG_BT_CTLR_CHAN_SEL_2=n
    CONFIG_BT_CTLR_MIN_USED_CHAN=n
    CONFIG_BT_CTLR_PRIVACY=n
    
    # Bluetooth Mesh configuration
    CONFIG_BT_MESH=y
    CONFIG_BT_MESH_RELAY=y
    CONFIG_BT_MESH_FRIEND=y
    CONFIG_BT_MESH_ADV_BUF_COUNT=13
    CONFIG_BT_MESH_RX_SEG_MAX=10
    CONFIG_BT_MESH_TX_SEG_MAX=10
    CONFIG_BT_MESH_PB_GATT=y
    CONFIG_BT_MESH_GATT_PROXY=y
    CONFIG_BT_MESH_DK_PROV=y
    
    # Enable Bluetooth mesh models debug logs
    CONFIG_BT_DEBUG_LOG=y
    CONFIG_BT_MESH_LOG_LEVEL_DBG=y
    
    # Enable Shell module and use UART as a backend
    CONFIG_SHELL=y
    CONFIG_SHELL_BACKEND_SERIAL=y
    
    CONFIG_USE_SEGGER_RTT=y
    
    CONFIG_STDOUT_CONSOLE=y
    
    #USB related configs
    CONFIG_USB_DEVICE_STACK=y
    CONFIG_USB_DEVICE_PRODUCT="Zephyr MSC sample"
    CONFIG_USB_DEVICE_PID=0x0008
    CONFIG_LOG=y
    CONFIG_USB_DRIVER_LOG_LEVEL_ERR=y
    CONFIG_USB_MASS_STORAGE=y
    CONFIG_USB_DEVICE_LOG_LEVEL_ERR=y
    CONFIG_USB_MASS_STORAGE_LOG_LEVEL_ERR=y
    CONFIG_USB_DEVICE_INITIALIZE_AT_BOOT=n
    
    CONFIG_MAIN_STACK_SIZE=1536
    CONFIG_APP_MSC_STORAGE_FLASH_FATFS=y
    #CONFIG_APP_MSC_STORAGE_RAM=y
    
    # FOTA FOTA FOTA
    CONFIG_IMG_MANAGER=y
    CONFIG_MCUBOOT_IMG_MANAGER=y
    # Enable point to point DFU over SMP
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_MCUMGR=y
    CONFIG_MCUMGR_CMD_OS_MGMT=y
    CONFIG_MCUMGR_CMD_IMG_MGMT=y
    # Enable the Bluetooth (unauthenticated) and shell mcumgr transports.
    CONFIG_MCUMGR_SMP_BT=y
    CONFIG_MCUMGR_SMP_BT_AUTHEN=n
    
    CONFIG_BT_L2CAP_TX_MTU=252
    #CONFIG_BT_L2CAP_RX_MTU=252
    #CONFIG_BT_RX_BUF_LEN=260
    CONFIG_BT_BUF_ACL_RX_SIZE=256
    CONFIG_BT_DATA_LEN_UPDATE=y
    CONFIG_BT_AUTO_DATA_LEN_UPDATE=y
    
    # Some command handlers require a large stack.
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
    
    # Enable Extended Advertiser to advertise BT SMP service
    CONFIG_BT_EXT_ADV=y
    CONFIG_BT_EXT_ADV_MAX_ADV_SET=4
    
    # One extra connection for mesh GATT/proxy and one for SMP BT.
    CONFIG_BT_MAX_CONN=3
    
    # One extra identity for SMP service
    CONFIG_BT_ID_MAX=2
    # end FOTA FOTA FOTA end
    
    # FOTA External flash
    CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y
    
    CONFIG_NVS=n 							
    CONFIG_SETTINGS=n 	
    CONFIG_PM_SINGLE_IMAGE=n 					
    # CONFIG_PM_PARTITION_SIZE_SETTINGS_STORAGE=0x8000		
    CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE=n 				
    CONFIG_BT_SETTINGS=n
    

Related