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:
hathach 2018-12-20 00:50:14 +07:00
parent fc13287837
commit 5c38bc8957
No known key found for this signature in database
GPG Key ID: 2FA891220FBFD581
3 changed files with 16 additions and 3 deletions

View File

@ -28,7 +28,7 @@ SD_HEX = $(SD_PATH)/$(SD_FILENAME)_softdevice.hex
LD_FILE = $(SRC_PATH)/linker/$(SD_NAME)_v$(SD_VER1).ld LD_FILE = $(SRC_PATH)/linker/$(SD_NAME)_v$(SD_VER1).ld
MERGED_FNAME = $(OUTPUT_FILENAME)_$(SD_NAME)_$(SD_VERSION) 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)" MK_DIS_FIRMWARE = "$(SD_NAME) $(SD_VERSION)"

View File

@ -128,8 +128,9 @@ static void wait_for_events(void)
app_sched_execute(); app_sched_execute();
#ifdef NRF52840_XXAA #ifdef NRF52840_XXAA
// usb is not enabled in OTA // skip if usb is not inited ( e.g OTA / finializing sd/bootloader )
if ( !is_ota() ) extern bool usb_inited(void);
if ( usb_inited() )
{ {
tusb_task(); tusb_task();
tud_cdc_write_flush(); tud_cdc_write_flush();

View File

@ -65,8 +65,20 @@ extern void tusb_hal_nrf_power_event(uint32_t event);
//------------- IMPLEMENTATION -------------// //------------- IMPLEMENTATION -------------//
static bool _inited = false;
bool usb_inited(void)
{
return _inited;
}
void usb_init(bool cdc_only) 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 // USB power may already be ready at this time -> no event generated
// We need to invoke the handler based on the status initially // We need to invoke the handler based on the status initially
uint32_t usb_reg; uint32_t usb_reg;