From cab66419d6059a3f6b0f8aa8fdf106ebcd66695b Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Thu, 2 Mar 2017 19:22:50 +0100 Subject: [PATCH] flashd: Set 6 Wait states as per Errata requiremens for Revision A It is utterly unacceptable that Atmel is shipping example code in 2011, which doesn't support parts that are shipped still in 2016. They would have had five years to fix their code to implement the chip errata :( --- .../atmel_softpack_libraries/libchip_sam3s/source/flashd.c | 7 +++++-- .../atmel_softpack_libraries/usb/device/dfu/dfu_driver.c | 2 ++ firmware/libboard/common/source/board_cstartup_gnu.c | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/firmware/atmel_softpack_libraries/libchip_sam3s/source/flashd.c b/firmware/atmel_softpack_libraries/libchip_sam3s/source/flashd.c index 6247139d..e11c2abf 100644 --- a/firmware/atmel_softpack_libraries/libchip_sam3s/source/flashd.c +++ b/firmware/atmel_softpack_libraries/libchip_sam3s/source/flashd.c @@ -151,7 +151,10 @@ static void ComputeLockRange( uint32_t dwStart, uint32_t dwEnd, uint32_t *pdwAct extern void FLASHD_Initialize( uint32_t dwMCk, uint32_t dwUseIAP ) { EFC_DisableFrdyIt( EFC ) ; - +#if 1 + /* See Revision A errata 46.1.1.3 */ + EFC_SetWaitState(EFC, 6); +#else if ( (dwMCk/1000000) >= 64 ) { EFC_SetWaitState( EFC, 2 ) ; @@ -167,7 +170,7 @@ extern void FLASHD_Initialize( uint32_t dwMCk, uint32_t dwUseIAP ) EFC_SetWaitState( EFC, 0 ) ; } } - +#endif _dwUseIAP=dwUseIAP ; } diff --git a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_driver.c b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_driver.c index 71529de6..f5e7c828 100644 --- a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_driver.c +++ b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_driver.c @@ -459,6 +459,8 @@ void USBDFU_SwitchToApp(void) /* make sure the MAGIC is not set to enter DFU again */ *(unsigned int *)USB_DFU_MAGIC_ADDR = 0; + printf("switching to app\r\n"); + /* disconnect from USB to ensure re-enumeration */ USBD_Disconnect(); diff --git a/firmware/libboard/common/source/board_cstartup_gnu.c b/firmware/libboard/common/source/board_cstartup_gnu.c index 17592b03..d5cb8bf7 100644 --- a/firmware/libboard/common/source/board_cstartup_gnu.c +++ b/firmware/libboard/common/source/board_cstartup_gnu.c @@ -133,6 +133,9 @@ static void BootIntoApp(void) pSrc = (unsigned int *) ((unsigned char *)IFLASH_ADDR + BOARD_DFU_BOOT_SIZE); SCB->VTOR = ((unsigned int)(pSrc)) | (0x0 << 7); appReset = pSrc[1]; + + printf("Booting into App from %p, PC=%p\r\n", pSrc, appReset); + appReset(); } #endif