update bootloader main
This commit is contained in:
parent
797e30dfc7
commit
ae1cc22d72
104
src/main.c
104
src/main.c
@ -57,11 +57,23 @@
|
||||
#include "nrf_delay.h"
|
||||
#include "pstorage.h"
|
||||
|
||||
#ifdef NRF52840_XXAA
|
||||
#include "nrf_usbd.h"
|
||||
|
||||
#include "tusb.h"
|
||||
#include "usb/msc_uf2.h"
|
||||
|
||||
/* tinyusb function that handles power event (detected, ready, removed)
|
||||
* We must call it within SD's SOC event handler, or set it as power event handler if SD is not enabled. */
|
||||
extern void tusb_hal_nrf_power_event(uint32_t event);
|
||||
|
||||
// TODO fully move to nrfx
|
||||
enum {
|
||||
NRFX_POWER_USB_EVT_DETECTED, /**< USB power detected on the connector (plugged in). */
|
||||
NRFX_POWER_USB_EVT_REMOVED, /**< USB power removed from the connector. */
|
||||
NRFX_POWER_USB_EVT_READY /**< USB power regulator ready. */
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#define BOOTLOADER_VERSION_REGISTER NRF_TIMER2->CC[0]
|
||||
|
||||
@ -192,6 +204,65 @@ void blinky_ota_disconneted(void)
|
||||
}
|
||||
|
||||
|
||||
void board_init(void)
|
||||
{
|
||||
button_pin_init(BOOTLOADER_BUTTON);
|
||||
button_pin_init(FRESET_BUTTON);
|
||||
nrf_delay_us(100); // wait for the pin state is stable
|
||||
|
||||
led_pin_init(LED_RED);
|
||||
led_pin_init(LED_BLUE);
|
||||
|
||||
// Init scheduler and timer (use scheduler)
|
||||
APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, SCHED_QUEUE_SIZE);
|
||||
app_timer_init();
|
||||
}
|
||||
|
||||
void boad_usb_init(void)
|
||||
{
|
||||
// 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;
|
||||
|
||||
#ifdef SOFTDEVICE_PRESENT
|
||||
uint8_t sd_en = false;
|
||||
(void) sd_softdevice_is_enabled(&sd_en);
|
||||
|
||||
if ( sd_en ) {
|
||||
sd_power_usbdetected_enable(true);
|
||||
sd_power_usbpwrrdy_enable(true);
|
||||
sd_power_usbremoved_enable(true);
|
||||
|
||||
sd_power_usbregstatus_get(&usb_reg);
|
||||
}else
|
||||
#else
|
||||
{
|
||||
// Power module init
|
||||
const nrfx_power_config_t pwr_cfg = { 0 };
|
||||
nrfx_power_init(&pwr_cfg);
|
||||
|
||||
// Register tusb function as USB power handler
|
||||
const nrfx_power_usbevt_config_t config = { .handler = (nrfx_power_usb_event_handler_t) tusb_hal_nrf_power_event };
|
||||
nrfx_power_usbevt_init(&config);
|
||||
|
||||
nrfx_power_usbevt_enable();
|
||||
|
||||
usb_reg = NRF_POWER->USBREGSTATUS;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( usb_reg & POWER_USBREGSTATUS_VBUSDETECT_Msk ) {
|
||||
tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_DETECTED);
|
||||
}
|
||||
|
||||
if ( usb_reg & POWER_USBREGSTATUS_OUTPUTRDY_Msk ) {
|
||||
tusb_hal_nrf_power_event(NRFX_POWER_USB_EVT_READY);
|
||||
}
|
||||
|
||||
// Init tusb stack
|
||||
tusb_init();
|
||||
}
|
||||
|
||||
/**@brief Function for initializing the BLE stack.
|
||||
*
|
||||
* @details Initializes the SoftDevice and the BLE event interrupt.
|
||||
@ -293,18 +364,7 @@ int main(void)
|
||||
APP_ERROR_CHECK_BOOL(*((uint32_t *)NRF_UICR_BOOT_START_ADDRESS) == BOOTLOADER_REGION_START);
|
||||
APP_ERROR_CHECK_BOOL(NRF_FICR->CODEPAGESIZE == CODE_PAGE_SIZE);
|
||||
|
||||
/* Initialize GPIOs
|
||||
* For metro52 LED_BLUE is muxed with FRESET */
|
||||
button_pin_init(BOOTLOADER_BUTTON);
|
||||
button_pin_init(FRESET_BUTTON);
|
||||
nrf_delay_us(100); // wait for the pin state is stable
|
||||
|
||||
led_pin_init(LED_RED);
|
||||
led_pin_init(LED_BLUE); // on metro52 will override FRESET
|
||||
|
||||
// Init scheduler and timer (use scheduler)
|
||||
APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, SCHED_QUEUE_SIZE);
|
||||
app_timer_init();
|
||||
board_init();
|
||||
|
||||
/* Initialize a blinky timer to show that we're in bootloader */
|
||||
(void) app_timer_create(&blinky_timer_id, APP_TIMER_MODE_REPEATED, blinky_handler);
|
||||
@ -312,9 +372,6 @@ int main(void)
|
||||
// Init bootloader
|
||||
(void) bootloader_init();
|
||||
|
||||
// Init msc flash, must be after bootloader_init(), before SD init
|
||||
msc_uf2_init();
|
||||
|
||||
if (bootloader_dfu_sd_in_progress())
|
||||
{
|
||||
APP_ERROR_CHECK( bootloader_dfu_sd_update_continue() );
|
||||
@ -330,8 +387,7 @@ int main(void)
|
||||
app_timer_start(blinky_timer_id, APP_TIMER_TICKS(LED_BLINK_INTERVAL), NULL);
|
||||
}
|
||||
|
||||
// Init usb stack
|
||||
tusb_init();
|
||||
boad_usb_init();
|
||||
|
||||
/*------------- Determine DFU mode (Serial, OTA, FRESET or normal) -------------*/
|
||||
// DFU button pressed
|
||||
@ -485,12 +541,12 @@ void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name)
|
||||
//--------------------------------------------------------------------+
|
||||
void tud_mount_cb(void)
|
||||
{
|
||||
msc_uf2_mount();
|
||||
|
||||
}
|
||||
|
||||
void tud_umount_cb(void)
|
||||
{
|
||||
msc_uf2_umount();
|
||||
|
||||
}
|
||||
|
||||
uint32_t tusb_hal_millis(void)
|
||||
@ -532,14 +588,6 @@ uint32_t proc_soc(void)
|
||||
pstorage_sys_event_handler(soc_evt);
|
||||
|
||||
/*------------- usb power event handler -------------*/
|
||||
extern void tusb_hal_nrf_power_event(uint32_t evt);
|
||||
enum // TODO remove when migrating to SDK15
|
||||
{
|
||||
NRFX_POWER_USB_EVT_DETECTED = 0,
|
||||
NRFX_POWER_USB_EVT_REMOVED,
|
||||
NRFX_POWER_USB_EVT_READY
|
||||
};
|
||||
|
||||
int32_t usbevt = (soc_evt == NRF_EVT_POWER_USB_DETECTED ) ? NRFX_POWER_USB_EVT_DETECTED:
|
||||
(soc_evt == NRF_EVT_POWER_USB_POWER_READY) ? NRFX_POWER_USB_EVT_READY :
|
||||
(soc_evt == NRF_EVT_POWER_USB_REMOVED ) ? NRFX_POWER_USB_EVT_REMOVED : -1;
|
||||
|
@ -50,24 +50,6 @@
|
||||
void read_block(uint32_t block_no, uint8_t *data);
|
||||
int write_block(uint32_t block_no, uint8_t *data, bool quiet/*, WriteState *state*/);
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
/* API
|
||||
*------------------------------------------------------------------*/
|
||||
void msc_uf2_init(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void msc_uf2_mount(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void msc_uf2_umount(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// tinyusb callbacks
|
||||
//--------------------------------------------------------------------+
|
||||
|
@ -57,14 +57,6 @@
|
||||
|
||||
VERIFY_STATIC( MSC_UF2_FLASH_ADDR_START+MSC_UF2_FLASH_SIZE == BOOTLOADER_REGION_START-DFU_APP_DATA_RESERVED, );
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
/* Note ATTR_WEAK is used when CFG_TUD_MSC = 0
|
||||
*------------------------------------------------------------------*/
|
||||
|
||||
ATTR_WEAK void msc_uf2_init(void);
|
||||
ATTR_WEAK void msc_uf2_mount(void);
|
||||
ATTR_WEAK void msc_uf2_umount(void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user