Initialization of the UART when the system starts up

I have developed a project using 9160. When I start up with the client board, the log will show that at command execution error occurs when I start up. Why is this?  I admit that WHEN I start up, I perform some operations on NVS first, and then a few seconds later, I use the AT command to operate the modem. The log shows that other applications also use the AT command when starting up, and the operation fails. Is it because the Uart initialization takes some time?  

00> [00007789] <inf> at_host: UART check failed: 12. Dropping buffer and retrying.
00> [00008270] <inf> fs_nvs: 6 Sectors of 4096 bytes
00> [00008276] <inf> fs_nvs: alloc wra: 1, e08
00> [00008281] <inf> fs_nvs: data wra: 1, 1e8
00> [00008365] <inf> auri: [14:51:07:255]..pmu_init>>pmu_init
00> 
00> [00012335] <wrn> at_host: Ignored null; would terminate string early.
00> [00013801] <wrn> at_host: Ignored null; would terminate string early.
00> [00018409] <wrn> at_host: Ignored null; would terminate string early.
00> [00019019] <err> at_host: Error while processing AT command: -8
00> [00019264] <err> at_host: Error while processing AT command: -8
00> [00019508] <err> at_host: Error while processing AT command: -8
00> [00019752] <err> at_host: Error while processing AT command: -8
00> [00019996] <err> at_host: Error while processing AT command: -8
00> [00020240] <err> at_host: Error while processing AT command: -8
00> [00020484] <err> at_host: Error while processing AT command: -8
00> [00020728] <err> at_host: Error while processing AT command: -8
00> [00020972] <e00> [00020972] <e[00300502] <inf> auri: [14:51:15:170]..SetModemTurnOn>>turn on modem success!

Parents
  • Hello,

    what is the NCS version? Can you share the code?

  • Hi, the ncs verson is v1.2.0. My code for start up is fllow:

    void system_init(void)
    {
    #ifdef CONFIG_FOTA_DOWNLOAD
    	fota_init();
    #endif
    
    	InitSystemSettings();
    	
    	pmu_init();
    	LCD_Init();
    	
    	ShowBootUpLogo();
    
    	key_init();
    #ifdef CONFIG_AUDIO_SUPPORT	
    	audio_init();
    #endif
    	ble_init();
    #ifdef CONFIG_PPG_SUPPORT	
    	PPG_init();
    #endif
    #ifdef CONFIG_IMU_SUPPORT
    	IMU_init(&imu_work_q);
    #endif
    	NB_init(&nb_work_q);
    	GPS_init(&gps_work_q);
    }
    
    void work_init(void)
    {
    	k_work_q_start(&nb_work_q, nb_stack_area,
    					K_THREAD_STACK_SIZEOF(nb_stack_area),
    					CONFIG_APPLICATION_WORKQUEUE_PRIORITY);
    #ifdef CONFIG_IMU_SUPPORT	
    	k_work_q_start(&imu_work_q, imu_stack_area,
    					K_THREAD_STACK_SIZEOF(imu_stack_area),
    					CONFIG_APPLICATION_WORKQUEUE_PRIORITY);
    #endif
    	k_work_q_start(&gps_work_q, gps_stack_area,
    					K_THREAD_STACK_SIZEOF(gps_stack_area),
    					CONFIG_APPLICATION_WORKQUEUE_PRIORITY);	
    	
    	if(IS_ENABLED(CONFIG_WATCHDOG))
    	{
    		watchdog_init_and_start(&k_sys_work_q);
    	}
    }
    
    int main(void)
    {
    	work_init();
    	system_init();
    
    	while(1)
    	{
    		KeyMsgProcess();
    		TimeMsgProcess();
    		NBMsgProcess();
    	#ifdef CONFIG_WIFI	
    		WifiProcess();
    	#endif
    		GPSMsgProcess();
    		PMUMsgProcess();
    	#ifdef CONFIG_IMU_SUPPORT	
    		IMUMsgProcess();
    		FallMsgProcess();
    	#endif
    	#ifdef CONFIG_PPG_SUPPORT	
    		PPGMsgProcess();
    	#endif
    		LCDMsgProcess();
    	#ifdef CONFIG_TOUCH_SUPPORT
    		TPMsgProcess();
    	#endif
    		AlarmMsgProcess();
    		SettingsMsgPorcess();
    		SOSMsgProc();
    		UartMsgProc();
    		ScreenMsgProcess();
    	#ifdef CONFIG_FOTA_DOWNLOAD
    		FotaMsgProc();
    	#endif
    	#ifdef CONFIG_AUDIO_SUPPORT
    		AudioMsgProcess();
    	#endif
    	#ifdef CONFIG_ANIMATION_SUPPORT
    		AnimaMsgProcess();
    	#endif
    		system_init_completed();
    		k_cpu_idle();
    	}
    }
    
    static void modem_init(struct k_work *work)
    {
    	SetModemTurnOn();
    
    	k_delayed_work_submit_to_queue(app_work_q, &nb_link_work, K_SECONDS(2));
    }
    
    
    static void nb_link(struct k_work *work)
    {
    	int err=0;
    	u8_t tmpbuf[128] = {0};
    	static u32_t retry_count = 0;
    	static bool frist_flag = false;
    
    	if(!frist_flag)
    	{
    		frist_flag = true;
    		GetModemInfor();
    		SetModemTurnOff();
    		if(strlen(g_imsi) > 0)
    		{
    			err = lte_lc_init();
    			LOGD("lte_lc_init err:%d", err);
    		}
    		else
    		{
    			LOGD("Get imsi fail, will not link network!");
    		}
    	}
    
    	if(gps_is_working())
    	{
    		LOGD("gps is working, continue waiting!");
    
    		if(retry_count <= 2)		//2´ÎÒÔÄÚÿ1·ÖÖÓÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(60), NULL);
    		else if(retry_count <= 4)	//3µ½4´Îÿ5·ÖÖÓÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(300), NULL);
    		else if(retry_count <= 6)	//5µ½6´Îÿ10·ÖÖÓÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(600), NULL);
    		else if(retry_count <= 8)	//7µ½8´Îÿ1Ð¡Ê±ÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(3600), NULL);
    		else						//8´ÎÒÔÉÏÿ6Ð¡Ê±ÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(6*3600), NULL);	
    	}
    	else
    	{
    		LOGD("linking");
    		nb_connecting_flag = true;
    	#ifdef CONFIG_DEVICE_POWER_MANAGEMENT
    		uart_sleep_out();
    	#endif
    		//configure_low_power();
    
    		err = lte_lc_connect();
    		if(err)
    		{
    			LOGD("Can't connected to LTE network. err:%d", err);
    			nb_connected = false;
    
    			retry_count++;
    			if(retry_count <= 2)		//2´ÎÒÔÄÚÿ1·ÖÖÓÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(60), NULL);
    			else if(retry_count <= 4)	//3µ½4´Îÿ5·ÖÖÓÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(300), NULL);
    			else if(retry_count <= 6)	//5µ½6´Îÿ10·ÖÖÓÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(600), NULL);
    			else if(retry_count <= 8)	//7µ½8´Îÿ1Ð¡Ê±ÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(3600), NULL);
    			else						//8´ÎÒÔÉÏÿ6Ð¡Ê±ÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(6*3600), NULL);
    		}
    		else
    		{
    			LOGD("Connected to LTE network");
    
    			nb_connected = true;
    			retry_count = 0;
    
    			GetModemDateTime();
    			modem_data_init();
    		}
    
    		GetModemStatus();
    
    		if(!nb_connected)
    			SetModemTurnOff();
    		
    		if(!err && !test_nb_flag)
    		{
    			k_delayed_work_submit_to_queue(app_work_q, &mqtt_link_work, K_SECONDS(2));
    		}
    
    		nb_connecting_flag = false;
    	}
    }
    void NB_init(struct k_work_q *work_q)
    {
    	int err;
    
    	app_work_q = work_q;
    
    	k_delayed_work_init(&modem_init_work, modem_init);
    	k_delayed_work_init(&nb_link_work, nb_link);
    	k_delayed_work_init(&mqtt_link_work, mqtt_link);
    #ifdef CONFIG_FOTA_DOWNLOAD
    	fota_work_init(work_q);
    #endif
    
    	k_delayed_work_submit_to_queue(app_work_q, &modem_init_work, K_SECONDS(5));
    }
    
     

