fix issue nrf52840 not reset properly when upgrading bootloader+sd combo
- root cause tusb_task()/cdc task is called when usb is not inited (in case of sd upgrade)
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							@@ -28,7 +28,7 @@ SD_HEX       = $(SD_PATH)/$(SD_FILENAME)_softdevice.hex
 | 
			
		||||
LD_FILE      = $(SRC_PATH)/linker/$(SD_NAME)_v$(SD_VER1).ld
 | 
			
		||||
 | 
			
		||||
MERGED_FNAME = $(OUTPUT_FILENAME)_$(SD_NAME)_$(SD_VERSION)
 | 
			
		||||
RELEASE_DIR  = bin/$(BOARD)/$(SD_VERSION)
 | 
			
		||||
RELEASE_DIR  = bin/$(BOARD)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MK_DIS_FIRMWARE = "$(SD_NAME) $(SD_VERSION)"
 | 
			
		||||
 
 | 
			
		||||
@@ -128,8 +128,9 @@ static void wait_for_events(void)
 | 
			
		||||
    app_sched_execute();
 | 
			
		||||
 | 
			
		||||
#ifdef NRF52840_XXAA
 | 
			
		||||
    // usb is not enabled in OTA
 | 
			
		||||
    if ( !is_ota() )
 | 
			
		||||
    // skip if usb is not inited ( e.g OTA / finializing sd/bootloader )
 | 
			
		||||
    extern bool usb_inited(void);
 | 
			
		||||
    if ( usb_inited() )
 | 
			
		||||
    {
 | 
			
		||||
      tusb_task();
 | 
			
		||||
      tud_cdc_write_flush();
 | 
			
		||||
 
 | 
			
		||||
@@ -65,8 +65,20 @@ extern void tusb_hal_nrf_power_event(uint32_t event);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//------------- IMPLEMENTATION -------------//
 | 
			
		||||
static bool _inited = false;
 | 
			
		||||
 | 
			
		||||
bool usb_inited(void)
 | 
			
		||||
{
 | 
			
		||||
  return _inited;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void usb_init(bool cdc_only)
 | 
			
		||||
{
 | 
			
		||||
  // skipped if already inited
 | 
			
		||||
  if ( _inited ) return;
 | 
			
		||||
 | 
			
		||||
  _inited = true;
 | 
			
		||||
 | 
			
		||||
  // USB power may already be ready at this time -> no event generated
 | 
			
		||||
  // We need to invoke the handler based on the status initially
 | 
			
		||||
  uint32_t usb_reg;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user