Skip to content

Commit 3fcd999

Browse files
authored
Merge pull request #3130 from pewpew-game/brownout-level
SAMD: make the brownout detection level configurable per board
2 parents b81195d + e0733d1 commit 3fcd999

File tree

4 files changed

+24
-6
lines changed

4 files changed

+24
-6
lines changed

ports/atmel-samd/boards/pewpew10/mpconfigboard.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,5 @@
4343

4444
#define DEFAULT_UART_BUS_RX (&pin_PA01)
4545
#define DEFAULT_UART_BUS_TX (&pin_PA00)
46+
47+
#define SAMD21_BOD33_LEVEL (6)

ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,5 @@
4040
#define IGNORE_PIN_PB09 1
4141
#define IGNORE_PIN_PB10 1
4242
#define IGNORE_PIN_PB11 1
43+
44+
#define SAMD5x_E5x_BOD33_LEVEL (100)

ports/atmel-samd/mpconfigport.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,14 @@
112112
#define CIRCUITPY_DEFAULT_STACK_SIZE 4096
113113
#endif
114114

115+
#ifndef SAMD21_BOD33_LEVEL
116+
// Set brownout detection to ~2.7V. Default from factory is 1.7V,
117+
// which is too low for proper operation of external SPI flash chips
118+
// (they are 2.7-3.6V).
119+
#define SAMD21_BOD33_LEVEL (39)
120+
// 2.77V with hysteresis off. Table 37.20 in datasheet.
121+
#endif
122+
115123
// Smallest unit of flash that can be erased.
116124
#define FLASH_ERASE_SIZE NVMCTRL_ROW_SIZE
117125

@@ -129,6 +137,14 @@
129137
#define CIRCUITPY_DEFAULT_STACK_SIZE (24*1024)
130138
#endif
131139

140+
#ifndef SAMD5x_E5x_BOD33_LEVEL
141+
// Set brownout detection to ~2.7V. Default from factory is 1.7V,
142+
// which is too low for proper operation of external SPI flash chips
143+
// (they are 2.7-3.6V).
144+
#define SAMD5x_E5x_BOD33_LEVEL (200)
145+
// 2.7V: 1.5V + LEVEL * 6mV.
146+
#endif
147+
132148
// Smallest unit of flash that can be erased.
133149
#define FLASH_ERASE_SIZE NVMCTRL_BLOCK_SIZE
134150

ports/atmel-samd/supervisor/port.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,10 @@ static void rtc_init(void) {
206206
safe_mode_t port_init(void) {
207207
#if defined(SAMD21)
208208

209-
// Set brownout detection to ~2.7V. Default from factory is 1.7V,
210-
// which is too low for proper operation of external SPI flash chips (they are 2.7-3.6V).
209+
// Set brownout detection.
211210
// Disable while changing level.
212211
SYSCTRL->BOD33.bit.ENABLE = 0;
213-
SYSCTRL->BOD33.bit.LEVEL = 39; // 2.77V with hysteresis off. Table 37.20 in datasheet.
212+
SYSCTRL->BOD33.bit.LEVEL = SAMD21_BOD33_LEVEL;
214213
SYSCTRL->BOD33.bit.ENABLE = 1;
215214

216215
#ifdef ENABLE_MICRO_TRACE_BUFFER
@@ -225,11 +224,10 @@ safe_mode_t port_init(void) {
225224
#endif
226225

227226
#if defined(SAM_D5X_E5X)
228-
// Set brownout detection to ~2.7V. Default from factory is 1.7V,
229-
// which is too low for proper operation of external SPI flash chips (they are 2.7-3.6V).
227+
// Set brownout detection.
230228
// Disable while changing level.
231229
SUPC->BOD33.bit.ENABLE = 0;
232-
SUPC->BOD33.bit.LEVEL = 200; // 2.7V: 1.5V + LEVEL * 6mV.
230+
SUPC->BOD33.bit.LEVEL = SAMD5x_E5x_BOD33_LEVEL;
233231
SUPC->BOD33.bit.ENABLE = 1;
234232

235233
// MPU (Memory Protection Unit) setup.

0 commit comments

Comments
 (0)