Why did I2C communication failure cause 9160 to crash?

I used 9160 to develop a project for the customer. During the project test, sometimes the data line or clock line level of I2C was abnormal due to hardware reasons. I wonder why the firmware stayed in the thread of I2C communication and could not be returned, which led to the system crash?  I also had this problem with 52840, but it didn't cause the system to crash, because the I2C communication there would have a callback function telling me the result of the communication. If it didn't return, I could set timeout in the firmware and continue with the next step, but not with 9160.  It has been stuck in i2C_transfer and crashed. Why is this?  

Parents
  • Hi,

    Can you show me how the call stack looks like when this error happens, and exactly where in the program it's stuck?

    regards

    Jared 

  • When the system starts, initialize a peripheral, read the device ID through I2C, but the system crashes during the reading process, here is its location and execution code:  

  • Thanks for your reply.  I can confirm that the correct parameters have been passed in, and I2C can be used for communication even when the peripheral is normal. Only when the peripheral works abnormally, its SCL and SDA line level of I2C is abnormal (for example, the level is always high or low), which will cause 9160 to crash.  

  • Hi,

    I'm a bit confused. My understanding was that the I2C peripheral asserted during the reading process after initialization. . 

    duxinglang said:
    but the system crashes during the reading process, here is its location and execution code:

    I therefore asked exactly where in the code it stops during the reading process, and you pointed to the k_sem_take()

    duxinglang said:
    I tracked it down in the code and found that something went wrong during transmission. 

    But then you write:

    duxinglang said:
    can confirm that the correct parameters have been passed in, and I2C can be used for communication even when the peripheral is normal.

    I suggest that you connect the SDA and SCL line to a logic analyzer and see what is sent when the program asserts. You should check if the data that is sent is what you expected and if it is according to what is specified in the datasheet.

    regards

    Jared 

  • I used the logic analyzer to check the level changes of SDA and SCL. Yes, when this happens, there are some abnormalities in the peripherals, which leads to the high or low level of SDA or SCL. This is what I can expect, but my question is, even if the external causes I2C abnormalities, why does this abnormality cause the collapse of 9160? Can the 9160, as a host, not automatically return an error when it encounters an abnormal communication timeout, and then continue the following instructions? Why stay here all the time? I tested nrf52810 and found it wouldn't crash.

  • Hi,

    I agree that it shouldn't cause the program to stop when it encounters I2C error. But my question previously was where exactly in the program it stops. This is still not clear to me. 

    In an earlier comment you pointed to k_sem_take_forever(), and I then wondered if you passed the correct parameters to the function. Can you again show me exactly where the programs stops after you hit an error?

    Could you also share your code?

    regards

    Jared 

  • As I said, it crashes when it runs to the function k_sem_take().  This function is in line 79 of file i2C_nrfx_twim.c. 

    This is my interface function for i2C initialization and read/write operations, and it should look fine.

    #define PMU_DEV "I2C_1"
    #define PMU_PORT "GPIO_0"
    
    static struct device *i2c_pmu;
    static struct device *gpio_pmu;
    
    static bool init_i2c(void)
    {
    	i2c_pmu = device_get_binding(PMU_DEV);
    	if(!i2c_pmu)
    	{
    	#ifdef PMU_DEBUG
    		LOGD("ERROR SETTING UP I2C");
    	#endif
    		return false;
    	} 
    	else
    	{
    		i2c_configure(i2c_pmu, I2C_SPEED_SET(I2C_SPEED_FAST));
    		return true;
    	}
    }
    
    static s32_t platform_write(struct device *handle, u8_t reg, u8_t *bufp, u16_t len)
    {
    	u32_t i=0;
    	u8_t data[len+1];
    	u32_t rslt = 0;
    
    	data[0] = reg;
    	memcpy(&data[1], bufp, len);
    	rslt = i2c_write(handle, data, len+1, MAX20353_I2C_ADDR);
    
    	return rslt;
    }
    
    static s32_t platform_read(struct device *handle, u8_t reg, u8_t *bufp, u16_t len)
    {
    	u32_t rslt = 0;
    
    	rslt = i2c_write(handle, &reg, 1, MAX20353_I2C_ADDR);
    	if(rslt == 0)
    	{
    		rslt = i2c_read(handle, bufp, len, MAX20353_I2C_ADDR);
    	}
    
    	return rslt;
    }

     

    By the way, my project using the sdk version is ncs1.2.0. my prj.conf file and overlay file is like this:

    #
    # Copyright (c) 2019 Nordic Semiconductor ASA
    #
    # SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
    #
    # General config
    CONFIG_NEWLIB_LIBC=y
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
    CONFIG_ASSERT=y
    CONFIG_REBOOT=y
    CONFIG_GPIO=y
    CONFIG_TRUSTED_EXECUTION_NONSECURE=y
    
    # Log
    CONFIG_LOG=y
    CONFIG_LOG_IMMEDIATE=y
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_LOG_BACKEND_RTT=y
    CONFIG_LOG_BACKEND_UART=n
    CONFIG_LOG_DEFAULT_LEVEL=4
    CONFIG_LOG_MODE_OVERFLOW=y
    CONFIG_LOG_BACKEND_RTT_MODE_DROP=y
    CONFIG_LOG_BACKEND_SHOW_COLOR=n
    CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP=n
    
    # watch dog
    CONFIG_WATCHDOG=y
    CONFIG_WATCHDOG_TIMEOUT_MSEC=10000
    
    # Modem info
    CONFIG_MODEM_INFO=y
    
    # BSD library
    CONFIG_BSD_LIBRARY=y
    CONFIG_BSD_LIBRARY_TRACE_ENABLED=n
    
    # Flash
    CONFIG_FLASH=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    
    # NVS
    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_NVS=y
    CONFIG_NVS_LOG_LEVEL_DBG=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    
    # GPS
    CONFIG_NRF9160_GPS=y
    #CONFIG_GPS_USE_SIM=y
    CONFIG_GPS_USE_EXTERNAL=y
    CONFIG_GPS_DEV_NAME="NRF9160_GPS"
    CONFIG_GPS_CONTROL_PSM_ENABLE_ON_START=y
    CONFIG_GPS_CONTROL_FIRST_FIX_CHECK_DELAY=10
    CONFIG_GPS_CONTROL_FIX_CHECK_INTERVAL=30
    CONFIG_GPS_CONTROL_FIX_TRY_TIME=360
    CONFIG_GPS_CONTROL_PSM_DISABLE_ON_STOP=n
    
    # AT_CMD
    #CONFIG_AT_HOST_LIBRARY=y
    #CONFIG_UART_INTERRUPT_DRIVEN=y
    
    # Console
    CONFIG_CONSOLE_SUBSYS=n
    CONFIG_CONSOLE_HANDLER=n
    CONFIG_CONSOLE_GETCHAR=n
    CONFIG_CONSOLE=n
    CONFIG_RTT_CONSOLE=y
    CONFIG_UART_CONSOLE=n
    
    # Enable SUPL client support AGPS
    CONFIG_SUPL_CLIENT_LIB=n
    
    # Network
    CONFIG_NETWORKING=y
    CONFIG_NET_NATIVE=n
    CONFIG_NET_SOCKETS_OFFLOAD=y
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_SOCKETS_POSIX_NAMES=y
    
    # LTE link control
    CONFIG_LTE_LINK_CONTROL=y
    CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
    CONFIG_LTE_NETWORK_USE_FALLBACK=y
    CONFIG_LTE_NETWORK_TIMEOUT=60
    CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=n
    CONFIG_LTE_NETWORK_MODE_NBIOT_GPS=y
    CONFIG_LTE_LEGACY_PCO_MODE=y
    
    # PSM
    CONFIG_LTE_PSM_ENABLE=y
    # Set Periodic-TAU timer to 1 hour and Active-Time to 10 seconds.
    CONFIG_LTE_PSM_REQ_RPTAU="01000110"
    CONFIG_LTE_PSM_REQ_RAT="00000101"
    
    # eDRX
    CONFIG_LTE_EDRX_ENABLE=n
    CONFIG_LTE_EDRX_REQ_VALUE="1001"
    
    # RAI
    CONFIG_LTE_RAI_ENABLE=n
    
    # MQTT
    CONFIG_MQTT_LIB=y
    CONFIG_MQTT_LIB_TLS=n
    CONFIG_MQTT_KEEPALIVE=300
    CONFIG_MQTT_PUB_TOPIC="device/e2/pushdata"
    CONFIG_MQTT_SUB_TOPIC="device/e2/"
    CONFIG_MQTT_CLIENT_ID="my-client-id"
    CONFIG_MQTT_USER_NAME="admin123"
    CONFIG_MQTT_PASSWORD="admin123"
    CONFIG_MQTT_DOMESTIC_BROKER_HOSTNAME="47.107.51.89"
    CONFIG_MQTT_DOMESTIC_BROKER_PORT=1883
    CONFIG_MQTT_FOREIGN_BROKER_HOSTNAME="18.135.53.53"
    CONFIG_MQTT_FOREIGN_BROKER_PORT=1883
    
    # Library for buttons and LEDs
    CONFIG_DK_LIBRARY=y
    CONFIG_DK_LIBRARY_INVERT_LEDS=n
    
    # Heap and stacks
    CONFIG_HEAP_MEM_POOL_SIZE=16384
    CONFIG_MAIN_STACK_SIZE=8192
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    CONFIG_HW_STACK_PROTECTION=y
    
    # SPI
    CONFIG_SPI=y
    CONFIG_SPI_NRFX=y
    CONFIG_SPI_2=y
    CONFIG_SPI_2_NRF_SPIM=y
    CONFIG_SPI_3=y
    CONFIG_SPI_3_NRF_SPIM=y
    
    # I2C
    CONFIG_I2C=y
    CONFIG_I2C_NRFX=y
    CONFIG_I2C_1=y
    CONFIG_I2C_1_NRF_TWIM=y
    CONFIG_I2C_2=n
    CONFIG_I2C_2_NRF_TWIM=n
    CONFIG_I2C_INIT_PRIORITY=60
    
    # UART
    CONFIG_SERIAL=y
    CONFIG_UART_INTERRUPT_DRIVEN=y
    
    # ANIMATION
    CONFIG_ANIMATION_SUPPORT=y
    
    # PPG
    CONFIG_PPG_SUPPORT=y
    
    # IMU
    CONFIG_IMU_SUPPORT=y
    CONFIG_FALL_DETECT_SUPPORT=n
    
    # WIFI
    CONFIG_WIFI=n
    
    # TP
    CONFIG_TOUCH_SUPPORT=y
    
    # AUDIO
    CONFIG_AUDIO_SUPPORT=n
    
    # Data Sync
    CONFIG_SYNC_SUPPORT=y
    
    # Temperature
    CONFIG_TEMP_SUPPORT=y
    
    # CRC Check
    CONFIG_CRC_SUPPORT=y
    
    # DEVICE POWER MANAGEMENT
    CONFIG_DEVICE_POWER_MANAGEMENT=y
    
    # Download client
    CONFIG_DOWNLOAD_CLIENT=y
    CONFIG_DOWNLOAD_CLIENT_TLS=y
    CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
    
    # DATA UPDATE
    CONFIG_DATA_DOWNLOAD_SUPPORT=n
    CONFIG_DATA_DOWNLOAD_HOST_HK="aug-fm-files-hk.oss-cn-hongkong.aliyuncs.com"
    CONFIG_DATA_DOWNLOAD_HOST_CN="aug-fm-files-cn.oss-cn-shenzhen.aliyuncs.com"
    # IMG
    CONFIG_IMG_DATA_UPDATE=y
    CONFIG_IMG_DATA_DOWNLOAD_FILE="E2/e2_img.bin"
    # FONT
    CONFIG_FONT_DATA_UPDATE=y
    CONFIG_FONT_DATA_DOWNLOAD_FILE="E2/e2_font.bin"
    # PPG
    CONFIG_PPG_DATA_UPDATE=y
    CONFIG_PPG_DATA_DOWNLOAD_FILE="E2/e2_ppg.bin"
    
    # fota download
    CONFIG_FOTA_DOWNLOAD=y
    CONFIG_FOTA_DOWNLOAD_PROGRESS_EVT=y
    CONFIG_FOTA_DOWNLOAD_HOST_HK="aug-fm-files-hk.oss-cn-hongkong.aliyuncs.com"
    CONFIG_FOTA_DOWNLOAD_HOST_CN="aug-fm-files-cn.oss-cn-shenzhen.aliyuncs.com"
    CONFIG_FOTA_DOWNLOAD_FILE="E2/e2_update.bin"
    CONFIG_APPLICATION_VERSION=1
    
    # Image manager
    CONFIG_IMG_MANAGER=y
    CONFIG_FLASH=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    
    # DFU Target
    CONFIG_DFU_TARGET=y
    
    # Modem key management
    CONFIG_MODEM_KEY_MGMT=y
    
    # Application Upgrade support
    CONFIG_BOOTLOADER_MCUBOOT=y

    &spi2{
    	compatible = "nordic,nrf-spim";
    	status = "okay";
    	sck-pin = <3>;
    	mosi-pin = <4>;
    	miso-pin = <5>;
    };
    
    &spi3{
    	compatible = "nordic,nrf-spim";
    	status = "okay";
    	sck-pin = <22>;
    	mosi-pin = <20>;
    	miso-pin = <20>;
    };
    
    &i2c1{
    	compatible = "nordic,nrf-twim";
    	status = "okay";
    	sda-pin = <30>;
    	scl-pin = <31>;
    	clock-frequency = <I2C_BITRATE_FAST>;
    };
    
    &uart0{
    	status = "okay";
    	current-speed = <115200>;
    	tx-pin = <29>;
    	rx-pin = <28>;
    	#rts-pin = <14>;
    	#cts-pin = <15>;
    };
    

