Factory firmware : refresh the watchdog to prevent a watchdog reset
CMake : generate a version of the factory loader that runs under MCUboot.
This commit is contained in:
parent
cdc6c5e082
commit
b74be64179
@ -818,6 +818,41 @@ add_custom_command(TARGET ${EXECUTABLE_FACTORYLOADER_NAME}
|
||||
COMMENT "post build steps for ${EXECUTABLE_FACTORYLOADER_FILE_NAME}"
|
||||
)
|
||||
|
||||
# Build binary that writes the factory image (MCUBoot version)
|
||||
set(EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME "pinetime-mcuboot-factory-loader")
|
||||
set(EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME ${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH})
|
||||
add_executable(${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME} ${FACTORYLOADER_SOURCE_FILES})
|
||||
target_link_libraries(${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME} nrf-sdk)
|
||||
set_target_properties(${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME})
|
||||
target_compile_options(${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME} PUBLIC
|
||||
$<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -O0 -g3>
|
||||
$<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:RELEASE>>: ${COMMON_FLAGS} -O3>
|
||||
$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -O0 -g3>
|
||||
$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>: ${COMMON_FLAGS} -O3>
|
||||
$<$<COMPILE_LANGUAGE:ASM>: -MP -MD -std=c99 -x assembler-with-cpp>
|
||||
)
|
||||
target_include_directories(${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME} PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src>
|
||||
)
|
||||
add_dependencies(${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME} ${EXECUTABLE_FACTORY_MCUBOOT_NAME})
|
||||
|
||||
set_target_properties(${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME} PROPERTIES
|
||||
SUFFIX ".out"
|
||||
LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME}.map"
|
||||
CXX_STANDARD 11
|
||||
C_STANDARD 99
|
||||
)
|
||||
|
||||
add_custom_command(TARGET ${EXECUTABLE_MCUBOOT_FACTORYLOADER_NAME}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME}.out
|
||||
COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME}.out "${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME}.bin"
|
||||
COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME}.out "${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME}.hex"
|
||||
COMMAND /home/jf/nrf52/mcuboot/scripts/imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header ${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME}.bin factoryLoaderImage.bin
|
||||
COMMAND python ${CMAKE_SOURCE_DIR}/tools/bin2c.py factoryLoaderImage.bin factoryLoaderImage > factoryLoaderImage.h
|
||||
COMMENT "post build steps for ${EXECUTABLE_MCUBOOT_FACTORYLOADER_FILE_NAME}"
|
||||
)
|
||||
|
||||
# FLASH
|
||||
if (USE_JLINK)
|
||||
add_custom_target(FLASH_ERASE
|
||||
|
||||
@ -85,8 +85,13 @@ void SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void RefreshWatchdog() {
|
||||
NRF_WDT->RR[0] = WDT_RR_RR_Reload;
|
||||
}
|
||||
|
||||
uint8_t displayBuffer[displayWidth * bytesPerPixel];
|
||||
void Process(void* instance) {
|
||||
RefreshWatchdog();
|
||||
APP_GPIOTE_INIT(2);
|
||||
|
||||
NRF_LOG_INFO("Init...");
|
||||
@ -103,6 +108,7 @@ void Process(void* instance) {
|
||||
NRF_LOG_INFO("Erasing...");
|
||||
for (uint32_t erased = 0; erased < sizeof(factoryImage); erased += 0x1000) {
|
||||
spiNorFlash.SectorErase(erased);
|
||||
RefreshWatchdog();
|
||||
}
|
||||
|
||||
NRF_LOG_INFO("Writing factory image...");
|
||||
@ -112,6 +118,7 @@ void Process(void* instance) {
|
||||
std::memcpy(writeBuffer, &factoryImage[offset], memoryChunkSize);
|
||||
spiNorFlash.Write(offset, writeBuffer, memoryChunkSize);
|
||||
DisplayProgressBar((static_cast<float>(offset) / static_cast<float>(sizeof(factoryImage))) * 100.0f, colorWhite);
|
||||
RefreshWatchdog();
|
||||
}
|
||||
NRF_LOG_INFO("Writing factory image done!");
|
||||
DisplayProgressBar(100.0f, colorGreen);
|
||||
@ -144,7 +151,7 @@ void DisplayProgressBar(uint8_t percent, uint16_t color) {
|
||||
|
||||
int main(void) {
|
||||
TaskHandle_t taskHandle;
|
||||
|
||||
RefreshWatchdog();
|
||||
logger.Init();
|
||||
nrf_drv_clock_init();
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user