Reply
  • Hi, the ncs verson is v1.2.0. My code for start up is fllow:

    void system_init(void)
    {
    #ifdef CONFIG_FOTA_DOWNLOAD
    	fota_init();
    #endif
    
    	InitSystemSettings();
    	
    	pmu_init();
    	LCD_Init();
    	
    	ShowBootUpLogo();
    
    	key_init();
    #ifdef CONFIG_AUDIO_SUPPORT	
    	audio_init();
    #endif
    	ble_init();
    #ifdef CONFIG_PPG_SUPPORT	
    	PPG_init();
    #endif
    #ifdef CONFIG_IMU_SUPPORT
    	IMU_init(&imu_work_q);
    #endif
    	NB_init(&nb_work_q);
    	GPS_init(&gps_work_q);
    }
    
    void work_init(void)
    {
    	k_work_q_start(&nb_work_q, nb_stack_area,
    					K_THREAD_STACK_SIZEOF(nb_stack_area),
    					CONFIG_APPLICATION_WORKQUEUE_PRIORITY);
    #ifdef CONFIG_IMU_SUPPORT	
    	k_work_q_start(&imu_work_q, imu_stack_area,
    					K_THREAD_STACK_SIZEOF(imu_stack_area),
    					CONFIG_APPLICATION_WORKQUEUE_PRIORITY);
    #endif
    	k_work_q_start(&gps_work_q, gps_stack_area,
    					K_THREAD_STACK_SIZEOF(gps_stack_area),
    					CONFIG_APPLICATION_WORKQUEUE_PRIORITY);	
    	
    	if(IS_ENABLED(CONFIG_WATCHDOG))
    	{
    		watchdog_init_and_start(&k_sys_work_q);
    	}
    }
    
    int main(void)
    {
    	work_init();
    	system_init();
    
    	while(1)
    	{
    		KeyMsgProcess();
    		TimeMsgProcess();
    		NBMsgProcess();
    	#ifdef CONFIG_WIFI	
    		WifiProcess();
    	#endif
    		GPSMsgProcess();
    		PMUMsgProcess();
    	#ifdef CONFIG_IMU_SUPPORT	
    		IMUMsgProcess();
    		FallMsgProcess();
    	#endif
    	#ifdef CONFIG_PPG_SUPPORT	
    		PPGMsgProcess();
    	#endif
    		LCDMsgProcess();
    	#ifdef CONFIG_TOUCH_SUPPORT
    		TPMsgProcess();
    	#endif
    		AlarmMsgProcess();
    		SettingsMsgPorcess();
    		SOSMsgProc();
    		UartMsgProc();
    		ScreenMsgProcess();
    	#ifdef CONFIG_FOTA_DOWNLOAD
    		FotaMsgProc();
    	#endif
    	#ifdef CONFIG_AUDIO_SUPPORT
    		AudioMsgProcess();
    	#endif
    	#ifdef CONFIG_ANIMATION_SUPPORT
    		AnimaMsgProcess();
    	#endif
    		system_init_completed();
    		k_cpu_idle();
    	}
    }
    
    static void modem_init(struct k_work *work)
    {
    	SetModemTurnOn();
    
    	k_delayed_work_submit_to_queue(app_work_q, &nb_link_work, K_SECONDS(2));
    }
    
    
    static void nb_link(struct k_work *work)
    {
    	int err=0;
    	u8_t tmpbuf[128] = {0};
    	static u32_t retry_count = 0;
    	static bool frist_flag = false;
    
    	if(!frist_flag)
    	{
    		frist_flag = true;
    		GetModemInfor();
    		SetModemTurnOff();
    		if(strlen(g_imsi) > 0)
    		{
    			err = lte_lc_init();
    			LOGD("lte_lc_init err:%d", err);
    		}
    		else
    		{
    			LOGD("Get imsi fail, will not link network!");
    		}
    	}
    
    	if(gps_is_working())
    	{
    		LOGD("gps is working, continue waiting!");
    
    		if(retry_count <= 2)		//2´ÎÒÔÄÚÿ1·ÖÖÓÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(60), NULL);
    		else if(retry_count <= 4)	//3µ½4´Îÿ5·ÖÖÓÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(300), NULL);
    		else if(retry_count <= 6)	//5µ½6´Îÿ10·ÖÖÓÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(600), NULL);
    		else if(retry_count <= 8)	//7µ½8´Îÿ1Ð¡Ê±ÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(3600), NULL);
    		else						//8´ÎÒÔÉÏÿ6Ð¡Ê±ÖØÁ¬Ò»´Î
    			k_timer_start(&nb_reconnect_timer, K_SECONDS(6*3600), NULL);	
    	}
    	else
    	{
    		LOGD("linking");
    		nb_connecting_flag = true;
    	#ifdef CONFIG_DEVICE_POWER_MANAGEMENT
    		uart_sleep_out();
    	#endif
    		//configure_low_power();
    
    		err = lte_lc_connect();
    		if(err)
    		{
    			LOGD("Can't connected to LTE network. err:%d", err);
    			nb_connected = false;
    
    			retry_count++;
    			if(retry_count <= 2)		//2´ÎÒÔÄÚÿ1·ÖÖÓÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(60), NULL);
    			else if(retry_count <= 4)	//3µ½4´Îÿ5·ÖÖÓÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(300), NULL);
    			else if(retry_count <= 6)	//5µ½6´Îÿ10·ÖÖÓÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(600), NULL);
    			else if(retry_count <= 8)	//7µ½8´Îÿ1Ð¡Ê±ÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(3600), NULL);
    			else						//8´ÎÒÔÉÏÿ6Ð¡Ê±ÖØÁ¬Ò»´Î
    				k_timer_start(&nb_reconnect_timer, K_SECONDS(6*3600), NULL);
    		}
    		else
    		{
    			LOGD("Connected to LTE network");
    
    			nb_connected = true;
    			retry_count = 0;
    
    			GetModemDateTime();
    			modem_data_init();
    		}
    
    		GetModemStatus();
    
    		if(!nb_connected)
    			SetModemTurnOff();
    		
    		if(!err && !test_nb_flag)
    		{
    			k_delayed_work_submit_to_queue(app_work_q, &mqtt_link_work, K_SECONDS(2));
    		}
    
    		nb_connecting_flag = false;
    	}
    }
    void NB_init(struct k_work_q *work_q)
    {
    	int err;
    
    	app_work_q = work_q;
    
    	k_delayed_work_init(&modem_init_work, modem_init);
    	k_delayed_work_init(&nb_link_work, nb_link);
    	k_delayed_work_init(&mqtt_link_work, mqtt_link);
    #ifdef CONFIG_FOTA_DOWNLOAD
    	fota_work_init(work_q);
    #endif
    
    	k_delayed_work_submit_to_queue(app_work_q, &modem_init_work, K_SECONDS(5));
    }
    
     

Children
Related