Skip to content

Commit 76de5a4

Browse files
committed
Added SAM D51 (m4f) support to bootloader
1 parent b180f33 commit 76de5a4

File tree

131 files changed

+1325
-155
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+1325
-155
lines changed

bootloaders/zero/Makefile

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,14 @@ BOARD_ID?=MT_D21E_rev_B
4242
# SAMC21G: SAMC21G18A, SAMC21G17A, SAMC21G16A, SAMC21G15A
4343
# SAMC21E: SAMC21E18A, SAMC21E17A, SAMC21E16A, SAMC21E15A
4444
# SAMD11: SAMD11D14AM, SAMD11C14A, SAMD11D14AS
45+
# SAMD51G: SAMD51G18A, SAMD51G19A
46+
# SAMD51J: SAMD51J18A, SAMD51J19A, SAMD51J20A
47+
# SAMD51N: SAMD51N19A, SAMD51N20A
48+
# SAMD51P: SAMD51P19A, SAMD51P20A
4549
MCU?=SAMD21E18A
4650

47-
# Note that the makefile can be invoked with values that override the above two settings.
48-
# For example: BOARD_ID=Generic_D11C14A MCU=SAMD11C14A make
51+
# Note that the makefile can be invoked with values that override the above settings.
52+
# For example: BOARD_ID=Generic_D11C14A MCU=SAMD11C14A SDCARD=SDCARD_DISABLED make
4953

5054
# End Config ###############################
5155

@@ -55,6 +59,12 @@ else
5559
NAME=sam_ba_$(BOARD_ID)_$(MCU)
5660
endif
5761

62+
ifeq ($(findstring 20,$(MCU)),20)
63+
FLASHSIZE=1MB
64+
endif
65+
ifeq ($(findstring 19,$(MCU)),19)
66+
FLASHSIZE=512KB
67+
endif
5868
ifeq ($(findstring 18,$(MCU)),18)
5969
FLASHSIZE=256KB
6070
endif
@@ -71,7 +81,13 @@ ifeq ($(findstring 14,$(MCU)),14)
7181
FLASHSIZE=16KB
7282
endif
7383

84+
ifeq ($(findstring D51,$(MCU)),D51)
85+
LINKER_SCRIPT?=bootloader_sam_m4f_$(FLASHSIZE).ld
86+
MCPU=cortex-m4
87+
else
7488
LINKER_SCRIPT?=bootloader_sam_m0p_$(FLASHSIZE).ld
89+
MCPU=cortex-m0plus
90+
endif
7591

7692
# CORE_VENDOR?=arduino
7793
CORE_VENDOR?=MattairTech_Arduino
@@ -125,7 +141,8 @@ SIZE=$(ARM_GCC_PATH)size
125141
# Compiler options
126142
# eliminate PARANOIA define to save a tiny amount of code (~40B)
127143
CFLAGS_EXTRA=-D$(SDCARD) -D__$(MCU)__ -DBOARD_ID_$(BOARD_ID) -DPARANOIA
128-
CFLAGS=-mthumb -mcpu=cortex-m0plus -Wall -c -std=gnu99 -ffunction-sections -fdata-sections -nostdlib -nostartfiles --param max-inline-insns-single=500 -Wa,-adhlns=$(<:%.c=$(BUILD_DIR)/%.lst)
144+
CFLAGS=-mthumb -mcpu=$(MCPU) -Wall -c -std=gnu99 -ffunction-sections -fdata-sections -nostdlib -nostartfiles --param max-inline-insns-single=500 -Wa,-adhlns=$(<:%.c=$(BUILD_DIR)/%.lst)
145+
129146
ifdef DEBUG
130147
CFLAGS+=-g3 -O1 -DDEBUG=1
131148
else
@@ -141,7 +158,7 @@ INCLUDES=-I"$(MODULE_PATH_ARDUINO)/tools/CMSIS/4.5.0/CMSIS/Include/" -I"$(MODULE
141158

142159
# -----------------------------------------------------------------------------
143160
# Linker options
144-
LDFLAGS=-mthumb -mcpu=cortex-m0plus -Wall -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all
161+
LDFLAGS=-mthumb -mcpu=$(MCPU) -Wall -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all
145162
LDFLAGS+=-Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols --specs=nano.specs --specs=nosys.specs
146163

147164
# -----------------------------------------------------------------------------

bootloaders/zero/README.md

Lines changed: 35 additions & 15 deletions