Reply
  • As I said, it crashes when it runs to the function k_sem_take().  This function is in line 79 of file i2C_nrfx_twim.c. 

    This is my interface function for i2C initialization and read/write operations, and it should look fine.

    #define PMU_DEV "I2C_1"
    #define PMU_PORT "GPIO_0"
    
    static struct device *i2c_pmu;
    static struct device *gpio_pmu;
    
    static bool init_i2c(void)
    {
    	i2c_pmu = device_get_binding(PMU_DEV);
    	if(!i2c_pmu)
    	{
    	#ifdef PMU_DEBUG
    		LOGD("ERROR SETTING UP I2C");
    	#endif
    		return false;
    	} 
    	else
    	{
    		i2c_configure(i2c_pmu, I2C_SPEED_SET(I2C_SPEED_FAST));
    		return true;
    	}
    }
    
    static s32_t platform_write(struct device *handle, u8_t reg, u8_t *bufp, u16_t len)
    {
    	u32_t i=0;
    	u8_t data[len+1];
    	u32_t rslt = 0;
    
    	data[0] = reg;
    	memcpy(&data[1], bufp, len);
    	rslt = i2c_write(handle, data, len+1, MAX20353_I2C_ADDR);
    
    	return rslt;
    }
    
    static s32_t platform_read(struct device *handle, u8_t reg, u8_t *bufp, u16_t len)
    {
    	u32_t rslt = 0;
    
    	rslt = i2c_write(handle, &reg, 1, MAX20353_I2C_ADDR);
    	if(rslt == 0)
    	{
    		rslt = i2c_read(handle, bufp, len, MAX20353_I2C_ADDR);
    	}
    
    	return rslt;
    }

     

    By the way, my project using the sdk version is ncs1.2.0. my prj.conf file and overlay file is like this:

    #
    # Copyright (c) 2019 Nordic Semiconductor ASA
    #
    # SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
    #
    # General config
    CONFIG_NEWLIB_LIBC=y
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
    CONFIG_ASSERT=y
    CONFIG_REBOOT=y
    CONFIG_GPIO=y
    CONFIG_TRUSTED_EXECUTION_NONSECURE=y
    
    # Log
    CONFIG_LOG=y
    CONFIG_LOG_IMMEDIATE=y
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_LOG_BACKEND_RTT=y
    CONFIG_LOG_BACKEND_UART=n
    CONFIG_LOG_DEFAULT_LEVEL=4
    CONFIG_LOG_MODE_OVERFLOW=y
    CONFIG_LOG_BACKEND_RTT_MODE_DROP=y
    CONFIG_LOG_BACKEND_SHOW_COLOR=n
    CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP=n
    
    # watch dog
    CONFIG_WATCHDOG=y
    CONFIG_WATCHDOG_TIMEOUT_MSEC=10000
    
    # Modem info
    CONFIG_MODEM_INFO=y
    
    # BSD library
    CONFIG_BSD_LIBRARY=y
    CONFIG_BSD_LIBRARY_TRACE_ENABLED=n
    
    # Flash
    CONFIG_FLASH=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    
    # NVS
    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_NVS=y
    CONFIG_NVS_LOG_LEVEL_DBG=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y
    
    # GPS
    CONFIG_NRF9160_GPS=y
    #CONFIG_GPS_USE_SIM=y
    CONFIG_GPS_USE_EXTERNAL=y
    CONFIG_GPS_DEV_NAME="NRF9160_GPS"
    CONFIG_GPS_CONTROL_PSM_ENABLE_ON_START=y
    CONFIG_GPS_CONTROL_FIRST_FIX_CHECK_DELAY=10
    CONFIG_GPS_CONTROL_FIX_CHECK_INTERVAL=30
    CONFIG_GPS_CONTROL_FIX_TRY_TIME=360
    CONFIG_GPS_CONTROL_PSM_DISABLE_ON_STOP=n
    
    # AT_CMD
    #CONFIG_AT_HOST_LIBRARY=y
    #CONFIG_UART_INTERRUPT_DRIVEN=y
    
    # Console
    CONFIG_CONSOLE_SUBSYS=n
    CONFIG_CONSOLE_HANDLER=n
    CONFIG_CONSOLE_GETCHAR=n
    CONFIG_CONSOLE=n
    CONFIG_RTT_CONSOLE=y
    CONFIG_UART_CONSOLE=n
    
    # Enable SUPL client support AGPS
    CONFIG_SUPL_CLIENT_LIB=n
    
    # Network
    CONFIG_NETWORKING=y
    CONFIG_NET_NATIVE=n
    CONFIG_NET_SOCKETS_OFFLOAD=y
    CONFIG_NET_SOCKETS=y
    CONFIG_NET_SOCKETS_POSIX_NAMES=y
    
    # LTE link control
    CONFIG_LTE_LINK_CONTROL=y
    CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
    CONFIG_LTE_NETWORK_USE_FALLBACK=y
    CONFIG_LTE_NETWORK_TIMEOUT=60
    CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=n
    CONFIG_LTE_NETWORK_MODE_NBIOT_GPS=y
    CONFIG_LTE_LEGACY_PCO_MODE=y
    
    # PSM
    CONFIG_LTE_PSM_ENABLE=y
    # Set Periodic-TAU timer to 1 hour and Active-Time to 10 seconds.
    CONFIG_LTE_PSM_REQ_RPTAU="01000110"
    CONFIG_LTE_PSM_REQ_RAT="00000101"
    
    # eDRX
    CONFIG_LTE_EDRX_ENABLE=n
    CONFIG_LTE_EDRX_REQ_VALUE="1001"
    
    # RAI
    CONFIG_LTE_RAI_ENABLE=n
    
    # MQTT
    CONFIG_MQTT_LIB=y
    CONFIG_MQTT_LIB_TLS=n
    CONFIG_MQTT_KEEPALIVE=300
    CONFIG_MQTT_PUB_TOPIC="device/e2/pushdata"
    CONFIG_MQTT_SUB_TOPIC="device/e2/"
    CONFIG_MQTT_CLIENT_ID="my-client-id"
    CONFIG_MQTT_USER_NAME="admin123"
    CONFIG_MQTT_PASSWORD="admin123"
    CONFIG_MQTT_DOMESTIC_BROKER_HOSTNAME="47.107.51.89"
    CONFIG_MQTT_DOMESTIC_BROKER_PORT=1883
    CONFIG_MQTT_FOREIGN_BROKER_HOSTNAME="18.135.53.53"
    CONFIG_MQTT_FOREIGN_BROKER_PORT=1883
    
    # Library for buttons and LEDs
    CONFIG_DK_LIBRARY=y
    CONFIG_DK_LIBRARY_INVERT_LEDS=n
    
    # Heap and stacks
    CONFIG_HEAP_MEM_POOL_SIZE=16384
    CONFIG_MAIN_STACK_SIZE=8192
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    CONFIG_HW_STACK_PROTECTION=y
    
    # SPI
    CONFIG_SPI=y
    CONFIG_SPI_NRFX=y
    CONFIG_SPI_2=y
    CONFIG_SPI_2_NRF_SPIM=y
    CONFIG_SPI_3=y
    CONFIG_SPI_3_NRF_SPIM=y
    
    # I2C
    CONFIG_I2C=y
    CONFIG_I2C_NRFX=y
    CONFIG_I2C_1=y
    CONFIG_I2C_1_NRF_TWIM=y
    CONFIG_I2C_2=n
    CONFIG_I2C_2_NRF_TWIM=n
    CONFIG_I2C_INIT_PRIORITY=60
    
    # UART
    CONFIG_SERIAL=y
    CONFIG_UART_INTERRUPT_DRIVEN=y
    
    # ANIMATION
    CONFIG_ANIMATION_SUPPORT=y
    
    # PPG
    CONFIG_PPG_SUPPORT=y
    
    # IMU
    CONFIG_IMU_SUPPORT=y
    CONFIG_FALL_DETECT_SUPPORT=n
    
    # WIFI
    CONFIG_WIFI=n
    
    # TP
    CONFIG_TOUCH_SUPPORT=y
    
    # AUDIO
    CONFIG_AUDIO_SUPPORT=n
    
    # Data Sync
    CONFIG_SYNC_SUPPORT=y
    
    # Temperature
    CONFIG_TEMP_SUPPORT=y
    
    # CRC Check
    CONFIG_CRC_SUPPORT=y
    
    # DEVICE POWER MANAGEMENT
    CONFIG_DEVICE_POWER_MANAGEMENT=y
    
    # Download client
    CONFIG_DOWNLOAD_CLIENT=y
    CONFIG_DOWNLOAD_CLIENT_TLS=y
    CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
    
    # DATA UPDATE
    CONFIG_DATA_DOWNLOAD_SUPPORT=n
    CONFIG_DATA_DOWNLOAD_HOST_HK="aug-fm-files-hk.oss-cn-hongkong.aliyuncs.com"
    CONFIG_DATA_DOWNLOAD_HOST_CN="aug-fm-files-cn.oss-cn-shenzhen.aliyuncs.com"
    # IMG
    CONFIG_IMG_DATA_UPDATE=y
    CONFIG_IMG_DATA_DOWNLOAD_FILE="E2/e2_img.bin"
    # FONT
    CONFIG_FONT_DATA_UPDATE=y
    CONFIG_FONT_DATA_DOWNLOAD_FILE="E2/e2_font.bin"
    # PPG
    CONFIG_PPG_DATA_UPDATE=y
    CONFIG_PPG_DATA_DOWNLOAD_FILE="E2/e2_ppg.bin"
    
    # fota download
    CONFIG_FOTA_DOWNLOAD=y
    CONFIG_FOTA_DOWNLOAD_PROGRESS_EVT=y
    CONFIG_FOTA_DOWNLOAD_HOST_HK="aug-fm-files-hk.oss-cn-hongkong.aliyuncs.com"
    CONFIG_FOTA_DOWNLOAD_HOST_CN="aug-fm-files-cn.oss-cn-shenzhen.aliyuncs.com"
    CONFIG_FOTA_DOWNLOAD_FILE="E2/e2_update.bin"
    CONFIG_APPLICATION_VERSION=1
    
    # Image manager
    CONFIG_IMG_MANAGER=y
    CONFIG_FLASH=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    
    # DFU Target
    CONFIG_DFU_TARGET=y
    
    # Modem key management
    CONFIG_MODEM_KEY_MGMT=y
    
    # Application Upgrade support
    CONFIG_BOOTLOADER_MCUBOOT=y

    &spi2{
    	compatible = "nordic,nrf-spim";
    	status = "okay";
    	sck-pin = <3>;
    	mosi-pin = <4>;
    	miso-pin = <5>;
    };
    
    &spi3{
    	compatible = "nordic,nrf-spim";
    	status = "okay";
    	sck-pin = <22>;
    	mosi-pin = <20>;
    	miso-pin = <20>;
    };
    
    &i2c1{
    	compatible = "nordic,nrf-twim";
    	status = "okay";
    	sda-pin = <30>;
    	scl-pin = <31>;
    	clock-frequency = <I2C_BITRATE_FAST>;
    };
    
    &uart0{
    	status = "okay";
    	current-speed = <115200>;
    	tx-pin = <29>;
    	rx-pin = <28>;
    	#rts-pin = <14>;
    	#cts-pin = <15>;
    };
    

Children
Related