bootloaders/zero/SDCard/mmcbbp.c

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,11 @@ void setBaud (uint32_t baud)
3434
while(SDCARD_SPI_MODULE->SPI.SYNCBUSY.bit.ENABLE);
3535

3636
//Synchronous arithmetic
37-
SDCARD_SPI_MODULE->SPI.BAUD.reg = ((VARIANT_MCK / (2 * baud)) - 1);
38-
37+
#if (SAMD51 && (VARIANT_MCK == 120000000ul))
38+
SDCARD_SPI_MODULE->SPI.BAUD.reg = ((96000000ul / (2 * baud)) - 1); // Use 96MHz SERCOM clock (100MHz maximum) when cpu running at 120MHz
39+
#else
40+
SDCARD_SPI_MODULE->SPI.BAUD.reg = ((VARIANT_MCK / (2 * baud)) - 1);
41+
#endif
3942

4043
SDCARD_SPI_MODULE->SPI.CTRLA.bit.ENABLE = 1;
4144
while(SDCARD_SPI_MODULE->SPI.SYNCBUSY.bit.ENABLE);
@@ -65,6 +68,13 @@ inline void init_spi (void)
6568
#elif (SAMC21G) || (SAMC21J)
6669
MCLK->APBCMASK.reg |= MCLK_APBCMASK_SERCOM0 | MCLK_APBCMASK_SERCOM1 | MCLK_APBCMASK_SERCOM2 | MCLK_APBCMASK_SERCOM3 | MCLK_APBCMASK_SERCOM4 | MCLK_APBCMASK_SERCOM5 ;
6770
#endif
71+
#elif (SAMD51)
72+
MCLK->APBAMASK.reg |= MCLK_APBAMASK_SERCOM0 | MCLK_APBAMASK_SERCOM1 ;
73+
MCLK->APBBMASK.reg |= MCLK_APBBMASK_SERCOM2 | MCLK_APBBMASK_SERCOM3 ;
74+
MCLK->APBDMASK.reg |= MCLK_APBDMASK_SERCOM4 | MCLK_APBDMASK_SERCOM5 ;
75+
#if (SAMD51N) || (SAMD51P)
76+
MCLK->APBDMASK.reg |= MCLK_APBDMASK_SERCOM6 | MCLK_APBDMASK_SERCOM7 ;
77+
#endif
6878
#else
6979
#error "mmcbbp.c: Unsupported microcontroller"
7080
#endif
@@ -79,8 +89,12 @@ inline void init_spi (void)
7989
#if (SAMD21 || SAMD11)
8090
GCLK->CLKCTRL.reg = ( GCLK_CLKCTRL_ID( SDCARD_SPI_PER_CLOCK_INDEX ) | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_CLKEN );
8191
waitForSync();
82-
#elif (SAML21 || SAMC21)
83-
GCLK->PCHCTRL[SDCARD_SPI_PER_CLOCK_INDEX].reg = ( GCLK_PCHCTRL_CHEN | GCLK_PCHCTRL_GEN_GCLK0 );
92+
#elif (SAML21 || SAMC21 || SAMD51)
93+
#if (SAMD51 && (VARIANT_MCK == 120000000ul))
94+
GCLK->PCHCTRL[SDCARD_SPI_PER_CLOCK_INDEX].reg = ( GCLK_PCHCTRL_CHEN | GCLK_PCHCTRL_GEN_GCLK6 ); // Use 96MHz SERCOM clock (100MHz maximum) when cpu running at 120MHz
95+
#else
96+
GCLK->PCHCTRL[SDCARD_SPI_PER_CLOCK_INDEX].reg = ( GCLK_PCHCTRL_CHEN | GCLK_PCHCTRL_GEN_GCLK0 );
97+
#endif
8498
waitForSync();
8599
#else
86100
#error "mmcbbp.c: Unsupported microcontroller"

bootloaders/zero/SDCard/sdBootloader.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ bool flashVerify (void)
104104
pf_read(Buff, FLASH_PAGE_SIZE, &br); /* Load a page data */
105105

106106
if (br) {
107-
for (uint8_t i=0; i<br; i++) {
107+
for (uint16_t i=0; i<br; i++) {
108108
if (Buff[i] != *((BYTE *)(fa + i))) {
109109
return (false);
110110
}

bootloaders/zero/binaries/README.md

Lines changed: 1 addition & 1 deletion
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)