summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Hooper <rhooper@toybox.ca>2019-12-13 13:45:16 -0500
committerRoy Hooper <rhooper@toybox.ca>2019-12-13 13:45:16 -0500
commit72ad2e9259cdf99529298fb83791d268e227f4b3 (patch)
treeb0fde82fbf4e4e5fa3077769ae9c1fd338a00e7d
parent0326c98fd5409d10167d3d2cb3c6ea9dd898a543 (diff)
parent6c3d555b873fb7dddfa09ff24c6630c1aae47d3d (diff)
Merge branch 'master' into new-pixelbuf-api
-rw-r--r--.github/workflows/build.yml1
-rw-r--r--locale/ID.po120
-rw-r--r--locale/circuitpython.pot93
-rw-r--r--locale/de_DE.po180
-rw-r--r--locale/en_US.po93
-rw-r--r--locale/en_x_pirate.po93
-rw-r--r--locale/es.po195
-rw-r--r--locale/fil.po172
-rw-r--r--locale/fr.po194
-rw-r--r--locale/it_IT.po134
-rw-r--r--locale/ko.po93
-rw-r--r--locale/pl.po186
-rw-r--r--locale/pt_BR.po96
-rw-r--r--locale/zh_Latn_pinyin.po189
-rwxr-xr-xmain.c6
-rw-r--r--ports/atmel-samd/Makefile17
-rw-r--r--ports/atmel-samd/bindings/samd/Clock.c260
-rw-r--r--ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/arduino_zero/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/arduino_zero/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.h3
-rw-r--r--ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.h9
-rw-r--r--ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/common.template.ld (renamed from ports/atmel-samd/boards/samd21x18-bootloader-crystalless.ld)27
-rw-r--r--ports/atmel-samd/boards/cp32-m4/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/cp32-m4/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/datum_distance/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/datum_distance/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/datum_imu/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/datum_imu/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/datum_light/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/datum_light/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/datum_weather/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/datum_weather/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/escornabot_makech/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/escornabot_makech/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/feather_m0_express/mpconfigboard.h7
-rw-r--r--ports/atmel-samd/boards/feather_m0_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/feather_m4_express/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk1
-rwxr-xr-xports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.h6
-rwxr-xr-xports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/gemma_m0/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/gemma_m0/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.mk2
-rw-r--r--ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.mk2
-rw-r--r--ports/atmel-samd/boards/meowmeow/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/meowmeow/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/metro_m0_express/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/metro_m0_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/metro_m4_express/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/monster_m4sk/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/monster_m4sk/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pewpew10/mpconfigboard.h5
-rw-r--r--ports/atmel-samd/boards/pewpew10/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h9
-rw-r--r--ports/atmel-samd/boards/pewpew_m4/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pirkey_m0/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/pirkey_m0/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pybadge/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/pybadge/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pygamer/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/pygamer/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pygamer_advance/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/pygamer_advance/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pyportal/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/pyportal/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pyportal_titano/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/pyportal_titano/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/pyruler/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/pyruler/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/sam32/mpconfigboard.h7
-rw-r--r--ports/atmel-samd/boards/sam32/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/samd21x18-bootloader-external-flash-crystalless.ld84
-rw-r--r--ports/atmel-samd/boards/samd21x18-bootloader-external-flash.ld84
-rw-r--r--ports/atmel-samd/boards/samd21x18-bootloader.ld85
-rw-r--r--ports/atmel-samd/boards/samd21x18-external-flash.ld83
-rw-r--r--ports/atmel-samd/boards/samd21x18.ld83
-rw-r--r--ports/atmel-samd/boards/samd51x18-bootloader-external-flash.ld84
-rw-r--r--ports/atmel-samd/boards/samd51x19-bootloader-external-flash.ld84
-rw-r--r--ports/atmel-samd/boards/samd51x19-bootloader.ld84
-rw-r--r--ports/atmel-samd/boards/samd51x20-bootloader-external-flash.ld84
-rw-r--r--ports/atmel-samd/boards/samd51x20-bootloader.ld84
-rw-r--r--ports/atmel-samd/boards/samd51x20-external-flash.ld82
-rw-r--r--ports/atmel-samd/boards/samd51x20.ld83
-rw-r--r--ports/atmel-samd/boards/serpente/mpconfigboard.h7
-rw-r--r--ports/atmel-samd/boards/serpente/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/shirtty/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/shirtty/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/snekboard/mpconfigboard.h7
-rw-r--r--ports/atmel-samd/boards/snekboard/mpconfigboard.mk1
-rwxr-xr-xports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.h4
-rwxr-xr-xports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.mk1
-rwxr-xr-xports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.h10
-rwxr-xr-xports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.h7
-rw-r--r--ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.mk2
-rw-r--r--ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h8
-rw-r--r--ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/trinket_m0/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/trinket_m0/mpconfigboard.mk2
-rw-r--r--ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/uchip/mpconfigboard.h4
-rw-r--r--ports/atmel-samd/boards/uchip/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/ugame10/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/ugame10/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.h6
-rw-r--r--ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.mk1
-rw-r--r--ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c22
-rw-r--r--ports/atmel-samd/common-hal/microcontroller/__init__.c3
-rw-r--r--ports/atmel-samd/ld_defines.c30
-rw-r--r--ports/atmel-samd/mpconfigport.h140
-rw-r--r--ports/atmel-samd/mpconfigport.mk9
m---------ports/atmel-samd/peripherals0
-rw-r--r--ports/atmel-samd/supervisor/internal_flash.c2
-rw-r--r--ports/atmel-samd/supervisor/internal_flash.h11
-rw-r--r--ports/atmel-samd/supervisor/port.c54
-rw-r--r--ports/cxd56/boards/spresense/mpconfigboard.mk2
-rwxr-xr-xports/nrf/Makefile23
-rw-r--r--ports/nrf/README.md94
-rw-r--r--ports/nrf/bluetooth/ble_drv.c2
-rw-r--r--ports/nrf/bluetooth/ble_drv.h2
-rw-r--r--ports/nrf/bluetooth/ble_uart.c4
-rw-r--r--ports/nrf/boards/adafruit_nrf52840_s140_v6.ld50
-rw-r--r--ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h9
-rw-r--r--ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/common.template.ld (renamed from ports/nrf/boards/common.ld)55
-rw-r--r--ports/nrf/boards/electronut_labs_blip/mpconfigboard.h6
-rw-r--r--ports/nrf/boards/electronut_labs_blip/mpconfigboard.mk18
-rw-r--r--ports/nrf/boards/electronut_labs_papyr/mpconfigboard.h6
-rw-r--r--ports/nrf/boards/electronut_labs_papyr/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/feather_nrf52840_express/mpconfigboard.h9
-rw-r--r--ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.h3
-rw-r--r--ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.h6
-rw-r--r--ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.h6
-rw-r--r--ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk17
-rw-r--r--ports/nrf/boards/metro_nrf52840_express/mpconfigboard.h9
-rw-r--r--ports/nrf/boards/metro_nrf52840_express/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/nrf52840_1M_256k.ld28
-rw-r--r--ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0.ld28
-rw-r--r--ports/nrf/boards/particle_argon/mpconfigboard.h6
-rw-r--r--ports/nrf/boards/particle_argon/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/particle_boron/mpconfigboard.h6
-rw-r--r--ports/nrf/boards/particle_boron/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/particle_xenon/mpconfigboard.h6
-rw-r--r--ports/nrf/boards/particle_xenon/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/pca10056/mpconfigboard.h2
-rw-r--r--ports/nrf/boards/pca10056/mpconfigboard.mk16
-rw-r--r--ports/nrf/boards/pca10059/mpconfigboard.h2
-rw-r--r--ports/nrf/boards/pca10059/mpconfigboard.mk17
-rw-r--r--ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.h2
-rw-r--r--ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk16
-rw-r--r--ports/nrf/common-hal/_bleio/Adapter.c9
-rw-r--r--ports/nrf/common-hal/microcontroller/__init__.c3
-rw-r--r--ports/nrf/common-hal/nvm/ByteArray.c24
-rw-r--r--ports/nrf/common-hal/nvm/ByteArray.h2
-rw-r--r--ports/nrf/ld_defines.c39
-rw-r--r--ports/nrf/mpconfigport.h112
-rw-r--r--ports/nrf/mpconfigport.mk24
-rw-r--r--ports/nrf/peripherals/nrf/nvm.c15
-rw-r--r--ports/nrf/peripherals/nrf/nvm.h6
-rw-r--r--ports/nrf/supervisor/internal_flash.c14
-rw-r--r--ports/nrf/supervisor/serial.c10
-rw-r--r--ports/stm32f4/boards/feather_stm32f405_express/mpconfigboard.h3
-rw-r--r--ports/stm32f4/boards/pyboard_v11/mpconfigboard.h2
-rw-r--r--ports/stm32f4/boards/stm32f411ce_blackpill/board.c39
-rw-r--r--ports/stm32f4/boards/stm32f411ce_blackpill/mpconfigboard.h47
-rw-r--r--ports/stm32f4/boards/stm32f411ce_blackpill/mpconfigboard.mk22
-rw-r--r--ports/stm32f4/boards/stm32f411ce_blackpill/pins.c40
-rw-r--r--ports/stm32f4/boards/stm32f411ce_blackpill/stm32f4xx_hal_conf.h440
-rw-r--r--ports/stm32f4/boards/stm32f411ve_discovery/mpconfigboard.h6
-rw-r--r--ports/stm32f4/boards/stm32f412zg_discovery/mpconfigboard.h3
-rw-r--r--ports/stm32f4/peripherals/stm32f4/stm32f411xe/gpio.c1
-rw-r--r--py/circuitpy_defns.mk13
-rw-r--r--py/circuitpy_mpconfig.h15
-rw-r--r--py/circuitpy_mpconfig.mk23
-rwxr-xr-xpy/gc.c3
-rwxr-xr-xpy/mpconfig.h9
-rw-r--r--py/nlr.h9
-rw-r--r--py/nlrthumb.c16
-rw-r--r--py/nlrx64.c2
-rw-r--r--py/nlrx86.c2
-rw-r--r--py/nlrxtensa.c2
-rw-r--r--py/py.mk2
-rw-r--r--shared-bindings/_bleio/Adapter.c8
-rw-r--r--shared-module/audiomp3/MP3File.c49
-rw-r--r--shared-module/audiomp3/MP3File.h6
-rw-r--r--supervisor/shared/external_flash/external_flash.c8
-rw-r--r--supervisor/shared/safe_mode.c84
-rw-r--r--supervisor/shared/safe_mode.h3
-rw-r--r--supervisor/supervisor.mk73
-rw-r--r--tools/build_board_info.py1
-rw-r--r--tools/build_memory_info.py21
-rwxr-xr-xtools/gen_ld_files.py60
252 files changed, 2814 insertions, 2955 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index e4ec73d4c..4d7db57d0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -151,6 +151,7 @@ jobs:
- "sparkfun_samd21_dev"
- "sparkfun_samd21_mini"
- "spresense"
+ - "stm32f411ce_blackpill"
- "stm32f411ve_discovery"
- "stm32f412zg_discovery"
- "stringcar_m0_express"
diff --git a/locale/ID.po b/locale/ID.po
index bee0d9b73..480872706 100644
--- a/locale/ID.po
+++ b/locale/ID.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,6 +23,19 @@ msgid ""
"Code done running. Waiting for reload.\n"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr ""
@@ -294,7 +307,7 @@ msgid "Array values should be single bytes."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -401,6 +414,10 @@ msgstr "Tidak bisa mendapatkan pull pada saat mode output"
msgid "Cannot get temperature"
msgstr "Tidak bisa mendapatkan temperatur. status: 0x%02x"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr ""
@@ -449,6 +466,16 @@ msgstr ""
msgid "CharacteristicBuffer writing not provided"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr ""
@@ -510,7 +537,7 @@ msgid "Couldn't allocate second buffer"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
@@ -627,28 +654,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "Gagal untuk melepaskan mutex, status: 0x%08lX"
-#: py/moduerrno.c
-msgid "File exists"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
+#: py/moduerrno.c
+msgid "File exists"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr ""
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -825,13 +842,6 @@ msgstr ""
msgid "Length must be non-negative"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr ""
@@ -846,11 +856,11 @@ msgid "Maximum x value when mirrored is %d"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
+msgid "MicroPython fatal error."
msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
@@ -923,6 +933,10 @@ msgstr ""
msgid "No such file/directory"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
#, fuzzy
@@ -1102,10 +1116,7 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
#: supervisor/shared/safe_mode.c
@@ -1115,21 +1126,11 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-#, fuzzy
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-"Tegangan dari mikrokontroler turun atau mati. Pastikan sumber tegangan "
-"memberikan daya\n"
-
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@@ -1163,10 +1164,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "Untuk keluar, silahkan reset board tanpa "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr "Terlalu banyak channel dalam sampel"
@@ -1245,6 +1242,10 @@ msgstr ""
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1322,12 +1323,8 @@ msgstr ""
"Untuk menampilkan modul built-in silahkan ketik `help(\"modules\")`.\n"
#: supervisor/shared/safe_mode.c
-#, fuzzy
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
-"Anda sedang menjalankan mode aman (safe mode) yang berarti sesuatu yang "
-"sangat buruk telah terjadi.\n"
#: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by "
@@ -2843,6 +2840,19 @@ msgstr ""
#~ msgid "Soft device assert, id: 0x%08lX, pc: 0x%08lX"
#~ msgstr "Dukungan soft device, id: 0x%08lX, pc: 0x%08l"
+#, fuzzy
+#~ msgid ""
+#~ "The microcontroller's power dipped. Please make sure your power supply "
+#~ "provides\n"
+#~ "enough power for the whole circuit and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ msgstr ""
+#~ "Tegangan dari mikrokontroler turun atau mati. Pastikan sumber tegangan "
+#~ "memberikan daya\n"
+
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "Untuk keluar, silahkan reset board tanpa "
+
#~ msgid "UART(%d) does not exist"
#~ msgstr "UART(%d) tidak ada"
@@ -2860,6 +2870,14 @@ msgstr ""
#~ "Gunakan esptool untuk menghapus flash dan upload ulang Python sebagai "
#~ "gantinya"
+#, fuzzy
+#~ msgid ""
+#~ "You are running in safe mode which means something unanticipated "
+#~ "happened.\n"
+#~ msgstr ""
+#~ "Anda sedang menjalankan mode aman (safe mode) yang berarti sesuatu yang "
+#~ "sangat buruk telah terjadi.\n"
+
#~ msgid "[addrinfo error %d]"
#~ msgstr "[addrinfo error %d]"
diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot
index f172638c3..8b9b240a0 100644
--- a/locale/circuitpython.pot
+++ b/locale/circuitpython.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-02 14:06-0500\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,6 +23,19 @@ msgid ""
"Code done running. Waiting for reload.\n"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr ""
@@ -292,7 +305,7 @@ msgid "Array values should be single bytes."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -395,6 +408,10 @@ msgstr ""
msgid "Cannot get temperature"
msgstr ""
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr ""
@@ -439,6 +456,16 @@ msgstr ""
msgid "CharacteristicBuffer writing not provided"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr ""
@@ -500,7 +527,7 @@ msgid "Couldn't allocate second buffer"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
@@ -616,28 +643,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr ""
-#: py/moduerrno.c
-msgid "File exists"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
+#: py/moduerrno.c
+msgid "File exists"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr ""
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -814,13 +831,6 @@ msgstr ""
msgid "Length must be non-negative"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr ""
@@ -835,11 +845,11 @@ msgid "Maximum x value when mirrored is %d"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
+msgid "MicroPython fatal error."
msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
@@ -912,6 +922,10 @@ msgstr ""
msgid "No such file/directory"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "Not connected"
@@ -1086,10 +1100,7 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
#: supervisor/shared/safe_mode.c
@@ -1100,18 +1111,11 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
msgstr ""
@@ -1144,10 +1148,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr ""
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr ""
@@ -1226,6 +1226,10 @@ msgstr ""
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1296,8 +1300,7 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
#: supervisor/shared/safe_mode.c
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 6f5fa77c7..4a2bc8994 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Pascal Deneaux\n"
"Language-Team: Sebastian Plamauer, Pascal Deneaux\n"
@@ -25,6 +25,19 @@ msgstr ""
"\n"
"Der Code wurde ausgeführt. Warte auf reload.\n"
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " Datei \"%q\""
@@ -294,7 +307,7 @@ msgid "Array values should be single bytes."
msgstr "Array-Werte sollten aus Einzelbytes bestehen."
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -399,6 +412,10 @@ msgstr "Pull up im Ausgabemodus nicht möglich"
msgid "Cannot get temperature"
msgstr "Kann Temperatur nicht holen"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr "Kann nicht beite Kanäle auf dem gleichen Pin ausgeben"
@@ -443,6 +460,16 @@ msgstr "Kann nicht ohne MOSI-Pin schreiben."
msgid "CharacteristicBuffer writing not provided"
msgstr "Schreiben von CharacteristicBuffer ist nicht vorgesehen"
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr "Clock pin init fehlgeschlagen."
@@ -504,8 +531,8 @@ msgid "Couldn't allocate second buffer"
msgstr "Konnte second buffer nicht zuteilen"
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
-msgstr "Absturz in HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
+msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "DAC already in use"
@@ -620,28 +647,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "Mutex konnte nicht freigegeben werden. Status: 0x%04x"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
+msgstr ""
+
#: py/moduerrno.c
msgid "File exists"
msgstr "Datei existiert"
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr ""
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -822,17 +839,6 @@ msgstr "Länge muss ein int sein"
msgid "Length must be non-negative"
msgstr "Länge darf nicht negativ sein"
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-"Sieht aus, als wäre der CircuitPython-Kernel-Code abgestürzt. Uups!\n"
-"Bitte melde das Problem unter https://github.com/adafruit/circuitpython/"
-"issues\n"
-"mit dem Inhalt deines CIRCUITPY-Laufwerks und dieser Nachricht:\n"
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr "MISO pin Initialisierung fehlgeschlagen"
@@ -847,14 +853,12 @@ msgid "Maximum x value when mirrored is %d"
msgstr "Maximaler x-Wert beim Spiegeln ist %d"
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
-"MicroPython-NLR-Sprung ist fehlgeschlagen. Wahrscheinlich "
-"Speicherbeschädigung.\n"
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
-msgstr "Schwerwiegender MicroPython-Fehler\n"
+msgid "MicroPython fatal error."
+msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
msgid "Microphone startup delay must be in range 0.0 to 1.0"
@@ -927,6 +931,10 @@ msgstr "Kein Speicherplatz mehr verfügbar auf dem Gerät"
msgid "No such file/directory"
msgstr "Keine solche Datei/Verzeichnis"
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "Not connected"
@@ -1109,17 +1117,8 @@ msgstr "Stream fehlt readinto() oder write() Methode."
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
-"Der CircuitPython-Heap war beschädigt, weil der Stack zu klein war.\n"
-"Bitte erhöhe die stack size limits und drücke die Reset-Taste (nach Auswurf "
-"des CIRCUITPY-Laufwerks)\n"
-"Wenn du den Stack nicht geändert hast, melde bitte das Problem unter https://"
-"github.com/adafruit/circuitpython/issues\n"
-"mit dem Inhalt deines CIRCUITPY-Laufwerks.\n"
#: supervisor/shared/safe_mode.c
msgid ""
@@ -1131,23 +1130,10 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-"Die Stromversorgung des Mikrocontrollers ist eingebrochen. Stelle sicher, "
-"dass deine Stromversorgung genug Leistung für die gesamte Schaltung zur "
-"Verfügung stellt und drücke die Reset-Taste (nach Auswurf des CIRCUITPY-"
-"Laufwerks)\n"
-
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-"Die Reset-Taste wurde beim Booten von CircuitPython gedrückt. Drücke sie "
-"erneut um den abgesicherten Modus zu verlassen. \n"
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@@ -1181,10 +1167,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "Zum beenden, resette bitte das board ohne "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr "Zu viele Kanäle im sample"
@@ -1263,6 +1245,10 @@ msgstr "Unerwarteter nrfx uuid-Typ"
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1342,11 +1328,8 @@ msgstr ""
"aus.\n"
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
-"Sie laufen im abgesicherten Modus, was bedeutet, dass etwas Unerwartetes "
-"passiert ist.\n"
#: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by "
@@ -2731,6 +2714,9 @@ msgstr ""
#~ msgid "Could not decode ble_uuid, err 0x%04x"
#~ msgstr "Konnte ble_uuid nicht decodieren. Status: 0x%04x"
+#~ msgid "Crash into the HardFault_Handler.\n"
+#~ msgstr "Absturz in HardFault_Handler.\n"
+
#~ msgid "Data too large for the advertisement packet"
#~ msgstr "Daten sind zu groß für das advertisement packet"
@@ -2865,9 +2851,27 @@ msgstr ""
#~ msgid "Invalid data pin"
#~ msgstr "Ungültiger data pin"
+#~ msgid ""
+#~ "Looks like our core CircuitPython code crashed hard. Whoops!\n"
+#~ "Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
+#~ " with the contents of your CIRCUITPY drive and this message:\n"
+#~ msgstr ""
+#~ "Sieht aus, als wäre der CircuitPython-Kernel-Code abgestürzt. Uups!\n"
+#~ "Bitte melde das Problem unter https://github.com/adafruit/circuitpython/"
+#~ "issues\n"
+#~ "mit dem Inhalt deines CIRCUITPY-Laufwerks und dieser Nachricht:\n"
+
#~ msgid "Maximum PWM frequency is %dhz."
#~ msgstr "Maximale PWM Frequenz ist %dHz"
+#~ msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+#~ msgstr ""
+#~ "MicroPython-NLR-Sprung ist fehlgeschlagen. Wahrscheinlich "
+#~ "Speicherbeschädigung.\n"
+
+#~ msgid "MicroPython fatal error.\n"
+#~ msgstr "Schwerwiegender MicroPython-Fehler\n"
+
#~ msgid "Minimum PWM frequency is 1hz."
#~ msgstr "Minimale PWM Frequenz ist %dHz"
@@ -2914,6 +2918,41 @@ msgstr ""
#~ msgid "STA required"
#~ msgstr "STA erforderlich"
+#~ msgid ""
+#~ "The CircuitPython heap was corrupted because the stack was too small.\n"
+#~ "Please increase stack size limits and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ "If you didn't change the stack, then file an issue here with the contents "
+#~ "of your CIRCUITPY drive:\n"
+#~ msgstr ""
+#~ "Der CircuitPython-Heap war beschädigt, weil der Stack zu klein war.\n"
+#~ "Bitte erhöhe die stack size limits und drücke die Reset-Taste (nach "
+#~ "Auswurf des CIRCUITPY-Laufwerks)\n"
+#~ "Wenn du den Stack nicht geändert hast, melde bitte das Problem unter "
+#~ "https://github.com/adafruit/circuitpython/issues\n"
+#~ "mit dem Inhalt deines CIRCUITPY-Laufwerks.\n"
+
+#~ msgid ""
+#~ "The microcontroller's power dipped. Please make sure your power supply "
+#~ "provides\n"
+#~ "enough power for the whole circuit and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ msgstr ""
+#~ "Die Stromversorgung des Mikrocontrollers ist eingebrochen. Stelle sicher, "
+#~ "dass deine Stromversorgung genug Leistung für die gesamte Schaltung zur "
+#~ "Verfügung stellt und drücke die Reset-Taste (nach Auswurf des CIRCUITPY-"
+#~ "Laufwerks)\n"
+
+#~ msgid ""
+#~ "The reset button was pressed while booting CircuitPython. Press again to "
+#~ "exit safe mode.\n"
+#~ msgstr ""
+#~ "Die Reset-Taste wurde beim Booten von CircuitPython gedrückt. Drücke sie "
+#~ "erneut um den abgesicherten Modus zu verlassen. \n"
+
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "Zum beenden, resette bitte das board ohne "
+
#~ msgid "UART(%d) does not exist"
#~ msgstr "UART(%d) existiert nicht"
@@ -2936,6 +2975,13 @@ msgstr ""
#~ msgid "Voice index too high"
#~ msgstr "Voice index zu hoch"
+#~ msgid ""
+#~ "You are running in safe mode which means something unanticipated "
+#~ "happened.\n"
+#~ msgstr ""
+#~ "Sie laufen im abgesicherten Modus, was bedeutet, dass etwas Unerwartetes "
+#~ "passiert ist.\n"
+
#~ msgid "buffer too long"
#~ msgstr "Buffer zu lang"
diff --git a/locale/en_US.po b/locale/en_US.po
index 028a56881..135aeda17 100644
--- a/locale/en_US.po
+++ b/locale/en_US.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -23,6 +23,19 @@ msgid ""
"Code done running. Waiting for reload.\n"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr ""
@@ -292,7 +305,7 @@ msgid "Array values should be single bytes."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -395,6 +408,10 @@ msgstr ""
msgid "Cannot get temperature"
msgstr ""
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr ""
@@ -439,6 +456,16 @@ msgstr ""
msgid "CharacteristicBuffer writing not provided"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr ""
@@ -500,7 +527,7 @@ msgid "Couldn't allocate second buffer"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
@@ -616,28 +643,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr ""
-#: py/moduerrno.c
-msgid "File exists"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
+#: py/moduerrno.c
+msgid "File exists"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr ""
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -814,13 +831,6 @@ msgstr ""
msgid "Length must be non-negative"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr ""
@@ -835,11 +845,11 @@ msgid "Maximum x value when mirrored is %d"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
+msgid "MicroPython fatal error."
msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
@@ -912,6 +922,10 @@ msgstr ""
msgid "No such file/directory"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "Not connected"
@@ -1086,10 +1100,7 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
#: supervisor/shared/safe_mode.c
@@ -1100,18 +1111,11 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
msgstr ""
@@ -1144,10 +1148,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr ""
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr ""
@@ -1226,6 +1226,10 @@ msgstr ""
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1296,8 +1300,7 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
#: supervisor/shared/safe_mode.c
diff --git a/locale/en_x_pirate.po b/locale/en_x_pirate.po
index 4a0903269..5ac17778a 100644
--- a/locale/en_x_pirate.po
+++ b/locale/en_x_pirate.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: @sommersoft, @MrCertainly\n"
@@ -25,6 +25,19 @@ msgstr ""
"\n"
"Captin's orders are complete. Holdin' fast fer reload.\n"
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr ""
@@ -294,7 +307,7 @@ msgid "Array values should be single bytes."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -399,6 +412,10 @@ msgstr ""
msgid "Cannot get temperature"
msgstr ""
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr ""
@@ -443,6 +460,16 @@ msgstr ""
msgid "CharacteristicBuffer writing not provided"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr ""
@@ -504,7 +531,7 @@ msgid "Couldn't allocate second buffer"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
@@ -620,28 +647,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr ""
-#: py/moduerrno.c
-msgid "File exists"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
+#: py/moduerrno.c
+msgid "File exists"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr ""
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -818,13 +835,6 @@ msgstr ""
msgid "Length must be non-negative"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr ""
@@ -839,11 +849,11 @@ msgid "Maximum x value when mirrored is %d"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
+msgid "MicroPython fatal error."
msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
@@ -916,6 +926,10 @@ msgstr ""
msgid "No such file/directory"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "Not connected"
@@ -1090,10 +1104,7 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
#: supervisor/shared/safe_mode.c
@@ -1104,18 +1115,11 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
msgstr ""
@@ -1148,10 +1152,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr ""
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr ""
@@ -1230,6 +1230,10 @@ msgstr ""
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1300,8 +1304,7 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
#: supervisor/shared/safe_mode.c
diff --git a/locale/es.po b/locale/es.po
index 01def0d62..6430ab3fb 100644
--- a/locale/es.po
+++ b/locale/es.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2018-08-24 22:56-0500\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -25,6 +25,19 @@ msgstr ""
"\n"
"El código terminó su ejecución. Esperando para recargar.\n"
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " Archivo \"%q\""
@@ -296,10 +309,8 @@ msgid "Array values should be single bytes."
msgstr "Valores del array deben ser bytes individuales."
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
-"Intento de allocation de heap cuando la VM de MicroPython no estaba "
-"corriendo.\n"
#: main.c
msgid "Auto-reload is off.\n"
@@ -403,6 +414,10 @@ msgstr "No puede ser pull mientras este en modo de salida"
msgid "Cannot get temperature"
msgstr "No se puede obtener la temperatura."
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr "No se puede tener ambos canales en el mismo pin"
@@ -447,6 +462,16 @@ msgstr "No se puede escribir sin pin MOSI."
msgid "CharacteristicBuffer writing not provided"
msgstr "CharateristicBuffer escritura no proporcionada"
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr "Clock pin init fallido"
@@ -508,8 +533,8 @@ msgid "Couldn't allocate second buffer"
msgstr "No se pudo asignar el segundo buffer"
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
-msgstr "Choque en el HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
+msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "DAC already in use"
@@ -624,28 +649,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "No se puede liberar el mutex, err 0x%04x"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
+msgstr ""
+
#: py/moduerrno.c
msgid "File exists"
msgstr "El archivo ya existe"
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
-msgstr "Falló borrado de flash"
-
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
-msgstr "Falló el iniciar borrado de flash, err 0x%04x"
-
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr "Falló la escritura"
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr "Falló el iniciar la escritura de flash, err 0x%04x"
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr "Frecuencia capturada por encima de la capacidad. Captura en pausa."
@@ -824,17 +839,6 @@ msgstr "Length debe ser un int"
msgid "Length must be non-negative"
msgstr "Longitud no deberia ser negativa"
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-"Parece que nuestro código de CircuitPython ha fallado con fuerza. Whoops!\n"
-"Por favor, crea un issue en https://github.com/adafruit/circuitpython/"
-"issues\n"
-" con el contenido de su unidad CIRCUITPY y este mensaje:\n"
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr "MISO pin init fallido."
@@ -849,12 +853,12 @@ msgid "Maximum x value when mirrored is %d"
msgstr "Valor máximo de x cuando se refleja es %d"
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
-msgstr "MicroPython NLR salto fallido. Probable corrupción de memoria.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
+msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
-msgstr "Error fatal de MicroPython.\n"
+msgid "MicroPython fatal error."
+msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
msgid "Microphone startup delay must be in range 0.0 to 1.0"
@@ -926,6 +930,10 @@ msgstr "No queda espacio en el dispositivo"
msgid "No such file/directory"
msgstr "No existe el archivo/directorio"
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "Not connected"
@@ -1110,17 +1118,8 @@ msgstr "A Stream le falta el método readinto() o write()."
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
-"El heap de CircuitPython estaba corrupto porque el stack era demasiado "
-"pequeño.\n"
-"Aumente los límites del tamaño del stacj y presione reset (después de "
-"expulsarCIRCUITPY).\n"
-"Si no cambió el stack, entonces reporte un issue aquí con el contenido desu "
-"unidad CIRCUITPY:\n"
#: supervisor/shared/safe_mode.c
msgid ""
@@ -1130,23 +1129,10 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-"La alimentación del microcontrolador cayó. Por favor asegurate de que tu "
-"fuente de alimentación provee\n"
-"suficiente energia para todo el circuito y presiona el botón de reset "
-"(despuesde expulsar CIRCUITPY).\n"
-
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-"El botón reset fue presionado mientras arrancaba CircuitPython. Presiona "
-"otra vez para salir del modo seguro.\n"
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@@ -1180,10 +1166,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr "Ancho del Tile debe dividir exactamente el ancho de mapa de bits"
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "Para salir, por favor reinicia la tarjeta sin "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr "Demasiados canales en sample."
@@ -1262,6 +1244,10 @@ msgstr "Tipo de uuid nrfx inesperado"
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1339,11 +1325,8 @@ msgstr ""
"Para listar los módulos incorporados por favor haga `help(\"modules\")`.\n"
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
-"Estás ejecutando en modo seguro, lo cual significa que algo realmente malo "
-"ha sucedido.\n"
#: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by "
@@ -2694,6 +2677,11 @@ msgstr "paso cero"
#~ msgid "Can not use dotstar with %s"
#~ msgstr "No se puede usar dotstar con %s"
+#~ msgid "Attempted heap allocation when MicroPython VM not running.\n"
+#~ msgstr ""
+#~ "Intento de allocation de heap cuando la VM de MicroPython no estaba "
+#~ "corriendo.\n"
+
#~ msgid "Can't add services in Central mode"
#~ msgstr "No se pueden agregar servicio en modo Central"
@@ -2727,6 +2715,9 @@ msgstr "paso cero"
#~ msgid "Could not decode ble_uuid, err 0x%04x"
#~ msgstr "No se puede descodificar ble_uuid, err 0x%04x"
+#~ msgid "Crash into the HardFault_Handler.\n"
+#~ msgstr "Choque en el HardFault_Handler.\n"
+
#, fuzzy
#~ msgid "Data too large for the advertisement packet"
#~ msgstr "Los datos no caben en el paquete de anuncio."
@@ -2841,6 +2832,15 @@ msgstr "paso cero"
#~ msgid "Failed to write gatts value, err 0x%04x"
#~ msgstr "No se puede escribir el valor del atributo. err: 0x%04x"
+#~ msgid "Flash erase failed"
+#~ msgstr "Falló borrado de flash"
+
+#~ msgid "Flash erase failed to start, err 0x%04x"
+#~ msgstr "Falló el iniciar borrado de flash, err 0x%04x"
+
+#~ msgid "Flash write failed to start, err 0x%04x"
+#~ msgstr "Falló el iniciar la escritura de flash, err 0x%04x"
+
#~ msgid "Function requires lock."
#~ msgstr "La función requiere lock"
@@ -2856,9 +2856,26 @@ msgstr "paso cero"
#~ msgid "Invalid data pin"
#~ msgstr "Pin de datos inválido"
+#~ msgid ""
+#~ "Looks like our core CircuitPython code crashed hard. Whoops!\n"
+#~ "Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
+#~ " with the contents of your CIRCUITPY drive and this message:\n"
+#~ msgstr ""
+#~ "Parece que nuestro código de CircuitPython ha fallado con fuerza. "
+#~ "Whoops!\n"
+#~ "Por favor, crea un issue en https://github.com/adafruit/circuitpython/"
+#~ "issues\n"
+#~ " con el contenido de su unidad CIRCUITPY y este mensaje:\n"
+
#~ msgid "Maximum PWM frequency is %dhz."
#~ msgstr "La frecuencia máxima del PWM es %dhz."
+#~ msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+#~ msgstr "MicroPython NLR salto fallido. Probable corrupción de memoria.\n"
+
+#~ msgid "MicroPython fatal error.\n"
+#~ msgstr "Error fatal de MicroPython.\n"
+
#~ msgid "Minimum PWM frequency is 1hz."
#~ msgstr "La frecuencia mínima del PWM es 1hz"
@@ -2922,9 +2939,44 @@ msgstr "paso cero"
#~ msgid "Soft device assert, id: 0x%08lX, pc: 0x%08lX"
#~ msgstr "Soft device assert, id: 0x%08lX, pc: 0x%08lX"
+#~ msgid ""
+#~ "The CircuitPython heap was corrupted because the stack was too small.\n"
+#~ "Please increase stack size limits and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ "If you didn't change the stack, then file an issue here with the contents "
+#~ "of your CIRCUITPY drive:\n"
+#~ msgstr ""
+#~ "El heap de CircuitPython estaba corrupto porque el stack era demasiado "
+#~ "pequeño.\n"
+#~ "Aumente los límites del tamaño del stacj y presione reset (después de "
+#~ "expulsarCIRCUITPY).\n"
+#~ "Si no cambió el stack, entonces reporte un issue aquí con el contenido "
+#~ "desu unidad CIRCUITPY:\n"
+
+#~ msgid ""
+#~ "The microcontroller's power dipped. Please make sure your power supply "
+#~ "provides\n"
+#~ "enough power for the whole circuit and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ msgstr ""
+#~ "La alimentación del microcontrolador cayó. Por favor asegurate de que tu "
+#~ "fuente de alimentación provee\n"
+#~ "suficiente energia para todo el circuito y presiona el botón de reset "
+#~ "(despuesde expulsar CIRCUITPY).\n"
+
+#~ msgid ""
+#~ "The reset button was pressed while booting CircuitPython. Press again to "
+#~ "exit safe mode.\n"
+#~ msgstr ""
+#~ "El botón reset fue presionado mientras arrancaba CircuitPython. Presiona "
+#~ "otra vez para salir del modo seguro.\n"
+
#~ msgid "Tile indices must be 0 - 255"
#~ msgstr "Los índices de Tile deben ser 0 - 255"
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "Para salir, por favor reinicia la tarjeta sin "
+
#~ msgid "UART(%d) does not exist"
#~ msgstr "UART(%d) no existe"
@@ -2947,6 +2999,13 @@ msgstr "paso cero"
#~ msgid "Voice index too high"
#~ msgstr "Index de voz demasiado alto"
+#~ msgid ""
+#~ "You are running in safe mode which means something unanticipated "
+#~ "happened.\n"
+#~ msgstr ""
+#~ "Estás ejecutando en modo seguro, lo cual significa que algo realmente "
+#~ "malo ha sucedido.\n"
+
#~ msgid "bad GATT role"
#~ msgstr "mal GATT role"
diff --git a/locale/fil.po b/locale/fil.po
index d0dc8490a..a867e2a4f 100644
--- a/locale/fil.po
+++ b/locale/fil.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2018-12-20 22:15-0800\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n"
@@ -23,6 +23,19 @@ msgid ""
"Code done running. Waiting for reload.\n"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " File \"%q\""
@@ -296,7 +309,7 @@ msgid "Array values should be single bytes."
msgstr "Array values ay dapat single bytes."
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -403,6 +416,10 @@ msgstr "Hindi makakakuha ng pull habang nasa output mode"
msgid "Cannot get temperature"
msgstr "Hindi makuha ang temperatura. status 0x%02x"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr "Hindi maaaring output ang mga parehong channel sa parehong pin"
@@ -447,6 +464,16 @@ msgstr "Hindi maaring isulat kapag walang MOSI pin."
msgid "CharacteristicBuffer writing not provided"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr "Nabigo sa pag init ng Clock pin."
@@ -509,8 +536,8 @@ msgid "Couldn't allocate second buffer"
msgstr "Hindi ma-iallocate ang second buffer"
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
-msgstr "Nagcrash sa HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
+msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "DAC already in use"
@@ -630,28 +657,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "Nabigo sa pagrelease ng mutex, status: 0x%08lX"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
+msgstr ""
+
#: py/moduerrno.c
msgid "File exists"
msgstr "Mayroong file"
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr ""
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -830,17 +847,6 @@ msgstr "Haba ay dapat int"
msgid "Length must be non-negative"
msgstr "Haba ay dapat hindi negatibo"
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-"Mukhang ang core CircuitPython code nag crash. Ay!\n"
-"Maaring mag file ng issue sa https://github.com/adafruit/circuitpython/"
-"issues\n"
-"kasama ng laman ng iyong CIRCUITPY drive at ang message na ito:\n"
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr "Hindi ma-initialize ang MISO pin."
@@ -855,12 +861,12 @@ msgid "Maximum x value when mirrored is %d"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
-msgstr "CircuitPython NLR jump nabigo. Maaring memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
+msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
-msgstr "CircuitPython fatal na pagkakamali.\n"
+msgid "MicroPython fatal error."
+msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
msgid "Microphone startup delay must be in range 0.0 to 1.0"
@@ -932,6 +938,10 @@ msgstr ""
msgid "No such file/directory"
msgstr "Walang file/directory"
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
#, fuzzy
@@ -1114,16 +1124,8 @@ msgstr "Stream kulang ng readinto() o write() method."
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
-"Ang CircuitPython heap ay na corrupt dahil ang stack ay maliit.\n"
-"Maaring i-increase ang stack size limit at i-press ang reset (pagkatapos i-"
-"eject ang CIRCUITPY.\n"
-"Kung hindi mo pinalitan ang stack, mag file ng issue dito kasama ng laman ng "
-"CIRCUITPY drive:\n"
#: supervisor/shared/safe_mode.c
msgid ""
@@ -1133,22 +1135,10 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-"Ang kapangyarihan ng mikrokontroller ay bumaba. Mangyaring suriin ang power "
-"supply \n"
-"pindutin ang reset (pagkatapos i-eject ang CIRCUITPY).\n"
-
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-"Ang reset button ay pinindot habang nag boot ang CircuitPython. Pindutin "
-"ulit para lumabas sa safe mode.\n"
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@@ -1182,10 +1172,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "Para lumabas, paki-reset ang board na wala ang "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr "Sobra ang channels sa sample."
@@ -1265,6 +1251,10 @@ msgstr "hindi inaasahang indent"
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1344,9 +1334,8 @@ msgstr ""
"Para makita ang listahan ng modules, `help(“modules”)`.\n"
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
-msgstr "Ikaw ay tumatakbo sa safe mode dahil may masamang nangyari.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
+msgstr ""
#: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by "
@@ -2723,6 +2712,9 @@ msgstr "zero step"
#~ msgid "Cannot update i/f status"
#~ msgstr "Hindi ma-update i/f status"
+#~ msgid "Crash into the HardFault_Handler.\n"
+#~ msgstr "Nagcrash sa HardFault_Handler.\n"
+
#, fuzzy
#~ msgid "Data too large for the advertisement packet"
#~ msgstr "Hindi makasya ang data sa loob ng advertisement packet"
@@ -2859,9 +2851,25 @@ msgstr "zero step"
#~ msgid "Invalid data pin"
#~ msgstr "Mali ang data pin"
+#~ msgid ""
+#~ "Looks like our core CircuitPython code crashed hard. Whoops!\n"
+#~ "Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
+#~ " with the contents of your CIRCUITPY drive and this message:\n"
+#~ msgstr ""
+#~ "Mukhang ang core CircuitPython code nag crash. Ay!\n"
+#~ "Maaring mag file ng issue sa https://github.com/adafruit/circuitpython/"
+#~ "issues\n"
+#~ "kasama ng laman ng iyong CIRCUITPY drive at ang message na ito:\n"
+
#~ msgid "Maximum PWM frequency is %dhz."
#~ msgstr "Pinakamataas na PWM frequency ay %dhz."
+#~ msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+#~ msgstr "CircuitPython NLR jump nabigo. Maaring memory corruption.\n"
+
+#~ msgid "MicroPython fatal error.\n"
+#~ msgstr "CircuitPython fatal na pagkakamali.\n"
+
#~ msgid "Minimum PWM frequency is 1hz."
#~ msgstr "Pinakamababang PWM frequency ay 1hz."
@@ -2911,6 +2919,39 @@ msgstr "zero step"
#~ msgid "STA required"
#~ msgstr "STA kailangan"
+#~ msgid ""
+#~ "The CircuitPython heap was corrupted because the stack was too small.\n"
+#~ "Please increase stack size limits and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ "If you didn't change the stack, then file an issue here with the contents "
+#~ "of your CIRCUITPY drive:\n"
+#~ msgstr ""
+#~ "Ang CircuitPython heap ay na corrupt dahil ang stack ay maliit.\n"
+#~ "Maaring i-increase ang stack size limit at i-press ang reset (pagkatapos "
+#~ "i-eject ang CIRCUITPY.\n"
+#~ "Kung hindi mo pinalitan ang stack, mag file ng issue dito kasama ng laman "
+#~ "ng CIRCUITPY drive:\n"
+
+#~ msgid ""
+#~ "The microcontroller's power dipped. Please make sure your power supply "
+#~ "provides\n"
+#~ "enough power for the whole circuit and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ msgstr ""
+#~ "Ang kapangyarihan ng mikrokontroller ay bumaba. Mangyaring suriin ang "
+#~ "power supply \n"
+#~ "pindutin ang reset (pagkatapos i-eject ang CIRCUITPY).\n"
+
+#~ msgid ""
+#~ "The reset button was pressed while booting CircuitPython. Press again to "
+#~ "exit safe mode.\n"
+#~ msgstr ""
+#~ "Ang reset button ay pinindot habang nag boot ang CircuitPython. Pindutin "
+#~ "ulit para lumabas sa safe mode.\n"
+
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "Para lumabas, paki-reset ang board na wala ang "
+
#~ msgid "UART(%d) does not exist"
#~ msgstr "Walang UART(%d)"
@@ -2930,6 +2971,11 @@ msgstr "zero step"
#~ msgid "Voice index too high"
#~ msgstr "Index ng Voice ay masyadong mataas"
+#~ msgid ""
+#~ "You are running in safe mode which means something unanticipated "
+#~ "happened.\n"
+#~ msgstr "Ikaw ay tumatakbo sa safe mode dahil may masamang nangyari.\n"
+
#~ msgid "[addrinfo error %d]"
#~ msgstr "[addrinfo error %d]"
diff --git a/locale/fr.po b/locale/fr.po
index d981a63d4..5e355b879 100644
--- a/locale/fr.po
+++ b/locale/fr.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2019-04-14 20:05+0100\n"
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
"Language-Team: fr\n"
@@ -25,6 +25,19 @@ msgstr ""
"\n"
"Fin d'éxecution du code. En attente de recharge.\n"
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " Fichier \"%q\""
@@ -300,9 +313,8 @@ msgid "Array values should be single bytes."
msgstr "Les valeurs du tableau doivent être des octets simples 'bytes'."
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
-"Tentative d'allocation de tas alors que la VM MicroPython ne tourne pas.\n"
#: main.c
msgid "Auto-reload is off.\n"
@@ -408,6 +420,10 @@ msgstr "Ne peut être tiré ('pull') en mode 'output'"
msgid "Cannot get temperature"
msgstr "Impossible de lire la température"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr "Les 2 canaux de sortie ne peuvent être sur la même broche"
@@ -453,6 +469,16 @@ msgstr "Impossible d'écrire sans broche MOSI."
msgid "CharacteristicBuffer writing not provided"
msgstr "Ecriture sur 'CharacteristicBuffer' non fournie"
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr "Echec de l'init. de la broche d'horloge"
@@ -515,8 +541,8 @@ msgid "Couldn't allocate second buffer"
msgstr "Impossible d'allouer le 2e tampon"
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
-msgstr "Plantage vers le 'HardFault_Handler'.\n"
+msgid "Crash into the HardFault_Handler."
+msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "DAC already in use"
@@ -634,28 +660,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "Impossible de libérer mutex, err 0x%04x"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
+msgstr ""
+
#: py/moduerrno.c
msgid "File exists"
msgstr "Le fichier existe"
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
-msgstr "L'effacement de la flash a échoué"
-
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
-msgstr "Echec du démarrage de l'effacement de la flash, err 0x%04x"
-
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr "L'écriture de la flash échoué"
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr "Echec du démarrage de l'écriture de la flash, err 0x%04x"
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr "La fréquence capturée est au delà des capacités. Capture en pause."
@@ -838,17 +854,6 @@ msgstr "La longueur doit être un nombre entier"
msgid "Length must be non-negative"
msgstr "La longueur ne doit pas être négative"
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-"On dirait que notre code CircuitPython a durement planté. Oups !\n"
-"Merci de remplir un ticket sur https://github.com/adafruit/circuitpython/"
-"issues\n"
-"avec le contenu de votre lecteur CIRCUITPY et ce message:\n"
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr "Echec de l'init. de la broche MISO"
@@ -863,12 +868,12 @@ msgid "Maximum x value when mirrored is %d"
msgstr "La valeur max. de x est %d lors d'une opération miroir"
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
-msgstr "Saut MicroPython NLR a échoué. Corruption de mémoire possible.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
+msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
-msgstr "Erreur fatale de MicroPython.\n"
+msgid "MicroPython fatal error."
+msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
msgid "Microphone startup delay must be in range 0.0 to 1.0"
@@ -940,6 +945,10 @@ msgstr "Il n'y a plus d'espace libre sur le périphérique"
msgid "No such file/directory"
msgstr "Fichier/dossier introuvable"
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
#, fuzzy
@@ -1129,17 +1138,8 @@ msgstr "Il manque une méthode readinto() ou write() au flux."
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
-"Le tas (heap) de CircuitPython a été corrompu parce que la pile était trop "
-"petite.\n"
-"Augmentez la limite de taille de la pile et appuyez sur 'reset' (après avoir "
-"éjecté CIRCUITPY).\n"
-"Si vous n'avez pas modifié la pile, merci de remplir un ticket avec le "
-"contenu de votre lecteur CIRCUITPY :\n"
#: supervisor/shared/safe_mode.c
msgid ""
@@ -1148,25 +1148,11 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-#, fuzzy
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-"L'alimentation du microcontroleur a chuté. Merci de vérifier que votre "
-"alimentation fournit\n"
-"suffisamment de puissance pour l'ensemble du circuit et appuyez sur "
-"'reset' (après avoir éjecté CIRCUITPY).\n"
-
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-"Le bouton 'reset' a été appuyé pendant le démarrage de CircuitPython. "
-"Appuyer de nouveau pour quitter de le mode sans-échec.\n"
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@@ -1201,10 +1187,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr "La largeur de la tuile doit diviser exactement la largeur de l'image"
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "Pour quitter, redémarrez la carte SVP sans "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr "Trop de canaux dans l'échantillon."
@@ -1287,6 +1269,10 @@ msgstr "Type inattendu pour l'uuid nrfx"
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1365,11 +1351,8 @@ msgstr ""
"Pour lister les modules inclus, tapez `help(\"modules\")`.\n"
#: supervisor/shared/safe_mode.c
-#, fuzzy
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
-"Vous êtes en mode sans-échec ce qui signifie qu'un imprévu est survenu.\n"
#: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by "
@@ -2745,6 +2728,10 @@ msgstr "'step' nul"
#~ msgid "Can not use dotstar with %s"
#~ msgstr "Impossible d'utiliser 'dotstar' avec %s"
+#~ msgid "Attempted heap allocation when MicroPython VM not running.\n"
+#~ msgstr ""
+#~ "Tentative d'allocation de tas alors que la VM MicroPython ne tourne pas.\n"
+
#~ msgid "Can't add services in Central mode"
#~ msgstr "Impossible d'ajouter des services en mode Central"
@@ -2778,6 +2765,9 @@ msgstr "'step' nul"
#~ msgid "Could not decode ble_uuid, err 0x%04x"
#~ msgstr "Impossible de décoder le 'ble_uuid', err 0x%04x"
+#~ msgid "Crash into the HardFault_Handler.\n"
+#~ msgstr "Plantage vers le 'HardFault_Handler'.\n"
+
#~ msgid "Data too large for the advertisement packet"
#~ msgstr "Données trop volumineuses pour le paquet de diffusion"
@@ -2904,6 +2894,15 @@ msgstr "'step' nul"
#~ msgid "Failed to write gatts value, err 0x%04x"
#~ msgstr "Impossible d'écrire la valeur de 'gatts', err 0x%04x"
+#~ msgid "Flash erase failed"
+#~ msgstr "L'effacement de la flash a échoué"
+
+#~ msgid "Flash erase failed to start, err 0x%04x"
+#~ msgstr "Echec du démarrage de l'effacement de la flash, err 0x%04x"
+
+#~ msgid "Flash write failed to start, err 0x%04x"
+#~ msgstr "Echec du démarrage de l'écriture de la flash, err 0x%04x"
+
#~ msgid "Function requires lock."
#~ msgstr "La fonction nécessite un verrou."
@@ -2919,9 +2918,25 @@ msgstr "'step' nul"
#~ msgid "Invalid data pin"
#~ msgstr "Broche de données invalide"
+#~ msgid ""
+#~ "Looks like our core CircuitPython code crashed hard. Whoops!\n"
+#~ "Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
+#~ " with the contents of your CIRCUITPY drive and this message:\n"
+#~ msgstr ""
+#~ "On dirait que notre code CircuitPython a durement planté. Oups !\n"
+#~ "Merci de remplir un ticket sur https://github.com/adafruit/circuitpython/"
+#~ "issues\n"
+#~ "avec le contenu de votre lecteur CIRCUITPY et ce message:\n"
+
#~ msgid "Maximum PWM frequency is %dhz."
#~ msgstr "La fréquence de PWM maximale est %dHz"
+#~ msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+#~ msgstr "Saut MicroPython NLR a échoué. Corruption de mémoire possible.\n"
+
+#~ msgid "MicroPython fatal error.\n"
+#~ msgstr "Erreur fatale de MicroPython.\n"
+
#~ msgid "Minimum PWM frequency is 1hz."
#~ msgstr "La fréquence de PWM minimale est 1Hz"
@@ -2982,9 +2997,45 @@ msgstr "'step' nul"
#~ msgid "Soft device assert, id: 0x%08lX, pc: 0x%08lX"
#~ msgstr "Assertion en mode 'soft-device', id: 0x%08lX, pc: 0x%08lX"
+#~ msgid ""
+#~ "The CircuitPython heap was corrupted because the stack was too small.\n"
+#~ "Please increase stack size limits and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ "If you didn't change the stack, then file an issue here with the contents "
+#~ "of your CIRCUITPY drive:\n"
+#~ msgstr ""
+#~ "Le tas (heap) de CircuitPython a été corrompu parce que la pile était "
+#~ "trop petite.\n"
+#~ "Augmentez la limite de taille de la pile et appuyez sur 'reset' (après "
+#~ "avoir éjecté CIRCUITPY).\n"
+#~ "Si vous n'avez pas modifié la pile, merci de remplir un ticket avec le "
+#~ "contenu de votre lecteur CIRCUITPY :\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "The microcontroller's power dipped. Please make sure your power supply "
+#~ "provides\n"
+#~ "enough power for the whole circuit and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ msgstr ""
+#~ "L'alimentation du microcontroleur a chuté. Merci de vérifier que votre "
+#~ "alimentation fournit\n"
+#~ "suffisamment de puissance pour l'ensemble du circuit et appuyez sur "
+#~ "'reset' (après avoir éjecté CIRCUITPY).\n"
+
+#~ msgid ""
+#~ "The reset button was pressed while booting CircuitPython. Press again to "
+#~ "exit safe mode.\n"
+#~ msgstr ""
+#~ "Le bouton 'reset' a été appuyé pendant le démarrage de CircuitPython. "
+#~ "Appuyer de nouveau pour quitter de le mode sans-échec.\n"
+
#~ msgid "Tile indices must be 0 - 255"
#~ msgstr "Les indices des tuiles doivent être compris entre 0 et 255 "
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "Pour quitter, redémarrez la carte SVP sans "
+
#~ msgid "UART(%d) does not exist"
#~ msgstr "UART(%d) n'existe pas"
@@ -3007,6 +3058,13 @@ msgstr "'step' nul"
#~ msgid "Voice index too high"
#~ msgstr "Index de la voix trop grand"
+#, fuzzy
+#~ msgid ""
+#~ "You are running in safe mode which means something unanticipated "
+#~ "happened.\n"
+#~ msgstr ""
+#~ "Vous êtes en mode sans-échec ce qui signifie qu'un imprévu est survenu.\n"
+
#~ msgid "bad GATT role"
#~ msgstr "mauvais rôle GATT"
diff --git a/locale/it_IT.po b/locale/it_IT.po
index 97c15647d..575263b4b 100644
--- a/locale/it_IT.po
+++ b/locale/it_IT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2018-10-02 16:27+0200\n"
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
"Language-Team: \n"
@@ -23,6 +23,19 @@ msgid ""
"Code done running. Waiting for reload.\n"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " File \"%q\""
@@ -295,7 +308,7 @@ msgid "Array values should be single bytes."
msgstr "Valori di Array dovrebbero essere bytes singulari"
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -403,6 +416,10 @@ msgstr "non si può tirare quando nella modalita output"
msgid "Cannot get temperature"
msgstr "Impossibile leggere la temperatura. status: 0x%02x"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr "Impossibile dare in output entrambi i canal sullo stesso pin"
@@ -448,6 +465,16 @@ msgstr "Impossibile scrivere senza pin MOSI."
msgid "CharacteristicBuffer writing not provided"
msgstr "CharacteristicBuffer scritura non dato"
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr "Inizializzazione del pin di clock fallita."
@@ -510,7 +537,7 @@ msgid "Couldn't allocate second buffer"
msgstr "Impossibile allocare il secondo buffer"
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
@@ -630,28 +657,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "Impossibile leggere valore dell'attributo. status: 0x%02x"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
+msgstr ""
+
#: py/moduerrno.c
msgid "File exists"
msgstr "File esistente"
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
-msgstr "Cancellamento di Flash fallito"
-
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
-msgstr "Iniziamento di Cancellamento di Flash fallito, err 0x%04x"
-
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr "Impostazione di Flash fallito"
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr "Iniziamento di Impostazione di Flash dallito, err 0x%04x"
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -833,13 +850,6 @@ msgstr "Length deve essere un intero"
msgid "Length must be non-negative"
msgstr "Length deve essere non negativo"
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr "inizializzazione del pin MISO fallita."
@@ -854,12 +864,12 @@ msgid "Maximum x value when mirrored is %d"
msgstr "Valore massimo di x quando rispachiato è %d"
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
-msgstr "Errore fatale in MicroPython.\n"
+msgid "MicroPython fatal error."
+msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
msgid "Microphone startup delay must be in range 0.0 to 1.0"
@@ -932,6 +942,10 @@ msgstr "Non che spazio sul dispositivo"
msgid "No such file/directory"
msgstr "Nessun file/directory esistente"
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
#, fuzzy
@@ -1121,10 +1135,7 @@ msgstr "Metodi mancanti readinto() o write() allo stream."
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
#: supervisor/shared/safe_mode.c
@@ -1134,21 +1145,11 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-#, fuzzy
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-"La potenza del microcontrollore è calata. Assicurati che l'alimentazione sia "
-"attaccata correttamente\n"
-
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@@ -1182,10 +1183,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "Per uscire resettare la scheda senza "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr ""
@@ -1265,6 +1262,10 @@ msgstr "indentazione inaspettata"
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1336,12 +1337,8 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-#, fuzzy
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
-"Sei nella modalità sicura che significa che qualcosa di molto brutto è "
-"successo.\n"
#: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by "
@@ -2854,6 +2851,15 @@ msgstr "zero step"
#~ msgid "Failed to write gatts value, err 0x%04x"
#~ msgstr "Impossibile scrivere valore dell'attributo. status: 0x%02x"
+#~ msgid "Flash erase failed"
+#~ msgstr "Cancellamento di Flash fallito"
+
+#~ msgid "Flash erase failed to start, err 0x%04x"
+#~ msgstr "Iniziamento di Cancellamento di Flash fallito, err 0x%04x"
+
+#~ msgid "Flash write failed to start, err 0x%04x"
+#~ msgstr "Iniziamento di Impostazione di Flash dallito, err 0x%04x"
+
#~ msgid "GPIO16 does not support pull up."
#~ msgstr "GPIO16 non supporta pull-up"
@@ -2869,6 +2875,9 @@ msgstr "zero step"
#~ msgid "Maximum PWM frequency is %dhz."
#~ msgstr "Frequenza massima su PWM è %dhz"
+#~ msgid "MicroPython fatal error.\n"
+#~ msgstr "Errore fatale in MicroPython.\n"
+
#~ msgid "Minimum PWM frequency is 1hz."
#~ msgstr "Frequenza minima su PWM è 1hz"
@@ -2918,6 +2927,19 @@ msgstr "zero step"
#~ msgid "STA required"
#~ msgstr "STA richiesta"
+#, fuzzy
+#~ msgid ""
+#~ "The microcontroller's power dipped. Please make sure your power supply "
+#~ "provides\n"
+#~ "enough power for the whole circuit and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ msgstr ""
+#~ "La potenza del microcontrollore è calata. Assicurati che l'alimentazione "
+#~ "sia attaccata correttamente\n"
+
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "Per uscire resettare la scheda senza "
+
#~ msgid "UART(%d) does not exist"
#~ msgstr "UART(%d) non esistente"
@@ -2933,6 +2955,14 @@ msgstr "zero step"
#~ msgid "Use esptool to erase flash and re-upload Python instead"
#~ msgstr "Usa esptool per cancellare la flash e ricaricare Python invece"
+#, fuzzy
+#~ msgid ""
+#~ "You are running in safe mode which means something unanticipated "
+#~ "happened.\n"
+#~ msgstr ""
+#~ "Sei nella modalità sicura che significa che qualcosa di molto brutto è "
+#~ "successo.\n"
+
#~ msgid "[addrinfo error %d]"
#~ msgstr "[errore addrinfo %d]"
diff --git a/locale/ko.po b/locale/ko.po
index 5a6d9dc5a..51544984e 100644
--- a/locale/ko.po
+++ b/locale/ko.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2019-05-06 14:22-0700\n"
"Last-Translator: \n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -25,6 +25,19 @@ msgstr ""
"\n"
"실행 완료 코드. 재장전 을 기다리는 중입니다\n"
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " 파일 \"%q\""
@@ -294,7 +307,7 @@ msgid "Array values should be single bytes."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -399,6 +412,10 @@ msgstr ""
msgid "Cannot get temperature"
msgstr "온도 데이터를 수신 할 수 없습니다"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr ""
@@ -443,6 +460,16 @@ msgstr ""
msgid "CharacteristicBuffer writing not provided"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr ""
@@ -504,7 +531,7 @@ msgid "Couldn't allocate second buffer"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
@@ -620,28 +647,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr ""
-#: py/moduerrno.c
-msgid "File exists"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
+#: py/moduerrno.c
+msgid "File exists"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr ""
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -818,13 +835,6 @@ msgstr "길이는 정수(int) 여야합니다"
msgid "Length must be non-negative"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr ""
@@ -839,11 +849,11 @@ msgid "Maximum x value when mirrored is %d"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
+msgid "MicroPython fatal error."
msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
@@ -916,6 +926,10 @@ msgstr ""
msgid "No such file/directory"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "Not connected"
@@ -1090,10 +1104,7 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
#: supervisor/shared/safe_mode.c
@@ -1104,18 +1115,11 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
msgstr ""
@@ -1148,10 +1152,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr ""
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr ""
@@ -1231,6 +1231,10 @@ msgstr ""
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1301,8 +1305,7 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
#: supervisor/shared/safe_mode.c
diff --git a/locale/pl.po b/locale/pl.po
index e1e795398..c9c5bb36a 100644
--- a/locale/pl.po
+++ b/locale/pl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-02 14:06-0500\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2019-03-19 18:37-0700\n"
"Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n"
"Language-Team: pl\n"
@@ -24,6 +24,19 @@ msgstr ""
"\n"
"Kod wykonany. Czekam na przeładowanie.\n"
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " Plik \"%q\""
@@ -293,8 +306,8 @@ msgid "Array values should be single bytes."
msgstr "Wartości powinny być bajtami."
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
-msgstr "Próba alokacji pamięci na stercie gdy VM nie działa.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
+msgstr ""
#: main.c
msgid "Auto-reload is off.\n"
@@ -398,6 +411,10 @@ msgstr "Nie ma podciągnięcia w trybie wyjścia"
msgid "Cannot get temperature"
msgstr "Nie można odczytać temperatury"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr "Nie można mieć obu kanałów na tej samej nóżce"
@@ -442,6 +459,16 @@ msgstr "Nie można pisać bez nóżki MOSI."
msgid "CharacteristicBuffer writing not provided"
msgstr "Pisanie do CharacteristicBuffer niewspierane"
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr "Nie powiodło się ustawienie nóżki zegara"
@@ -503,8 +530,8 @@ msgid "Couldn't allocate second buffer"
msgstr "Nie udała się alokacja drugiego bufora"
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
-msgstr "Katastrofa w HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
+msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "DAC already in use"
@@ -619,28 +646,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "Nie udało się zwolnić blokady, błąd 0x%04x"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
+msgstr ""
+
#: py/moduerrno.c
msgid "File exists"
msgstr "Plik istnieje"
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
-msgstr "Nie udało się skasować flash"
-
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
-msgstr "Nie udało się rozpocząć kasowania flash, błąd 0x%04x"
-
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr "Zapis do flash nie powiódł się"
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr "Nie udało się rozpocząć zapisu do flash, błąd 0x%04x"
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr "Uzyskana częstotliwość jest niemożliwa. Spauzowano."
@@ -819,17 +836,6 @@ msgstr "Długość musi być całkowita"
msgid "Length must be non-negative"
msgstr "Długość musi być nieujemna"
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-"Ojej, wygląda na to, że CircuitPython natrafił na poważny problem!\n"
-"Prosimy o zgłoszenie błędu pod adresem https://github.com/adafruit/"
-"circuitpython/issues\n"
-" z zawartością dysku CIRCUITPY oraz tym komunikatem:\n"
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr "Nie powiodło się ustawienie nóżki MISO."
@@ -844,13 +850,12 @@ msgid "Maximum x value when mirrored is %d"
msgstr "Największa wartość x przy odwróceniu to %d"
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
-"Skok NLR MicroPythona nie powiódł się. Prawdopodobne skażenie pamięci.\n"
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
-msgstr "Krytyczny błąd MicroPythona.\n"
+msgid "MicroPython fatal error."
+msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
msgid "Microphone startup delay must be in range 0.0 to 1.0"
@@ -922,6 +927,10 @@ msgstr "Brak miejsca"
msgid "No such file/directory"
msgstr "Brak pliku/katalogu"
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "Not connected"
@@ -1096,16 +1105,8 @@ msgstr "Strumień nie ma metod readinto() lub write()."
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
-"Sterta CircuitPythona jest skażona z powodu zbyt małego stosu.\n"
-"Proszę zwiększyć limity wielkości stosu i nazisnąć reset (po odmontowaniu "
-"CIRCUITPY).\n"
-"Jeśli wielkość stosu nie była zmieniana, proszę zgłosić błąd zawierający "
-"zawartość CIRCUITPY tutaj:\n"
#: supervisor/shared/safe_mode.c
msgid ""
@@ -1115,22 +1116,10 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-"Zasilanie mikrokontrolera gwałtownie spadło. Proszę upewnić się,\n"
-"że zasilanie jest wystarczające dla całego obwodu in nacisnąć reset (po "
-"odmontowaniu CIRCUITPY).\n"
-
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-"Przycisk reset został wciśnięty podczas startu CircuitPythona. Wciśnij go "
-"ponownie aby wyjść z trybu bezpieczeństwa.\n"
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@@ -1164,10 +1153,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr "Szerokość bitmapy musi być wielokrotnością szerokości kafelka"
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "By wyjść, proszę zresetować płytkę bez "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr "Zbyt wiele kanałów."
@@ -1246,6 +1231,10 @@ msgstr "Nieoczekiwany typ nrfx uuid."
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1319,10 +1308,8 @@ msgstr ""
"Aby zobaczyć wbudowane moduły, wpisz `help(\"modules\")`.\n"
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
-"Uruchomiono w trybie bezpieczeństwa, gdyż nastąpiło coś nieoczekiwanego.\n"
#: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by "
@@ -2654,6 +2641,9 @@ msgstr "zerowy krok"
#~ msgid "Can not use dotstar with %s"
#~ msgstr "Nie można używać dotstar z %s"
+#~ msgid "Attempted heap allocation when MicroPython VM not running.\n"
+#~ msgstr "Próba alokacji pamięci na stercie gdy VM nie działa.\n"
+
#~ msgid "Can't add services in Central mode"
#~ msgstr "Nie można dodać serwisów w trybie Central"
@@ -2675,6 +2665,9 @@ msgstr "zerowy krok"
#~ msgid "Could not decode ble_uuid, err 0x%04x"
#~ msgstr "Nie można zdekodować ble_uuid, błąd 0x%04x"
+#~ msgid "Crash into the HardFault_Handler.\n"
+#~ msgstr "Katastrofa w HardFault_Handler.\n"
+
#~ msgid "Data too large for the advertisement packet"
#~ msgstr "Zbyt dużo danych pakietu rozgłoszeniowego"
@@ -2757,6 +2750,15 @@ msgstr "zerowy krok"
#~ msgid "Failed to write gatts value, err 0x%04x"
#~ msgstr "Nie udało się zapisać gatts, błąd 0x%04x"
+#~ msgid "Flash erase failed"
+#~ msgstr "Nie udało się skasować flash"
+
+#~ msgid "Flash erase failed to start, err 0x%04x"
+#~ msgstr "Nie udało się rozpocząć kasowania flash, błąd 0x%04x"
+
+#~ msgid "Flash write failed to start, err 0x%04x"
+#~ msgstr "Nie udało się rozpocząć zapisu do flash, błąd 0x%04x"
+
#~ msgid "Invalid bit clock pin"
#~ msgstr "Zła nóżka zegara"
@@ -2766,6 +2768,23 @@ msgstr "zerowy krok"
#~ msgid "Invalid data pin"
#~ msgstr "Zła nóżka danych"
+#~ msgid ""
+#~ "Looks like our core CircuitPython code crashed hard. Whoops!\n"
+#~ "Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
+#~ " with the contents of your CIRCUITPY drive and this message:\n"
+#~ msgstr ""
+#~ "Ojej, wygląda na to, że CircuitPython natrafił na poważny problem!\n"
+#~ "Prosimy o zgłoszenie błędu pod adresem https://github.com/adafruit/"
+#~ "circuitpython/issues\n"
+#~ " z zawartością dysku CIRCUITPY oraz tym komunikatem:\n"
+
+#~ msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+#~ msgstr ""
+#~ "Skok NLR MicroPythona nie powiódł się. Prawdopodobne skażenie pamięci.\n"
+
+#~ msgid "MicroPython fatal error.\n"
+#~ msgstr "Krytyczny błąd MicroPythona.\n"
+
#~ msgid "Must be a Group subclass."
#~ msgstr "Musi dziedziczyć z Group."
@@ -2780,15 +2799,54 @@ msgstr "zerowy krok"
#~ msgid "Soft device assert, id: 0x%08lX, pc: 0x%08lX"
#~ msgstr "Soft device assert, id: 0x%08lX, pc: 0x%08lX"
+#~ msgid ""
+#~ "The CircuitPython heap was corrupted because the stack was too small.\n"
+#~ "Please increase stack size limits and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ "If you didn't change the stack, then file an issue here with the contents "
+#~ "of your CIRCUITPY drive:\n"
+#~ msgstr ""
+#~ "Sterta CircuitPythona jest skażona z powodu zbyt małego stosu.\n"
+#~ "Proszę zwiększyć limity wielkości stosu i nazisnąć reset (po odmontowaniu "
+#~ "CIRCUITPY).\n"
+#~ "Jeśli wielkość stosu nie była zmieniana, proszę zgłosić błąd zawierający "
+#~ "zawartość CIRCUITPY tutaj:\n"
+
+#~ msgid ""
+#~ "The microcontroller's power dipped. Please make sure your power supply "
+#~ "provides\n"
+#~ "enough power for the whole circuit and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ msgstr ""
+#~ "Zasilanie mikrokontrolera gwałtownie spadło. Proszę upewnić się,\n"
+#~ "że zasilanie jest wystarczające dla całego obwodu in nacisnąć reset (po "
+#~ "odmontowaniu CIRCUITPY).\n"
+
+#~ msgid ""
+#~ "The reset button was pressed while booting CircuitPython. Press again to "
+#~ "exit safe mode.\n"
+#~ msgstr ""
+#~ "Przycisk reset został wciśnięty podczas startu CircuitPythona. Wciśnij go "
+#~ "ponownie aby wyjść z trybu bezpieczeństwa.\n"
+
#~ msgid "Tile indices must be 0 - 255"
#~ msgstr "Indeks kafelka musi być pomiędzy 0 a 255 włącznie"
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "By wyjść, proszę zresetować płytkę bez "
+
#~ msgid "UUID integer value not in range 0 to 0xffff"
#~ msgstr "Wartość UUID poza zakresem 0 do 0xffff"
#~ msgid "Voice index too high"
#~ msgstr "Zbyt wysoki indeks głosu"
+#~ msgid ""
+#~ "You are running in safe mode which means something unanticipated "
+#~ "happened.\n"
+#~ msgstr ""
+#~ "Uruchomiono w trybie bezpieczeństwa, gdyż nastąpiło coś nieoczekiwanego.\n"
+
#~ msgid "bad GATT role"
#~ msgstr "zła rola GATT"
diff --git a/locale/pt_BR.po b/locale/pt_BR.po
index ed6d01367..a2ccd2625 100644
--- a/locale/pt_BR.po
+++ b/locale/pt_BR.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2018-10-02 21:14-0000\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -23,6 +23,19 @@ msgid ""
"Code done running. Waiting for reload.\n"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " Arquivo \"%q\""
@@ -295,7 +308,7 @@ msgid "Array values should be single bytes."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
msgstr ""
#: main.c
@@ -400,6 +413,10 @@ msgstr ""
msgid "Cannot get temperature"
msgstr "Não pode obter a temperatura. status: 0x%02x"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr ""
@@ -444,6 +461,16 @@ msgstr "Não é possível ler sem um pino MOSI"
msgid "CharacteristicBuffer writing not provided"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr "Inicialização do pino de Clock falhou."
@@ -506,7 +533,7 @@ msgid "Couldn't allocate second buffer"
msgstr "Não pôde alocar segundo buffer"
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
@@ -625,28 +652,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "Não é possível ler o valor do atributo. status: 0x%02x"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
+msgstr ""
+
#: py/moduerrno.c
msgid "File exists"
msgstr "Arquivo já existe"
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
-msgstr ""
-
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr ""
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr ""
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr ""
@@ -826,13 +843,6 @@ msgstr "Tamanho deve ser um int"
msgid "Length must be non-negative"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr "Inicialização do pino MISO falhou"
@@ -847,11 +857,11 @@ msgid "Maximum x value when mirrored is %d"
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
+msgid "MicroPython fatal error."
msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
@@ -924,6 +934,10 @@ msgstr ""
msgid "No such file/directory"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
#, fuzzy
@@ -1103,10 +1117,7 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
#: supervisor/shared/safe_mode.c
@@ -1117,18 +1128,11 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
msgstr ""
@@ -1161,10 +1165,6 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width"
msgstr ""
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "Para sair, por favor, reinicie a placa sem "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr "Muitos canais na amostra."
@@ -1243,6 +1243,10 @@ msgstr ""
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1314,8 +1318,7 @@ msgid ""
msgstr ""
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
#: supervisor/shared/safe_mode.c
@@ -2826,6 +2829,9 @@ msgstr "passo zero"
#~ msgid "STA required"
#~ msgstr "STA requerido"
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "Para sair, por favor, reinicie a placa sem "
+
#~ msgid "UART(%d) does not exist"
#~ msgstr "UART(%d) não existe"
diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po
index bb214e3f8..0ab65599d 100644
--- a/locale/zh_Latn_pinyin.po
+++ b/locale/zh_Latn_pinyin.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-10 13:55-0600\n"
+"POT-Creation-Date: 2019-12-12 15:33-0800\n"
"PO-Revision-Date: 2019-04-13 10:10-0700\n"
"Last-Translator: hexthat\n"
"Language-Team: Chinese Hanyu Pinyin\n"
@@ -25,6 +25,19 @@ msgstr ""
"\n"
"Dàimǎ yǐ wánchéng yùnxíng. Zhèngzài děngdài chóngxīn jiāzài.\n"
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"Please file an issue with the contents of your CIRCUITPY drive at \n"
+"https://github.com/adafruit/circuitpython/issues\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"\n"
+"To exit, please reset the board without "
+msgstr ""
+
#: py/obj.c
msgid " File \"%q\""
msgstr " Wénjiàn \"%q\""
@@ -294,8 +307,8 @@ msgid "Array values should be single bytes."
msgstr "Shùzǔ zhí yīnggāi shì dāngè zì jié."
#: supervisor/shared/safe_mode.c
-msgid "Attempted heap allocation when MicroPython VM not running.\n"
-msgstr "MicroPython VM wèi yùnxíng shí chángshì duī fēnpèi.\n"
+msgid "Attempted heap allocation when MicroPython VM not running."
+msgstr ""
#: main.c
msgid "Auto-reload is off.\n"
@@ -399,6 +412,10 @@ msgstr "Zài shūchū móshì xià wúfǎ huòqǔ lādòng"
msgid "Cannot get temperature"
msgstr "Wúfǎ huòqǔ wēndù"
+#: shared-bindings/_bleio/Adapter.c
+msgid "Cannot have scan responses for extended, connectable advertisements."
+msgstr ""
+
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Cannot output both channels on the same pin"
msgstr "Wúfǎ shūchū tóng yīgè yǐn jiǎo shàng de liǎng gè píndào"
@@ -443,6 +460,16 @@ msgstr "Wúfǎ xiě rù MOSI de yǐn jiǎo."
msgid "CharacteristicBuffer writing not provided"
msgstr "Wèi tígōng zìfú huǎncún xiě rù"
+#: supervisor/shared/safe_mode.c
+msgid "CircuitPython core code crashed hard. Whoops!\n"
+msgstr ""
+
+#: supervisor/shared/safe_mode.c
+msgid ""
+"CircuitPython is in safe mode because you pressed the reset button during "
+"boot. Press again to exit safe mode.\n"
+msgstr ""
+
#: shared-module/bitbangio/SPI.c
msgid "Clock pin init failed."
msgstr "Shízhōng de yǐn jiǎo chūshǐhuà shībài."
@@ -504,8 +531,8 @@ msgid "Couldn't allocate second buffer"
msgstr "Wúfǎ fēnpèi dì èr gè huǎnchōng qū"
#: supervisor/shared/safe_mode.c
-msgid "Crash into the HardFault_Handler.\n"
-msgstr "Bēngkuì dào HardFault_Handler.\n"
+msgid "Crash into the HardFault_Handler."
+msgstr ""
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "DAC already in use"
@@ -620,28 +647,18 @@ msgstr ""
msgid "Failed to release mutex, err 0x%04x"
msgstr "Wúfǎ shìfàng mutex, err 0x%04x"
+#: supervisor/shared/safe_mode.c
+msgid "Failed to write internal flash."
+msgstr ""
+
#: py/moduerrno.c
msgid "File exists"
msgstr "Wénjiàn cúnzài"
-#: ports/nrf/peripherals/nrf/nvm.c
-msgid "Flash erase failed"
-msgstr "Flash cā chú shībài"
-
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash erase failed to start, err 0x%04x"
-msgstr "Flash cā chú shībài, err 0x%04x"
-
-#: ports/nrf/peripherals/nrf/nvm.c
+#: ports/nrf/common-hal/nvm/ByteArray.c
msgid "Flash write failed"
msgstr "Flash xiě rù shībài"
-#: ports/nrf/peripherals/nrf/nvm.c
-#, c-format
-msgid "Flash write failed to start, err 0x%04x"
-msgstr "Flash xiě rù shībài, err 0x%04x"
-
#: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
msgid "Frequency captured is above capability. Capture Paused."
msgstr "Pínlǜ bǔhuò gāo yú nénglì. Bǔhuò zàntíng."
@@ -820,17 +837,6 @@ msgstr "Chángdù bìxū shì yīgè zhěngshù"
msgid "Length must be non-negative"
msgstr "Chángdù bìxū shìfēi fùshù"
-#: supervisor/shared/safe_mode.c
-msgid ""
-"Looks like our core CircuitPython code crashed hard. Whoops!\n"
-"Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
-" with the contents of your CIRCUITPY drive and this message:\n"
-msgstr ""
-"Kàn lái wǒmen de héxīn CircuitPython dàimǎ bēngkuì dé hěn lìhài. Āi yōu!\n"
-"Qǐng zài https://Github.Com/adafruit/circuitpython/issues\n"
-"shàng tíjiāo yīgè wèntí, qízhōng bāohán nín de CIRCUITPY qūdòngqì de nèiróng "
-"hé cǐ xiāoxī:\n"
-
#: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed."
msgstr "MISO yǐn jiǎo chūshǐhuà shībài."
@@ -845,12 +851,12 @@ msgid "Maximum x value when mirrored is %d"
msgstr "Jìngxiàng shí de zuìdà X zhí wèi%d"
#: supervisor/shared/safe_mode.c
-msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
-msgstr "MicroPython NLR tiàoyuè shībài. Kěnéng nèicún fǔbài.\n"
+msgid "MicroPython NLR jump failed. Likely memory corruption."
+msgstr ""
#: supervisor/shared/safe_mode.c
-msgid "MicroPython fatal error.\n"
-msgstr "MicroPython zhìmìng cuòwù.\n"
+msgid "MicroPython fatal error."
+msgstr ""
#: shared-bindings/audiobusio/PDMIn.c
msgid "Microphone startup delay must be in range 0.0 to 1.0"
@@ -922,6 +928,10 @@ msgstr "Shèbèi shàng méiyǒu kònggé"
msgid "No such file/directory"
msgstr "Méiyǒu cǐ lèi wénjiàn/mùlù"
+#: supervisor/shared/safe_mode.c
+msgid "Nordic Soft Device failure assertion."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "Not connected"
@@ -1100,16 +1110,8 @@ msgstr "Liú quēshǎo readinto() huò write() fāngfǎ."
#: supervisor/shared/safe_mode.c
msgid ""
"The CircuitPython heap was corrupted because the stack was too small.\n"
-"Please increase stack size limits and press reset (after ejecting "
-"CIRCUITPY).\n"
-"If you didn't change the stack, then file an issue here with the contents of "
-"your CIRCUITPY drive:\n"
+"Please increase the stack size if you know how, or if not:"
msgstr ""
-"Yóuyú duīzhàn tài xiǎo, huánliú Python rè sǔnhuài.\n"
-"Qǐng zēngjiā duīzhàn chǐcùn xiànzhì, ránhòu chóngxīn shèzhì (zài dànchū "
-"CIRCUITPY).\n"
-"Rúguǒ nín méiyǒu gǎibiàn duīzhàn, qǐng zài cǐ chù tíchū yīgè wèntí, bìng zài "
-"rù nín de CIRCUITPY qūdòngqì:\n"
#: supervisor/shared/safe_mode.c
msgid ""
@@ -1121,22 +1123,10 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
-"The microcontroller's power dipped. Please make sure your power supply "
-"provides\n"
+"The microcontroller's power dipped. Make sure your power supply provides\n"
"enough power for the whole circuit and press reset (after ejecting "
"CIRCUITPY).\n"
msgstr ""
-"Wēi kòngzhì qì de diànliàng bèi chōng chū. Qǐng quèbǎo nín de diànyuán wèi\n"
-"zhěnggè diànlù tígōng zúgòu de diànyuán bìng àn xià fùwèi (zài dànchū "
-"CIRCUITPY hòu).\n"
-
-#: supervisor/shared/safe_mode.c
-msgid ""
-"The reset button was pressed while booting CircuitPython. Press again to "
-"exit safe mode.\n"
-msgstr ""
-"Qǐdòng CircuitPython shí, chóng zhì ànniǔ bèi àn xià. Zàicì àn xià yǐ tuìchū "
-"ānquán móshì\n"
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@@ -1170,10 +1160,6 @@ msgstr "Píng pū zhí chāochū fànwéi"
msgid "Tile width must exactly divide bitmap width"
msgstr "Píng pū kuāndù bìxū huàfēn wèi tú kuāndù"
-#: supervisor/shared/safe_mode.c
-msgid "To exit, please reset the board without "
-msgstr "Yào tuìchū, qǐng chóng zhì bǎnkuài ér bùyòng "
-
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
msgstr "Chōuyàng zhōng de píndào tài duō."
@@ -1252,6 +1238,10 @@ msgstr "Yìwài de nrfx uuid lèixíng"
msgid "Unknown gatt error: 0x%04x"
msgstr ""
+#: supervisor/shared/safe_mode.c
+msgid "Unknown reason."
+msgstr ""
+
#: ports/nrf/common-hal/_bleio/__init__.c
#, c-format
msgid "Unknown security error: 0x%04x"
@@ -1327,11 +1317,8 @@ msgstr ""
"Ruò yào liè chū nèizài de mókuài, qǐng qǐng zuò yǐxià `help(\"modules\")`.\n"
#: supervisor/shared/safe_mode.c
-msgid ""
-"You are running in safe mode which means something unanticipated happened.\n"
+msgid "You are in safe mode: something unanticipated happened.\n"
msgstr ""
-"Nǐ zhèngzài ānquán móshì xià yùnxíng, zhè yì wèi zhuó yìwài fāshēng de "
-"shìqíng.\n"
#: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by "
@@ -2667,6 +2654,9 @@ msgstr "líng bù"
#~ msgid "Can not use dotstar with %s"
#~ msgstr "Wúfǎ yǔ dotstar yīqǐ shǐyòng %s"
+#~ msgid "Attempted heap allocation when MicroPython VM not running.\n"
+#~ msgstr "MicroPython VM wèi yùnxíng shí chángshì duī fēnpèi.\n"
+
#~ msgid "Can't add services in Central mode"
#~ msgstr "Wúfǎ zài zhōngyāng móshì xià tiānjiā fúwù"
@@ -2691,6 +2681,9 @@ msgstr "líng bù"
#~ msgid "Could not decode ble_uuid, err 0x%04x"
#~ msgstr "Wúfǎ jiěmǎ kě dú_uuid, err 0x%04x"
+#~ msgid "Crash into the HardFault_Handler.\n"
+#~ msgstr "Bēngkuì dào HardFault_Handler.\n"
+
#~ msgid "Data too large for the advertisement packet"
#~ msgstr "Guǎnggào bāo de shùjù tài dà"
@@ -2796,6 +2789,15 @@ msgstr "líng bù"
#~ msgid "Failed to write gatts value, err 0x%04x"
#~ msgstr "Xiě rù gatts zhí,err 0x%04x shībài"
+#~ msgid "Flash erase failed"
+#~ msgstr "Flash cā chú shībài"
+
+#~ msgid "Flash erase failed to start, err 0x%04x"
+#~ msgstr "Flash cā chú shībài, err 0x%04x"
+
+#~ msgid "Flash write failed to start, err 0x%04x"
+#~ msgstr "Flash xiě rù shībài, err 0x%04x"
+
#~ msgid "Invalid bit clock pin"
#~ msgstr "Wúxiào de wèi shízhōng yǐn jiǎo"
@@ -2805,6 +2807,22 @@ msgstr "líng bù"
#~ msgid "Invalid data pin"
#~ msgstr "Wúxiào de shùjù yǐn jiǎo"
+#~ msgid ""
+#~ "Looks like our core CircuitPython code crashed hard. Whoops!\n"
+#~ "Please file an issue at https://github.com/adafruit/circuitpython/issues\n"
+#~ " with the contents of your CIRCUITPY drive and this message:\n"
+#~ msgstr ""
+#~ "Kàn lái wǒmen de héxīn CircuitPython dàimǎ bēngkuì dé hěn lìhài. Āi yōu!\n"
+#~ "Qǐng zài https://Github.Com/adafruit/circuitpython/issues\n"
+#~ "shàng tíjiāo yīgè wèntí, qízhōng bāohán nín de CIRCUITPY qūdòngqì de "
+#~ "nèiróng hé cǐ xiāoxī:\n"
+
+#~ msgid "MicroPython NLR jump failed. Likely memory corruption.\n"
+#~ msgstr "MicroPython NLR tiàoyuè shībài. Kěnéng nèicún fǔbài.\n"
+
+#~ msgid "MicroPython fatal error.\n"
+#~ msgstr "MicroPython zhìmìng cuòwù.\n"
+
#~ msgid "Must be a Group subclass."
#~ msgstr "Bìxū shì fēnzǔ zi lèi."
@@ -2832,15 +2850,56 @@ msgstr "líng bù"
#~ msgid "Soft device assert, id: 0x%08lX, pc: 0x%08lX"
#~ msgstr "Ruǎn shèbèi wéihù, id: 0X%08lX, pc: 0X%08lX"
+#~ msgid ""
+#~ "The CircuitPython heap was corrupted because the stack was too small.\n"
+#~ "Please increase stack size limits and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ "If you didn't change the stack, then file an issue here with the contents "
+#~ "of your CIRCUITPY drive:\n"
+#~ msgstr ""
+#~ "Yóuyú duīzhàn tài xiǎo, huánliú Python rè sǔnhuài.\n"
+#~ "Qǐng zēngjiā duīzhàn chǐcùn xiànzhì, ránhòu chóngxīn shèzhì (zài dànchū "
+#~ "CIRCUITPY).\n"
+#~ "Rúguǒ nín méiyǒu gǎibiàn duīzhàn, qǐng zài cǐ chù tíchū yīgè wèntí, bìng "
+#~ "zài rù nín de CIRCUITPY qūdòngqì:\n"
+
+#~ msgid ""
+#~ "The microcontroller's power dipped. Please make sure your power supply "
+#~ "provides\n"
+#~ "enough power for the whole circuit and press reset (after ejecting "
+#~ "CIRCUITPY).\n"
+#~ msgstr ""
+#~ "Wēi kòngzhì qì de diànliàng bèi chōng chū. Qǐng quèbǎo nín de diànyuán "
+#~ "wèi\n"
+#~ "zhěnggè diànlù tígōng zúgòu de diànyuán bìng àn xià fùwèi (zài dànchū "
+#~ "CIRCUITPY hòu).\n"
+
+#~ msgid ""
+#~ "The reset button was pressed while booting CircuitPython. Press again to "
+#~ "exit safe mode.\n"
+#~ msgstr ""
+#~ "Qǐdòng CircuitPython shí, chóng zhì ànniǔ bèi àn xià. Zàicì àn xià yǐ "
+#~ "tuìchū ānquán móshì\n"
+
#~ msgid "Tile indices must be 0 - 255"
#~ msgstr "Píng pū zhǐshù bìxū wèi 0 - 255"
+#~ msgid "To exit, please reset the board without "
+#~ msgstr "Yào tuìchū, qǐng chóng zhì bǎnkuài ér bùyòng "
+
#~ msgid "UUID integer value not in range 0 to 0xffff"
#~ msgstr "UUID zhěngshù zhí bùzài fànwéi 0 zhì 0xffff"
#~ msgid "Voice index too high"
#~ msgstr "Yǔyīn suǒyǐn tài gāo"
+#~ msgid ""
+#~ "You are running in safe mode which means something unanticipated "
+#~ "happened.\n"
+#~ msgstr ""
+#~ "Nǐ zhèngzài ānquán móshì xià yùnxíng, zhè yì wèi zhuó yìwài fāshēng de "
+#~ "shìqíng.\n"
+
#~ msgid "bad GATT role"
#~ msgstr "zǒng xiédìng de bùliáng juésè"
diff --git a/main.c b/main.c
index a6c7c0581..805888ddd 100755
--- a/main.c
+++ b/main.c
@@ -204,7 +204,7 @@ void cleanup_after_vm(supervisor_allocation* heap) {
bool run_code_py(safe_mode_t safe_mode) {
bool serial_connected_at_start = serial_connected();
- #ifdef CIRCUITPY_AUTORELOAD_DELAY_MS
+ #if CIRCUITPY_AUTORELOAD_DELAY_MS > 0
if (serial_connected_at_start) {
serial_write("\n");
if (autoreload_is_enabled()) {
@@ -264,9 +264,7 @@ bool run_code_py(safe_mode_t safe_mode) {
rgb_status_animation_t animation;
prep_rgb_status_animation(&result, found_main, safe_mode, &animation);
while (true) {
- #ifdef MICROPY_VM_HOOK_LOOP
- MICROPY_VM_HOOK_LOOP
- #endif
+ RUN_BACKGROUND_TASKS;
if (reload_requested) {
reload_requested = false;
return true;
diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile
index 5d47fd087..83fd879aa 100644
--- a/ports/atmel-samd/Makefile
+++ b/ports/atmel-samd/Makefile
@@ -157,7 +157,7 @@ endif
-LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
+LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -Wl,-nostdlib -Wl,-T,$(GENERATED_LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
LIBS := -lgcc -lc
# Use toolchain libm if we're not using our own.
@@ -301,12 +301,17 @@ SRC_SHARED_MODULE_EXPANDED = $(addprefix shared-bindings/, $(SRC_SHARED_MODULE))
$(addprefix shared-module/, $(SRC_SHARED_MODULE)) \
$(addprefix shared-module/, $(SRC_SHARED_MODULE_INTERNAL))
+# There may be duplicates between SRC_COMMON_HAL_EXPANDED and SRC_SHARED_MODULE_EXPANDED,
+# because a few modules have files both in common-hal/ and shared-modules/.
+# Doing a $(sort ...) removes duplicates as part of sorting.
+SRC_COMMON_HAL_SHARED_MODULE_EXPANDED = $(sort $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED))
+
+
SRC_S = supervisor/$(CHIP_FAMILY)_cpu.s
OBJ = $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_ASF:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_EXPANDED:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(SRC_SHARED_MODULE_EXPANDED:.c=.o))
+OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_SHARED_MODULE_EXPANDED:.c=.o))
ifeq ($(INTERNAL_LIBM),1)
OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
endif
@@ -319,10 +324,10 @@ SRC_QSTR_PREPROCESSOR += peripherals/samd/$(CHIP_FAMILY)/clocks.c
all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2
-$(BUILD)/firmware.elf: $(OBJ)
+$(BUILD)/firmware.elf: $(OBJ) $(GENERATED_LD_FILE)
$(STEPECHO) "LINK $@"
- $(Q)$(CC) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(LIBS) -Wl,--end-group
- $(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py $(LD_FILE)
+ $(Q)$(CC) -o $@ $(LDFLAGS) $(OBJ) -Wl,--start-group $(LIBS) -Wl,--end-group
+ $(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py $(GENERATED_LD_FILE)
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
$(STEPECHO) "Create $@"
diff --git a/ports/atmel-samd/bindings/samd/Clock.c b/ports/atmel-samd/bindings/samd/Clock.c
index be597c444..b88bb82e2 100644
--- a/ports/atmel-samd/bindings/samd/Clock.c
+++ b/ports/atmel-samd/bindings/samd/Clock.c
@@ -163,3 +163,263 @@ const mp_obj_type_t samd_clock_type = {
.print = samd_clock_print,
.locals_dict = (mp_obj_t)&samd_clock_locals_dict,
};
+
+#ifdef SAMD21
+
+#ifdef SAMD21_EXPOSE_ALL_CLOCKS
+CLOCK_SOURCE(XOSC);
+CLOCK_SOURCE(GCLKIN);
+CLOCK_SOURCE(GCLKGEN1);
+CLOCK_SOURCE(OSCULP32K);
+#endif
+CLOCK_SOURCE(OSC32K);
+CLOCK_SOURCE(XOSC32K);
+#ifdef SAMD21_EXPOSE_ALL_CLOCKS
+CLOCK_SOURCE(OSC8M);
+CLOCK_SOURCE(DFLL48M);
+CLOCK_SOURCE(DPLL96M);
+
+CLOCK_GCLK_(SYSCTRL, DFLL48);
+CLOCK_GCLK_(SYSCTRL, FDPLL);
+CLOCK_GCLK_(SYSCTRL, FDPLL32K);
+CLOCK_GCLK(WDT);
+#endif
+CLOCK_GCLK(RTC);
+#ifdef SAMD21_EXPOSE_ALL_CLOCKS
+CLOCK_GCLK(EIC);
+CLOCK_GCLK(USB);
+CLOCK_GCLK_(EVSYS, 0);
+CLOCK_GCLK_(EVSYS, 1);
+CLOCK_GCLK_(EVSYS, 2);
+CLOCK_GCLK_(EVSYS, 3);
+CLOCK_GCLK_(EVSYS, 4);
+CLOCK_GCLK_(EVSYS, 5);
+CLOCK_GCLK_(EVSYS, 6);
+CLOCK_GCLK_(EVSYS, 7);
+CLOCK_GCLK_(EVSYS, 8);
+CLOCK_GCLK_(EVSYS, 9);
+CLOCK_GCLK_(EVSYS, 10);
+CLOCK_GCLK_(EVSYS, 11);
+CLOCK(SERCOMx_SLOW, 1, 19);
+CLOCK_GCLK_(SERCOM0, CORE);
+CLOCK_GCLK_(SERCOM1, CORE);
+CLOCK_GCLK_(SERCOM2, CORE);
+CLOCK_GCLK_(SERCOM3, CORE);
+CLOCK_GCLK_(SERCOM4, CORE);
+CLOCK_GCLK_(SERCOM5, CORE);
+CLOCK(TCC0_TCC1, 1, 26);
+CLOCK(TCC2_TCC3, 1, 27);
+CLOCK(TC4_TC5, 1, 28);
+CLOCK(TC6_TC7, 1, 29);
+CLOCK_GCLK(ADC);
+CLOCK_GCLK_(AC, DIG);
+CLOCK_GCLK_(AC, ANA);
+CLOCK_GCLK(DAC);
+CLOCK_GCLK(PTC);
+CLOCK_GCLK_(I2S, 0);
+CLOCK_GCLK_(I2S, 1);
+
+CLOCK(SYSTICK, 2, 0);
+#endif
+
+STATIC const mp_rom_map_elem_t samd_clock_global_dict_table[] = {
+#ifdef SAMD21_EXPOSE_ALL_CLOCKS
+ CLOCK_ENTRY(XOSC),
+ CLOCK_ENTRY(GCLKIN),
+ CLOCK_ENTRY(GCLKGEN1),
+ CLOCK_ENTRY(OSCULP32K),
+#endif
+ CLOCK_ENTRY(OSC32K),
+ CLOCK_ENTRY(XOSC32K),
+#ifdef SAMD21_EXPOSE_ALL_CLOCKS
+ CLOCK_ENTRY(OSC8M),
+ CLOCK_ENTRY(DFLL48M),
+ CLOCK_ENTRY(DPLL96M),
+ CLOCK_ENTRY_(SYSCTRL, DFLL48),
+ CLOCK_ENTRY_(SYSCTRL, FDPLL),
+ CLOCK_ENTRY_(SYSCTRL, FDPLL32K),
+ CLOCK_ENTRY(WDT),
+#endif
+ CLOCK_ENTRY(RTC),
+#ifdef SAMD21_EXPOSE_ALL_CLOCKS
+ CLOCK_ENTRY(EIC),
+ CLOCK_ENTRY(USB),
+ CLOCK_ENTRY_(EVSYS, 0),
+ CLOCK_ENTRY_(EVSYS, 1),
+ CLOCK_ENTRY_(EVSYS, 2),
+ CLOCK_ENTRY_(EVSYS, 3),
+ CLOCK_ENTRY_(EVSYS, 4),
+ CLOCK_ENTRY_(EVSYS, 5),
+ CLOCK_ENTRY_(EVSYS, 6),
+ CLOCK_ENTRY_(EVSYS, 7),
+ CLOCK_ENTRY_(EVSYS, 8),
+ CLOCK_ENTRY_(EVSYS, 9),
+ CLOCK_ENTRY_(EVSYS, 10),
+ CLOCK_ENTRY_(EVSYS, 11),
+ CLOCK_ENTRY(SERCOMx_SLOW),
+ CLOCK_ENTRY_(SERCOM0, CORE),
+ CLOCK_ENTRY_(SERCOM1, CORE),
+ CLOCK_ENTRY_(SERCOM2, CORE),
+ CLOCK_ENTRY_(SERCOM3, CORE),
+ CLOCK_ENTRY_(SERCOM4, CORE),
+ CLOCK_ENTRY_(SERCOM5, CORE),
+ CLOCK_ENTRY(TCC0_TCC1),
+ CLOCK_ENTRY(TCC2_TCC3),
+ CLOCK_ENTRY(TC4_TC5),
+ CLOCK_ENTRY(TC6_TC7),
+ CLOCK_ENTRY(ADC),
+ CLOCK_ENTRY_(AC, DIG),
+ CLOCK_ENTRY_(AC, ANA),
+ CLOCK_ENTRY(DAC),
+ CLOCK_ENTRY(PTC),
+ CLOCK_ENTRY_(I2S, 0),
+ CLOCK_ENTRY_(I2S, 1),
+
+ CLOCK_ENTRY(SYSTICK),
+#endif
+};
+MP_DEFINE_CONST_DICT(samd_clock_globals, samd_clock_global_dict_table);
+
+#endif // SAMD21
+
+#ifdef SAMD51
+
+
+
+#include <instance/can0.h>
+#include <instance/can1.h>
+#include <instance/i2s.h>
+#include <instance/sdhc1.h>
+#include <instance/sercom6.h>
+#include <instance/sercom7.h>
+#include <instance/tcc4.h>
+
+CLOCK_SOURCE(XOSC0);
+CLOCK_SOURCE(XOSC1);
+CLOCK_SOURCE(GCLKIN);
+CLOCK_SOURCE(GCLKGEN1);
+CLOCK_SOURCE(OSCULP32K);
+CLOCK_SOURCE(XOSC32K);
+CLOCK_SOURCE(DFLL);
+CLOCK_SOURCE(DPLL0);
+CLOCK_SOURCE(DPLL1);
+
+CLOCK_GCLK_(OSCCTRL, DFLL48);
+CLOCK_GCLK_(OSCCTRL, FDPLL0);
+CLOCK_GCLK_(OSCCTRL, FDPLL1);
+CLOCK_GCLK_(OSCCTRL, FDPLL032K); // GCLK_OSCCTRL_FDPLL1_32K, GCLK_SDHC0_SLOW, GCLK_SDHC1_SLOW, GCLK_SERCOM[0..7]_SLOW
+CLOCK_GCLK(EIC);
+CLOCK_GCLK_(FREQM, MSR);
+// 6: GCLK_FREQM_REF
+CLOCK_GCLK_(SERCOM0, CORE);
+CLOCK_GCLK_(SERCOM1, CORE);
+CLOCK(TC0_TC1, 1, 9);
+CLOCK_GCLK(USB);
+CLOCK_GCLK_(EVSYS, 0);
+CLOCK_GCLK_(EVSYS, 1);
+CLOCK_GCLK_(EVSYS, 2);
+CLOCK_GCLK_(EVSYS, 3);
+CLOCK_GCLK_(EVSYS, 4);
+CLOCK_GCLK_(EVSYS, 5);
+CLOCK_GCLK_(EVSYS, 6);
+CLOCK_GCLK_(EVSYS, 7);
+CLOCK_GCLK_(EVSYS, 8);
+CLOCK_GCLK_(EVSYS, 9);
+CLOCK_GCLK_(EVSYS, 10);
+CLOCK_GCLK_(EVSYS, 11);
+CLOCK_GCLK_(SERCOM2, CORE);
+CLOCK_GCLK_(SERCOM3, CORE);
+CLOCK(TCC0_TCC1, 1, 25);
+CLOCK(TC2_TC3, 1, 26);
+CLOCK_GCLK(CAN0);
+CLOCK_GCLK(CAN1);
+CLOCK(TCC2_TCC3, 1, 29);
+CLOCK(TC4_TC5, 1, 30);
+// CLOCK_GCLK(PDEC);
+// CLOCK_GCLK(AC);
+// CLOCK_GCLK(CCL);
+CLOCK_GCLK_(SERCOM4, CORE);
+CLOCK_GCLK_(SERCOM5, CORE);
+CLOCK_GCLK_(SERCOM6, CORE);
+CLOCK_GCLK_(SERCOM7, CORE);
+CLOCK_GCLK(TCC4);
+CLOCK(TC6_TC7, 1, 39);
+CLOCK_GCLK(ADC0);
+CLOCK_GCLK(ADC1);
+CLOCK_GCLK(DAC);
+CLOCK_GCLK_(I2S, 0);
+CLOCK_GCLK_(I2S, 1);
+// CLOCK_GCLK(SDHC0);
+// CLOCK_GCLK(SDHC1);
+// 47: GCLK_CM4_TRACE
+
+CLOCK(SYSTICK, 2, 0);
+CLOCK(CPU, 2, 1);
+CLOCK(RTC, 2, 2);
+
+
+STATIC const mp_rom_map_elem_t samd_clock_global_dict_table[] = {
+ CLOCK_ENTRY(XOSC0),
+ CLOCK_ENTRY(XOSC1),
+ CLOCK_ENTRY(GCLKIN),
+ CLOCK_ENTRY(GCLKGEN1),
+ CLOCK_ENTRY(OSCULP32K),
+ CLOCK_ENTRY(XOSC32K),
+ CLOCK_ENTRY(DFLL),
+ CLOCK_ENTRY(DPLL0),
+ CLOCK_ENTRY(DPLL1),
+
+ CLOCK_ENTRY_(OSCCTRL, DFLL48),
+ CLOCK_ENTRY_(OSCCTRL, FDPLL0),
+ CLOCK_ENTRY_(OSCCTRL, FDPLL1),
+ CLOCK_ENTRY_(OSCCTRL, FDPLL032K),
+ CLOCK_ENTRY(EIC),
+ CLOCK_ENTRY_(FREQM, MSR),
+ CLOCK_ENTRY_(SERCOM0, CORE),
+ CLOCK_ENTRY_(SERCOM1, CORE),
+ CLOCK_ENTRY(TC0_TC1),
+ CLOCK_ENTRY(USB),
+ CLOCK_ENTRY_(EVSYS, 0),
+ CLOCK_ENTRY_(EVSYS, 1),
+ CLOCK_ENTRY_(EVSYS, 2),
+ CLOCK_ENTRY_(EVSYS, 3),
+ CLOCK_ENTRY_(EVSYS, 4),
+ CLOCK_ENTRY_(EVSYS, 5),
+ CLOCK_ENTRY_(EVSYS, 6),
+ CLOCK_ENTRY_(EVSYS, 7),
+ CLOCK_ENTRY_(EVSYS, 8),
+ CLOCK_ENTRY_(EVSYS, 9),
+ CLOCK_ENTRY_(EVSYS, 10),
+ CLOCK_ENTRY_(EVSYS, 11),
+ CLOCK_ENTRY_(SERCOM2, CORE),
+ CLOCK_ENTRY_(SERCOM3, CORE),
+ CLOCK_ENTRY(TCC0_TCC1),
+ CLOCK_ENTRY(TC2_TC3),
+ CLOCK_ENTRY(CAN0),
+ CLOCK_ENTRY(CAN1),
+ CLOCK_ENTRY(TCC2_TCC3),
+ CLOCK_ENTRY(TC4_TC5),
+ // CLOCK_ENTRY(PDEC),
+ // CLOCK_ENTRY(AC),
+ // CLOCK_ENTRY(CCL),
+ CLOCK_ENTRY_(SERCOM4, CORE),
+ CLOCK_ENTRY_(SERCOM5, CORE),
+ CLOCK_ENTRY_(SERCOM6, CORE),
+ CLOCK_ENTRY_(SERCOM7, CORE),
+ CLOCK_ENTRY(TCC4),
+ CLOCK_ENTRY(TC6_TC7),
+ CLOCK_ENTRY(ADC0),
+ CLOCK_ENTRY(ADC1),
+ CLOCK_ENTRY(DAC),
+ CLOCK_ENTRY_(I2S, 0),
+ CLOCK_ENTRY_(I2S, 1),
+ // CLOCK_ENTRY(SDHC0),
+ // CLOCK_ENTRY(SDHC1),
+
+ CLOCK_ENTRY(SYSTICK),
+ CLOCK_ENTRY(CPU),
+ CLOCK_ENTRY(RTC),
+};
+MP_DEFINE_CONST_DICT(samd_clock_globals, samd_clock_global_dict_table);
+
+#endif // SAMD51
diff --git a/ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.h b/ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.h
index a508d9191..226717c83 100644
--- a/ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.h
+++ b/ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.h
@@ -7,10 +7,6 @@
#define MICROPY_HW_LED_STATUS (&pin_PB23)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA09)
#define DEFAULT_I2C_BUS_SDA (&pin_PA08)
diff --git a/ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.mk b/ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.mk
index a543468e5..bd682ade0 100644
--- a/ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/arduino_mkr1300/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x2341
USB_PID = 0x8053
USB_PRODUCT = "Arduino MKR1300"
diff --git a/ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.h b/ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.h
index 02750e646..4871b1798 100644
--- a/ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.h
+++ b/ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.h
@@ -5,10 +5,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA09)
#define DEFAULT_I2C_BUS_SDA (&pin_PA08)
diff --git a/ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.mk b/ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.mk
index 5612eb88d..894b9b011 100644
--- a/ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/arduino_mkrzero/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x8050
USB_PRODUCT = "Arduino MKRZero"
diff --git a/ports/atmel-samd/boards/arduino_zero/mpconfigboard.h b/ports/atmel-samd/boards/arduino_zero/mpconfigboard.h
index ec201e6ef..bf2a68c57 100644
--- a/ports/atmel-samd/boards/arduino_zero/mpconfigboard.h
+++ b/ports/atmel-samd/boards/arduino_zero/mpconfigboard.h
@@ -10,10 +10,6 @@
#define MICROPY_PORT_B (PORT_PB03)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/arduino_zero/mpconfigboard.mk b/ports/atmel-samd/boards/arduino_zero/mpconfigboard.mk
index cbbf15a3e..f94ec13b7 100644
--- a/ports/atmel-samd/boards/arduino_zero/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/arduino_zero/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x2341
USB_PID = 0x824D
USB_PRODUCT = "Arduino Zero"
diff --git a/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.h b/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.h
index 561240c69..cbfb11d20 100644
--- a/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.h
+++ b/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.h
@@ -5,6 +5,7 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
+// No microcontroller.nvm
#define CIRCUITPY_INTERNAL_NVM_SIZE 0
#define DEFAULT_I2C_BUS_SCL (&pin_PA08)
@@ -17,8 +18,6 @@
#define DEFAULT_UART_BUS_RX (&pin_PA01)
#define DEFAULT_UART_BUS_TX (&pin_PA00)
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000)
-
#define IGNORE_PIN_PA03 1
#define IGNORE_PIN_PA12 1
#define IGNORE_PIN_PA13 1
diff --git a/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk b/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk
index 08e42aa4e..c3f0750a9 100644
--- a/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/bast_pro_mini_m0/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x1209
USB_PID = 0xBAB3
USB_PRODUCT = "Bast Pro Mini M0"
diff --git a/ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.h b/ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.h
index f4e40739b..d359687e1 100644
--- a/ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.h
+++ b/ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.h
@@ -3,7 +3,6 @@
#define CIRCUITPY_MCU_FAMILY samd51
-
#define MICROPY_HW_LED_STATUS (&pin_PA22)
// These are pins not to reset.
@@ -14,14 +13,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.mk b/ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.mk
index f390a8681..0ff6f58ea 100644
--- a/ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/capablerobot_usbhub/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x04D8
USB_PID = 0xEDB3
USB_PRODUCT = "Programmable USB Hub"
diff --git a/ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.h b/ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.h
index 7a32bf023..b92c2a65e 100644
--- a/ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.h
+++ b/ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.h
@@ -7,14 +7,10 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
#define DEFAULT_SPI_BUS_SCK (&pin_PA19)
#define DEFAULT_SPI_BUS_MOSI (&pin_PA18)
#define DEFAULT_SPI_BUS_MISO (&pin_PA22)
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define IGNORE_PIN_PA00 1
#define IGNORE_PIN_PA01 1
#define IGNORE_PIN_PA02 1
diff --git a/ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.mk b/ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.mk
index 2399aad5c..adae4beb2 100644
--- a/ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/catwan_usbstick/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x1209
USB_PID = 0xBAB2
USB_PRODUCT = "CatWAN USBStick"
diff --git a/ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h b/ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
index e6a7e0676..0ed5262ab 100644
--- a/ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
@@ -22,12 +22,6 @@
#define SPEAKER_ENABLE_PIN (&pin_PA30)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define CALIBRATE_CRYSTALLESS 1
// Explanation of how a user got into safe mode.
diff --git a/ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.mk b/ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.mk
index 3c43776f5..cdbdf44f8 100644
--- a/ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x239A
USB_PID = 0x8019
USB_PRODUCT = "CircuitPlayground Express"
diff --git a/ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h b/ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
index ca6f9b773..2db512929 100644
--- a/ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
+++ b/ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
@@ -22,12 +22,6 @@
#define SPEAKER_ENABLE_PIN (&pin_PA30)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define CALIBRATE_CRYSTALLESS 1
// Explanation of how a user got into safe mode.
diff --git a/ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.mk b/ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.mk
index f456515f9..a6ed28aa7 100644
--- a/ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x239A
USB_PID = 0x8019
USB_PRODUCT = "CircuitPlayground Express with Crickit libraries"
diff --git a/ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h b/ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h
index 333fc79f9..a1d5b0a67 100644
--- a/ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h
+++ b/ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h
@@ -22,12 +22,6 @@
#define SPEAKER_ENABLE_PIN (&pin_PA30)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define CALIBRATE_CRYSTALLESS 1
// Explanation of how a user got into safe mode.
diff --git a/ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.mk b/ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.mk
index f0c9c6b8c..b5a7c2424 100644
--- a/ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x239A
USB_PID = 0x8019
USB_PRODUCT = "CircuitPlayground Express with displayio"
diff --git a/ports/atmel-samd/boards/samd21x18-bootloader-crystalless.ld b/ports/atmel-samd/boards/common.template.ld
index 2adf4fa90..1054605c8 100644
--- a/ports/atmel-samd/boards/samd21x18-bootloader-crystalless.ld
+++ b/ports/atmel-samd/boards/common.template.ld
@@ -1,13 +1,16 @@
-/*
- GNU linker script for SAMD21x18 (256K flash, 32K RAM)
-*/
+/* Template for SAMD21/SAMD51 linking. dollar-sign-curly-bracket items are replaced with strings. */
/* Specify the memory areas */
MEMORY
{
- /* Leave 8KiB for the bootloader, 256b for persistent config (clock), 64k for the flash file system and 256b for the user config. */
- FLASH (rx) : ORIGIN = 0x00000000 + 8K, LENGTH = 256K - 8K - 256 - 64K - 256
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
+ FLASH_BOOTLOADER (rx): ORIGIN = ${BOOTLOADER_START_ADDR}, LENGTH = ${BOOTLOADER_SIZE}
+
+ FLASH_FIRMWARE (rx) : ORIGIN = ${CIRCUITPY_FIRMWARE_START_ADDR}, LENGTH = ${CIRCUITPY_FIRMWARE_SIZE}
+ FLASH_FILESYSTEM (r) : ORIGIN = ${CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR}, LENGTH = ${CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE}
+ FLASH_CONFIG (r) : ORIGIN = ${CIRCUITPY_INTERNAL_CONFIG_START_ADDR}, LENGTH = ${CIRCUITPY_INTERNAL_CONFIG_SIZE}
+ FLASH_NVM (r) : ORIGIN = ${CIRCUITPY_INTERNAL_NVM_START_ADDR}, LENGTH = ${CIRCUITPY_INTERNAL_NVM_SIZE}
+
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = ${RAM_SIZE}
}
/* top end of the stack */
@@ -30,7 +33,7 @@ SECTIONS
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
. = ALIGN(4);
- } >FLASH
+ } >FLASH_FIRMWARE
.ARM.exidx :
{
@@ -38,12 +41,12 @@ SECTIONS
*(.gnu.linkonce.armexidx.*)
_etext = .; /* define a global symbol at end of code */
_sidata = .; /* start of .data section */
- } > FLASH
+ } >FLASH_FIRMWARE
/* This is the initialized data section
The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
+ but the loader puts the initial values in the FLASH_FIRMWARE (inidata).
+ It is one task of the startup to copy the initial values from FLASH_FIRMWARE to RAM. */
.data : AT ( _sidata )
{
. = ALIGN(4);
@@ -72,11 +75,11 @@ SECTIONS
_ebss = .;
} >RAM
- /* this just checks there is enough RAM for a minimal stack */
+ /* this just checks there is enough RAM for the requested stack. */
.stack :
{
. = ALIGN(4);
- . = . + 2K; /* Reserve a minimum of 2K for the stack. */
+ . = . + ${CIRCUITPY_DEFAULT_STACK_SIZE};
. = ALIGN(4);
} >RAM
diff --git a/ports/atmel-samd/boards/cp32-m4/mpconfigboard.h b/ports/atmel-samd/boards/cp32-m4/mpconfigboard.h
index 9e329b3ed..8664a6a0e 100644
--- a/ports/atmel-samd/boards/cp32-m4/mpconfigboard.h
+++ b/ports/atmel-samd/boards/cp32-m4/mpconfigboard.h
@@ -12,14 +12,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PB09)
#define DEFAULT_I2C_BUS_SDA (&pin_PB08)
diff --git a/ports/atmel-samd/boards/cp32-m4/mpconfigboard.mk b/ports/atmel-samd/boards/cp32-m4/mpconfigboard.mk
index 5cd3fe70e..6eb76c182 100644
--- a/ports/atmel-samd/boards/cp32-m4/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/cp32-m4/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x20-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8021
USB_PRODUCT = "CP32-M4"
diff --git a/ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.h b/ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.h
index 99167d31b..f560cfa49 100644
--- a/ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.h
+++ b/ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.h
@@ -20,14 +20,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PB03)
diff --git a/ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.mk b/ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.mk
index 398c54a11..b1dad30eb 100644
--- a/ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/datalore_ip_m4/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x4097
USB_PID = 0x0001
USB_PRODUCT = "Datalore IP M4"
diff --git a/ports/atmel-samd/boards/datum_distance/mpconfigboard.h b/ports/atmel-samd/boards/datum_distance/mpconfigboard.h
index e02e43780..74706ba04 100644
--- a/ports/atmel-samd/boards/datum_distance/mpconfigboard.h
+++ b/ports/atmel-samd/boards/datum_distance/mpconfigboard.h
@@ -10,10 +10,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/datum_distance/mpconfigboard.mk b/ports/atmel-samd/boards/datum_distance/mpconfigboard.mk
index a7bb8293d..4f6c7ab82 100644
--- a/ports/atmel-samd/boards/datum_distance/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/datum_distance/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x04D8
USB_PID = 0xEE8C
USB_PRODUCT = "datum-Distance"
diff --git a/ports/atmel-samd/boards/datum_imu/mpconfigboard.h b/ports/atmel-samd/boards/datum_imu/mpconfigboard.h
index b87739dd0..3cc218f9e 100644
--- a/ports/atmel-samd/boards/datum_imu/mpconfigboard.h
+++ b/ports/atmel-samd/boards/datum_imu/mpconfigboard.h
@@ -10,10 +10,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/datum_imu/mpconfigboard.mk b/ports/atmel-samd/boards/datum_imu/mpconfigboard.mk
index 507c83b04..336a1b832 100644
--- a/ports/atmel-samd/boards/datum_imu/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/datum_imu/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x04D8
USB_PID = 0xEE8D
USB_PRODUCT = "datum-IMU"
diff --git a/ports/atmel-samd/boards/datum_light/mpconfigboard.h b/ports/atmel-samd/boards/datum_light/mpconfigboard.h
index 2a91c112d..33e80d06d 100644
--- a/ports/atmel-samd/boards/datum_light/mpconfigboard.h
+++ b/ports/atmel-samd/boards/datum_light/mpconfigboard.h
@@ -10,10 +10,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/datum_light/mpconfigboard.mk b/ports/atmel-samd/boards/datum_light/mpconfigboard.mk
index 4bb227ba4..7ec2efcf9 100644
--- a/ports/atmel-samd/boards/datum_light/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/datum_light/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x04D8
USB_PID = 0xEE8E
USB_PRODUCT = "datum-Light"
diff --git a/ports/atmel-samd/boards/datum_weather/mpconfigboard.h b/ports/atmel-samd/boards/datum_weather/mpconfigboard.h
index 45619197b..328a6860c 100644
--- a/ports/atmel-samd/boards/datum_weather/mpconfigboard.h
+++ b/ports/atmel-samd/boards/datum_weather/mpconfigboard.h
@@ -10,10 +10,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/datum_weather/mpconfigboard.mk b/ports/atmel-samd/boards/datum_weather/mpconfigboard.mk
index 411aee625..d3ec1b0fd 100644
--- a/ports/atmel-samd/boards/datum_weather/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/datum_weather/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x04D8
USB_PID = 0xEE8F
USB_PRODUCT = "datum-Weather"
diff --git a/ports/atmel-samd/boards/escornabot_makech/mpconfigboard.h b/ports/atmel-samd/boards/escornabot_makech/mpconfigboard.h
index f27cb533b..3a984188f 100644
--- a/ports/atmel-samd/boards/escornabot_makech/mpconfigboard.h
+++ b/ports/atmel-samd/boards/escornabot_makech/mpconfigboard.h
@@ -8,12 +8,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define CALIBRATE_CRYSTALLESS 1
// Explanation of how a user got into safe mode.
diff --git a/ports/atmel-samd/boards/escornabot_makech/mpconfigboard.mk b/ports/atmel-samd/boards/escornabot_makech/mpconfigboard.mk
index a2c182e68..dedd49ff7 100644
--- a/ports/atmel-samd/boards/escornabot_makech/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/escornabot_makech/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x1209
USB_PID = 0xBAB6
USB_PRODUCT = "Escornabot Makech"
diff --git a/ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.h b/ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.h
index eb1b90585..a0fde67ef 100644
--- a/ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.h
@@ -8,10 +8,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA22)
#define DEFAULT_I2C_BUS_SDA (&pin_PA23)
diff --git a/ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.mk
index a88dbd563..134abf723 100644
--- a/ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_m0_adalogger/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x8015
USB_PRODUCT = "Feather M0 Adalogger"
diff --git a/ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.h b/ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.h
index a16cee0b4..41a4bde21 100644
--- a/ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.h
@@ -8,10 +8,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.mk
index 076f1f8ff..364374350 100644
--- a/ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_m0_basic/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x8015
USB_PRODUCT = "Feather M0"
diff --git a/ports/atmel-samd/boards/feather_m0_express/mpconfigboard.h b/ports/atmel-samd/boards/feather_m0_express/mpconfigboard.h
index e6cd1c729..5421dc889 100644
--- a/ports/atmel-samd/boards/feather_m0_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_m0_express/mpconfigboard.h
@@ -15,13 +15,6 @@
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
diff --git a/ports/atmel-samd/boards/feather_m0_express/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_express/mpconfigboard.mk
index 5b89f1be4..cdee7b794 100644
--- a/ports/atmel-samd/boards/feather_m0_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_m0_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8023
USB_PRODUCT = "Feather M0 Express"
diff --git a/ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.h b/ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.h
index 77146889e..ee61e1d87 100644
--- a/ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.h
@@ -15,12 +15,6 @@
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
diff --git a/ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.mk
index 5793d82e5..d5e03b49d 100644
--- a/ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_m0_express_crickit/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8023
USB_PRODUCT = "Feather M0 Express"
diff --git a/ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.h b/ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.h
index 19a514758..2a319a412 100644
--- a/ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.h
@@ -8,10 +8,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.mk
index 83d794d04..40a461b27 100644
--- a/ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_m0_rfm69/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x8015
USB_PRODUCT = "Feather M0 RFM69"
diff --git a/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.h b/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.h
index d3db098e5..850033dbe 100644
--- a/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.h
@@ -8,10 +8,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk
index a84e14f55..736161047 100644
--- a/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x8015
USB_PRODUCT = "Feather M0 RFM9x"
diff --git a/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.h b/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.h
index 5ad265bf1..2d9f88e2e 100644
--- a/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.h
@@ -17,12 +17,6 @@
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk
index c5fef4373..cb13adb76 100644
--- a/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8023
USB_PRODUCT = "Feather M0 Supersized"
diff --git a/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.h b/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.h
index f65ea8db7..ba16d17ee 100644
--- a/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.h
@@ -16,14 +16,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define EXTERNAL_FLASH_QSPI_DUAL
#define BOARD_HAS_CRYSTAL 1
diff --git a/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk
index 4faa07387..38dd47758 100644
--- a/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8026
USB_PRODUCT = "Feather M4 Express"
diff --git a/ports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.h b/ports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.h
index 7df31f3a9..2afe35817 100755
--- a/ports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.h
+++ b/ports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.h
@@ -14,12 +14,6 @@
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PA13)
diff --git a/ports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.mk b/ports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.mk
index c4a3a5a19..05c305b1a 100755
--- a/ports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/feather_radiofruit_zigbee/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8023
USB_PRODUCT = "Feather RadioFruit Zigbee"
diff --git a/ports/atmel-samd/boards/gemma_m0/mpconfigboard.h b/ports/atmel-samd/boards/gemma_m0/mpconfigboard.h
index 5f09ab4d2..b6d8f946b 100644
--- a/ports/atmel-samd/boards/gemma_m0/mpconfigboard.h
+++ b/ports/atmel-samd/boards/gemma_m0/mpconfigboard.h
@@ -10,16 +10,12 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA05)
#define DEFAULT_I2C_BUS_SDA (&pin_PA04)
#define DEFAULT_UART_BUS_RX (&pin_PA05)
#define DEFAULT_UART_BUS_TX (&pin_PA04)
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define IGNORE_PIN_PA03 1
#define IGNORE_PIN_PA06 1
#define IGNORE_PIN_PA07 1
diff --git a/ports/atmel-samd/boards/gemma_m0/mpconfigboard.mk b/ports/atmel-samd/boards/gemma_m0/mpconfigboard.mk
index 6f44a22f8..d64938632 100644
--- a/ports/atmel-samd/boards/gemma_m0/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/gemma_m0/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x801D
USB_PRODUCT = "Gemma M0"
diff --git a/ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.h b/ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.h
index bc8f5a134..bab055014 100644
--- a/ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.h
@@ -21,14 +21,6 @@
#define MICROPY_PORT_C ( PORT_PC24 | PORT_PC30 | PORT_PC31 )
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PB21)
diff --git a/ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.mk
index 33542183b..ab81ec5a2 100644
--- a/ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/grandcentral_m4_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x20-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8032
USB_PRODUCT = "Grand Central M4 Express"
diff --git a/ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.h b/ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.h
index d5c274500..e5ac346da 100644
--- a/ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.h
@@ -16,12 +16,6 @@
#define MICROPY_PORT_B ( PORT_PB22 | PORT_PB23 )
#define MICROPY_PORT_C ( 0 )
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA17)
#define DEFAULT_I2C_BUS_SDA (&pin_PA16)
diff --git a/ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.mk b/ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.mk
index 988d10d1c..af4a5a293 100644
--- a/ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/hallowing_m0_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0xD1ED
USB_PRODUCT = "HalloWing M0 Express"
diff --git a/ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.h b/ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.h
index 654632db5..a0c726e72 100644
--- a/ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.h
@@ -16,14 +16,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA13)
#define DEFAULT_I2C_BUS_SDA (&pin_PA12)
diff --git a/ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.mk
index 375be283a..4bf155288 100644
--- a/ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/hallowing_m4_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x804A
USB_PRODUCT = "Hallowing M4 Express"
diff --git a/ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.h b/ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.h
index 6f9f661d9..db5e2a4df 100644
--- a/ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.h
@@ -16,12 +16,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.mk b/ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.mk
index 2b64e9027..4d516c75b 100644
--- a/ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/itsybitsy_m0_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x239A
USB_PID = 0x8012
USB_PRODUCT = "ItsyBitsy M0 Express"
@@ -21,4 +20,3 @@ CIRCUITPY_RTC = 0
CFLAGS_INLINE_LIMIT = 60
SUPEROPT_GC = 0
-
diff --git a/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.h b/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.h
index 9e4d4a10c..98920b54f 100644
--- a/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.h
@@ -17,14 +17,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA13)
#define DEFAULT_I2C_BUS_SDA (&pin_PA12)
diff --git a/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk
index dca4e3706..eb02d3c27 100644
--- a/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x802C
USB_PRODUCT = "ItsyBitsy M4 Express"
diff --git a/ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.h b/ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.h
index 194542b05..4d911ad64 100644
--- a/ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.h
+++ b/ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.h
@@ -10,12 +10,8 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define CALIBRATE_CRYSTALLESS 1
-
#define CIRCUITPY_INTERNAL_NVM_SIZE 0
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - 0x010000)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA17)
#define DEFAULT_I2C_BUS_SDA (&pin_PA16)
diff --git a/ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.mk b/ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.mk
index b9b88a368..df1a2d8eb 100644
--- a/ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/kicksat-sprite/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader.ld
USB_VID = 0x04D8
USB_PID = 0xED94
USB_PRODUCT = "kicksat-sprite"
@@ -7,7 +6,6 @@ USB_MANUFACTURER = "maholli"
CHIP_VARIANT = SAMD51G19A
CHIP_FAMILY = samd51
-QSPI_FLASH_FILESYSTEM = 0
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = MPZ
diff --git a/ports/atmel-samd/boards/meowmeow/mpconfigboard.h b/ports/atmel-samd/boards/meowmeow/mpconfigboard.h
index 1304b6dfb..80d367863 100644
--- a/ports/atmel-samd/boards/meowmeow/mpconfigboard.h
+++ b/ports/atmel-samd/boards/meowmeow/mpconfigboard.h
@@ -8,12 +8,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define CALIBRATE_CRYSTALLESS 1
// Explanation of how a user got into safe mode.
diff --git a/ports/atmel-samd/boards/meowmeow/mpconfigboard.mk b/ports/atmel-samd/boards/meowmeow/mpconfigboard.mk
index 894e19a6b..4b452ecbf 100644
--- a/ports/atmel-samd/boards/meowmeow/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/meowmeow/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x1209
USB_PID = 0xBAB1
USB_PRODUCT = "Meow Meow"
diff --git a/ports/atmel-samd/boards/metro_m0_express/mpconfigboard.h b/ports/atmel-samd/boards/metro_m0_express/mpconfigboard.h
index bfa254b95..04565feb4 100644
--- a/ports/atmel-samd/boards/metro_m0_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/metro_m0_express/mpconfigboard.h
@@ -21,12 +21,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
diff --git a/ports/atmel-samd/boards/metro_m0_express/mpconfigboard.mk b/ports/atmel-samd/boards/metro_m0_express/mpconfigboard.mk
index d3f35ba8b..b52b1343f 100644
--- a/ports/atmel-samd/boards/metro_m0_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/metro_m0_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8014
USB_PRODUCT = "Metro M0 Express"
diff --git a/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.h b/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.h
index e89b0322a..9fa401804 100644
--- a/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.h
+++ b/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.h
@@ -18,14 +18,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PB03)
diff --git a/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk b/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk
index bd837ebd6..4895cda77 100644
--- a/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8038
USB_PRODUCT = "Metro M4 Airlift Lite"
diff --git a/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.h b/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.h
index 2a8878874..7f8dbb1d2 100644
--- a/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.h
@@ -20,14 +20,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PB03)
diff --git a/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk
index e4d8b9428..62e6b7c72 100644
--- a/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8021
USB_PRODUCT = "Metro M4 Express"
diff --git a/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.h b/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.h
index c4563964f..08ab7e16b 100644
--- a/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.h
+++ b/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.h
@@ -17,14 +17,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA13)
#define DEFAULT_I2C_BUS_SDA (&pin_PA12)
diff --git a/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk b/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk
index eff8bfe08..ae2a1e973 100644
--- a/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x1209
USB_PID = 0x2017
USB_PRODUCT = "Mini SAM M4"
diff --git a/ports/atmel-samd/boards/monster_m4sk/mpconfigboard.h b/ports/atmel-samd/boards/monster_m4sk/mpconfigboard.h
index fc77520f5..42fb4548e 100644
--- a/ports/atmel-samd/boards/monster_m4sk/mpconfigboard.h
+++ b/ports/atmel-samd/boards/monster_m4sk/mpconfigboard.h
@@ -13,14 +13,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA01)
#define DEFAULT_I2C_BUS_SDA (&pin_PA00)
diff --git a/ports/atmel-samd/boards/monster_m4sk/mpconfigboard.mk b/ports/atmel-samd/boards/monster_m4sk/mpconfigboard.mk
index 84d1285c5..9b242a3ff 100644
--- a/ports/atmel-samd/boards/monster_m4sk/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/monster_m4sk/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8048
USB_PRODUCT = "Monster M4SK"
diff --git a/ports/atmel-samd/boards/pewpew10/mpconfigboard.h b/ports/atmel-samd/boards/pewpew10/mpconfigboard.h
index 445ccc435..6b3b4aa15 100644
--- a/ports/atmel-samd/boards/pewpew10/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pewpew10/mpconfigboard.h
@@ -5,11 +5,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
-
#define IGNORE_PIN_PB00 1
#define IGNORE_PIN_PB01 1
#define IGNORE_PIN_PB02 1
diff --git a/ports/atmel-samd/boards/pewpew10/mpconfigboard.mk b/ports/atmel-samd/boards/pewpew10/mpconfigboard.mk
index 8a1d6b16a..b3271d062 100644
--- a/ports/atmel-samd/boards/pewpew10/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pewpew10/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x801D
USB_PRODUCT = "PewPew 10.2"
diff --git a/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h b/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h
index 1b3035e12..60cd8d754 100644
--- a/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h
@@ -9,14 +9,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA01)
#define DEFAULT_I2C_BUS_SDA (&pin_PA00)
@@ -48,4 +40,3 @@
#define IGNORE_PIN_PB09 1
#define IGNORE_PIN_PB10 1
#define IGNORE_PIN_PB11 1
-
diff --git a/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.mk b/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.mk
index bc2ae609e..990b26ff3 100644
--- a/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader.ld
USB_VID = 0x1d50
USB_PID = 0x60e8
USB_PRODUCT = "PewPew M4"
diff --git a/ports/atmel-samd/boards/pirkey_m0/mpconfigboard.h b/ports/atmel-samd/boards/pirkey_m0/mpconfigboard.h
index 5a8eb9d14..866e21991 100644
--- a/ports/atmel-samd/boards/pirkey_m0/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pirkey_m0/mpconfigboard.h
@@ -8,10 +8,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define IGNORE_PIN_PA02 1
#define IGNORE_PIN_PA03 1
#define IGNORE_PIN_PA04 1
diff --git a/ports/atmel-samd/boards/pirkey_m0/mpconfigboard.mk b/ports/atmel-samd/boards/pirkey_m0/mpconfigboard.mk
index 8b82f0a09..e6c227b13 100644
--- a/ports/atmel-samd/boards/pirkey_m0/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pirkey_m0/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x8028
USB_PRODUCT = "pIRKey M0"
diff --git a/ports/atmel-samd/boards/pybadge/mpconfigboard.h b/ports/atmel-samd/boards/pybadge/mpconfigboard.h
index 36115bc87..435185322 100644
--- a/ports/atmel-samd/boards/pybadge/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pybadge/mpconfigboard.h
@@ -14,14 +14,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA13)
#define DEFAULT_I2C_BUS_SDA (&pin_PA12)
diff --git a/ports/atmel-samd/boards/pybadge/mpconfigboard.mk b/ports/atmel-samd/boards/pybadge/mpconfigboard.mk
index b5a240c66..7a213faf4 100644
--- a/ports/atmel-samd/boards/pybadge/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pybadge/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8034
USB_PRODUCT = "PyBadge"
diff --git a/ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.h b/ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.h
index ade74786d..229cfa335 100644
--- a/ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.h
@@ -14,14 +14,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA13)
#define DEFAULT_I2C_BUS_SDA (&pin_PA12)
diff --git a/ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.mk b/ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.mk
index e78789d74..5ae09294d 100644
--- a/ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pybadge_airlift/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8043
USB_PRODUCT = "PyBadge AirLift"
diff --git a/ports/atmel-samd/boards/pygamer/mpconfigboard.h b/ports/atmel-samd/boards/pygamer/mpconfigboard.h
index 4720b22eb..102c25956 100644
--- a/ports/atmel-samd/boards/pygamer/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pygamer/mpconfigboard.h
@@ -13,14 +13,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA13)
#define DEFAULT_I2C_BUS_SDA (&pin_PA12)
diff --git a/ports/atmel-samd/boards/pygamer/mpconfigboard.mk b/ports/atmel-samd/boards/pygamer/mpconfigboard.mk
index a455690e1..2db6786bf 100644
--- a/ports/atmel-samd/boards/pygamer/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pygamer/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x803E
USB_PRODUCT = "PyGamer"
diff --git a/ports/atmel-samd/boards/pygamer_advance/mpconfigboard.h b/ports/atmel-samd/boards/pygamer_advance/mpconfigboard.h
index c05aa4f06..fbe946b72 100644
--- a/ports/atmel-samd/boards/pygamer_advance/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pygamer_advance/mpconfigboard.h
@@ -13,14 +13,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA13)
#define DEFAULT_I2C_BUS_SDA (&pin_PA12)
diff --git a/ports/atmel-samd/boards/pygamer_advance/mpconfigboard.mk b/ports/atmel-samd/boards/pygamer_advance/mpconfigboard.mk
index b6bb26630..d001374a5 100644
--- a/ports/atmel-samd/boards/pygamer_advance/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pygamer_advance/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x803E
USB_PRODUCT = "PyGamer Advance"
diff --git a/ports/atmel-samd/boards/pyportal/mpconfigboard.h b/ports/atmel-samd/boards/pyportal/mpconfigboard.h
index 43346488b..2c4cf4f58 100644
--- a/ports/atmel-samd/boards/pyportal/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pyportal/mpconfigboard.h
@@ -17,14 +17,6 @@
#define MICROPY_PORT_C ( 0 )
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PB03)
#define DEFAULT_I2C_BUS_SDA (&pin_PB02)
diff --git a/ports/atmel-samd/boards/pyportal/mpconfigboard.mk b/ports/atmel-samd/boards/pyportal/mpconfigboard.mk
index f763c74fa..149141a4e 100644
--- a/ports/atmel-samd/boards/pyportal/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pyportal/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x20-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8036
USB_PRODUCT = "PyPortal"
diff --git a/ports/atmel-samd/boards/pyportal_titano/mpconfigboard.h b/ports/atmel-samd/boards/pyportal_titano/mpconfigboard.h
index f2af07371..4d58b8183 100644
--- a/ports/atmel-samd/boards/pyportal_titano/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pyportal_titano/mpconfigboard.h
@@ -15,14 +15,6 @@
#define MICROPY_PORT_C ( 0 )
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PB03)
#define DEFAULT_I2C_BUS_SDA (&pin_PB02)
diff --git a/ports/atmel-samd/boards/pyportal_titano/mpconfigboard.mk b/ports/atmel-samd/boards/pyportal_titano/mpconfigboard.mk
index 58b363779..dbc2d5ae9 100644
--- a/ports/atmel-samd/boards/pyportal_titano/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pyportal_titano/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x20-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8054
USB_PRODUCT = "PyPortal Titano"
diff --git a/ports/atmel-samd/boards/pyruler/mpconfigboard.h b/ports/atmel-samd/boards/pyruler/mpconfigboard.h
index 171873b47..4d0586d91 100644
--- a/ports/atmel-samd/boards/pyruler/mpconfigboard.h
+++ b/ports/atmel-samd/boards/pyruler/mpconfigboard.h
@@ -10,10 +10,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define IGNORE_PIN_PA12 1
#define IGNORE_PIN_PA13 1
#define IGNORE_PIN_PA16 1
diff --git a/ports/atmel-samd/boards/pyruler/mpconfigboard.mk b/ports/atmel-samd/boards/pyruler/mpconfigboard.mk
index 63d4cfed7..ca7ed4bdc 100644
--- a/ports/atmel-samd/boards/pyruler/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/pyruler/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x804C
USB_PRODUCT = "PyRuler"
diff --git a/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.h b/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.h
index 64040a658..c66873aeb 100644
--- a/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.h
+++ b/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.h
@@ -21,14 +21,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk b/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk
index f18a3dbf4..fd4f22230 100644
--- a/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x1209
USB_PID = 0x4D43
USB_PRODUCT = "Robo HAT MM1 M4"
diff --git a/ports/atmel-samd/boards/sam32/mpconfigboard.h b/ports/atmel-samd/boards/sam32/mpconfigboard.h
index f6d3fb6b4..bd9f5e398 100644
--- a/ports/atmel-samd/boards/sam32/mpconfigboard.h
+++ b/ports/atmel-samd/boards/sam32/mpconfigboard.h
@@ -9,14 +9,11 @@
#define MICROPY_PORT_A (PORT_PA24 | PORT_PA25)
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define MICROPY_PORT_D (0)
-
-#define AUTORESET_DELAY_MS 500
+#define MICROPY_PORT_D (0)
+// No microcontroller.nvm
#define CIRCUITPY_INTERNAL_NVM_SIZE 0
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - 0x010000)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_PA04)
diff --git a/ports/atmel-samd/boards/sam32/mpconfigboard.mk b/ports/atmel-samd/boards/sam32/mpconfigboard.mk
index 12884a9cc..0d6be6437 100644
--- a/ports/atmel-samd/boards/sam32/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/sam32/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x20-bootloader.ld
USB_VID = 0x04D8
USB_PID = 0xEDBE
USB_PRODUCT = "SAM32"
diff --git a/ports/atmel-samd/boards/samd21x18-bootloader-external-flash-crystalless.ld b/ports/atmel-samd/boards/samd21x18-bootloader-external-flash-crystalless.ld
deleted file mode 100644
index bddaae99d..000000000
--- a/ports/atmel-samd/boards/samd21x18-bootloader-external-flash-crystalless.ld
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- GNU linker script for SAMD21x18 (256K flash, 32K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 8KiB for the bootloader, 256b for internal config and 256b for user config. */
- FLASH (rx) : ORIGIN = 0x00000000 + 8K, LENGTH = 256K - 8K - 256 - 256
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
-}
-
-/* top end of the stack */
-/* stack must be double-word (8 byte) aligned */
-_estack = ORIGIN(RAM) + LENGTH(RAM) - 8;
-_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 2K; /* Reserve a minimum of 2K for the stack. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd21x18-bootloader-external-flash.ld b/ports/atmel-samd/boards/samd21x18-bootloader-external-flash.ld
deleted file mode 100644
index 4e677a079..000000000
--- a/ports/atmel-samd/boards/samd21x18-bootloader-external-flash.ld
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- GNU linker script for SAMD21x18 (256K flash, 32K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 8KiB for the bootloader and 256b for user config. */
- FLASH (rx) : ORIGIN = 0x00000000 + 8K, LENGTH = 256K - 8K - 256
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K /* 32 KiB RAM */
-}
-
-/* top end of the stack */
-/* stack must be double-word (8 byte) aligned */
-_estack = ORIGIN(RAM) + LENGTH(RAM) - 8;
-_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _etext )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 2K; /* Reserve a minimum of 2K for the stack. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd21x18-bootloader.ld b/ports/atmel-samd/boards/samd21x18-bootloader.ld
deleted file mode 100644
index 2ef09ba9a..000000000
--- a/ports/atmel-samd/boards/samd21x18-bootloader.ld
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- GNU linker script for SAMD21x18 (256K flash, 32K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 8KiB for the bootloader, 64k for the flash file system, and 256b
- for user config. */
- FLASH (rx) : ORIGIN = 0x00000000 + 8K, LENGTH = 256K - 8K - 64K - 256
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
-}
-
-/* top end of the stack */
-/* stack must be double-word (8 byte) aligned */
-_estack = ORIGIN(RAM) + LENGTH(RAM) - 8;
-_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialize the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialize the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 2K; /* Reserve a minimum of 2K for the stack. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd21x18-external-flash.ld b/ports/atmel-samd/boards/samd21x18-external-flash.ld
deleted file mode 100644
index a540bfde2..000000000
--- a/ports/atmel-samd/boards/samd21x18-external-flash.ld
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- GNU linker script for SAMD21x18 (256K flash, 32K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* 256 KiB but leave 256b for internal config and 256b for user config (protected eeprom) */
- FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K - 256 - 256
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
-}
-
-/* top end of the stack */
-_estack = ORIGIN(RAM) + LENGTH(RAM);
-_bootloader_dbl_tap = 0;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 2K; /* Reserve a minimum of 2K for the stack. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd21x18.ld b/ports/atmel-samd/boards/samd21x18.ld
deleted file mode 100644
index 139be86bb..000000000
--- a/ports/atmel-samd/boards/samd21x18.ld
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- GNU linker script for SAMD21x18 (256K flash, 32K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 256b for internal config, 64k for the flash file system and 256b for user config. */
- FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K - 256 - 64K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
-}
-
-/* top end of the stack */
-_estack = ORIGIN(RAM) + LENGTH(RAM);
-_bootloader_dbl_tap = 0;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
-/* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 2K; /* Reserve a minimum of 2K for the stack. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd51x18-bootloader-external-flash.ld b/ports/atmel-samd/boards/samd51x18-bootloader-external-flash.ld
deleted file mode 100644
index c0e812ce1..000000000
--- a/ports/atmel-samd/boards/samd51x18-bootloader-external-flash.ld
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- GNU linker script for SAMD51x18 (256K flash, 128K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 16KiB for the bootloader. 8K for user data*/
- FLASH (rx) : ORIGIN = 0x00000000 + 16K, LENGTH = 256K - 16K - 8K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
-}
-
-/* top end of the stack */
-/* stack must be double-word (8 byte) aligned */
-_estack = ORIGIN(RAM) + LENGTH(RAM) - 8;
-_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd51x19-bootloader-external-flash.ld b/ports/atmel-samd/boards/samd51x19-bootloader-external-flash.ld
deleted file mode 100644
index 253a764c9..000000000
--- a/ports/atmel-samd/boards/samd51x19-bootloader-external-flash.ld
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- GNU linker script for SAMD51x19 (512K flash, 192K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 16KiB for the bootloader. 8K for user data*/
- FLASH (rx) : ORIGIN = 0x00000000 + 16K, LENGTH = 512K - 16K - 8K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
-}
-
-/* top end of the stack */
-/* stack must be double-word (8 byte) aligned */
-_estack = ORIGIN(RAM) + LENGTH(RAM) - 8;
-_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd51x19-bootloader.ld b/ports/atmel-samd/boards/samd51x19-bootloader.ld
deleted file mode 100644
index 56786a37a..000000000
--- a/ports/atmel-samd/boards/samd51x19-bootloader.ld
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- GNU linker script for SAMD51x19 (512K flash, 192K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 16KiB for the bootloader, 256KiB for the internal file system, and 8KiB for user binary data. */
- FLASH (rx) : ORIGIN = 0x00000000 + 16K, LENGTH = 512K - 16K - 256K - 8K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K
-}
-
-/* top end of the stack */
-/* stack must be double-word (8 byte) aligned */
-_estack = ORIGIN(RAM) + LENGTH(RAM) - 8;
-_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd51x20-bootloader-external-flash.ld b/ports/atmel-samd/boards/samd51x20-bootloader-external-flash.ld
deleted file mode 100644
index 598915b1b..000000000
--- a/ports/atmel-samd/boards/samd51x20-bootloader-external-flash.ld
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- GNU linker script for SAMD51x20 (1MB flash, 256K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 16KiB for the bootloader. */
- FLASH (rx) : ORIGIN = 0x00000000 + 16K, LENGTH = 1M - 16K - 8K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 256K
-}
-
-/* top end of the stack */
-/* stack must be double-word (8 byte) aligned */
-_estack = ORIGIN(RAM) + LENGTH(RAM) - 8;
-_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd51x20-bootloader.ld b/ports/atmel-samd/boards/samd51x20-bootloader.ld
deleted file mode 100644
index 49d4d8791..000000000
--- a/ports/atmel-samd/boards/samd51x20-bootloader.ld
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- GNU linker script for SAMD51x20 (1MB flash, 256K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* Leave 16KiB for the bootloader, 512k for the filesystem and 8k for user config data. */
- FLASH (rx) : ORIGIN = 0x00000000 + 16K, LENGTH = 1M - 16K - 512K - 8K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 256K
-}
-
-/* top end of the stack */
-/* stack must be double-word (8 byte) aligned */
-_estack = ORIGIN(RAM) + LENGTH(RAM) - 8;
-_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd51x20-external-flash.ld b/ports/atmel-samd/boards/samd51x20-external-flash.ld
deleted file mode 100644
index d3ed90476..000000000
--- a/ports/atmel-samd/boards/samd51x20-external-flash.ld
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- GNU linker script for SAMD51x20 (1MB flash, 256K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1M - 8K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 256K
-}
-
-/* top end of the stack */
-_estack = ORIGIN(RAM) + LENGTH(RAM);
-_bootloader_dbl_tap = 0;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/samd51x20.ld b/ports/atmel-samd/boards/samd51x20.ld
deleted file mode 100644
index e203c5b7a..000000000
--- a/ports/atmel-samd/boards/samd51x20.ld
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- GNU linker script for SAMD51x20 (1MB flash, 256K RAM)
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- /* 1024 KiB minus 512KiB for the internal file system and 8KiB for the user nvm. */
- FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1M - 512K - 8K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 256K
-}
-
-/* top end of the stack */
-_estack = ORIGIN(RAM) + LENGTH(RAM);
-_bootloader_dbl_tap = 0;
-
-/* define output sections */
-SECTIONS
-{
- /* The program code and other data goes into FLASH */
- .text :
- {
- . = ALIGN(4);
- _sfixed = .;
- KEEP(*(.vectors)) /* isr vector table */
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- . = ALIGN(4);
- } >FLASH
-
- .ARM.exidx :
- {
- *(.ARM.exidx*)
- *(.gnu.linkonce.armexidx.*)
- _etext = .; /* define a global symbol at end of code */
- _sidata = .; /* start of .data section */
- } > FLASH
-
- /* This is the initialized data section
- The program executes knowing that the data is in the RAM
- but the loader puts the initial values in the FLASH (inidata).
- It is one task of the startup to copy the initial values from FLASH to RAM. */
- .data : AT ( _sidata )
- {
- . = ALIGN(4);
- _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
- *(.ramfunc)
- *(.ramfunc*)
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
-
- . = ALIGN(4);
- _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
- /* Uninitialized data section */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- _szero = .; /* define a global symbol at bss start; used by startup code */
- *(.bss)
- *(.bss*)
- *(COMMON)
-
- . = ALIGN(4);
- _ezero = .; /* define a global symbol at bss end; used by startup code */
- _ebss = .;
- } >RAM
-
- /* this just checks there is enough RAM for a minimal stack */
- .stack :
- {
- . = ALIGN(4);
- . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */
- . = ALIGN(4);
- } >RAM
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
-}
diff --git a/ports/atmel-samd/boards/serpente/mpconfigboard.h b/ports/atmel-samd/boards/serpente/mpconfigboard.h
index 034e1f6c3..515bc1441 100644
--- a/ports/atmel-samd/boards/serpente/mpconfigboard.h
+++ b/ports/atmel-samd/boards/serpente/mpconfigboard.h
@@ -13,12 +13,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA09)
#define DEFAULT_I2C_BUS_SDA (&pin_PA08)
@@ -36,4 +30,3 @@
// Not connected
#define IGNORE_PIN_PA13 1
#define IGNORE_PIN_PA28 1
-
diff --git a/ports/atmel-samd/boards/serpente/mpconfigboard.mk b/ports/atmel-samd/boards/serpente/mpconfigboard.mk
index 98e1e3729..a5adb17a1 100644
--- a/ports/atmel-samd/boards/serpente/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/serpente/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x239A
USB_PID = 0x8058
USB_PRODUCT = "Serpente"
diff --git a/ports/atmel-samd/boards/shirtty/mpconfigboard.h b/ports/atmel-samd/boards/shirtty/mpconfigboard.h
index d5ad8e4bd..796d23f86 100644
--- a/ports/atmel-samd/boards/shirtty/mpconfigboard.h
+++ b/ports/atmel-samd/boards/shirtty/mpconfigboard.h
@@ -7,10 +7,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
// #define IGNORE_PIN_PA00 1
// #define IGNORE_PIN_PA01 1
// #define IGNORE_PIN_PA02 1
diff --git a/ports/atmel-samd/boards/shirtty/mpconfigboard.mk b/ports/atmel-samd/boards/shirtty/mpconfigboard.mk
index 9f3710e5a..bc37b5943 100644
--- a/ports/atmel-samd/boards/shirtty/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/shirtty/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x806C
USB_PRODUCT = "shIRtty"
diff --git a/ports/atmel-samd/boards/snekboard/mpconfigboard.h b/ports/atmel-samd/boards/snekboard/mpconfigboard.h
index a349143d9..1c0804fe7 100644
--- a/ports/atmel-samd/boards/snekboard/mpconfigboard.h
+++ b/ports/atmel-samd/boards/snekboard/mpconfigboard.h
@@ -15,13 +15,6 @@
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 0
#define DEFAULT_I2C_BUS_SCL (&pin_PA08) /* ANALOG 5 */
diff --git a/ports/atmel-samd/boards/snekboard/mpconfigboard.mk b/ports/atmel-samd/boards/snekboard/mpconfigboard.mk
index db2e511ab..4faa041b1 100644
--- a/ports/atmel-samd/boards/snekboard/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/snekboard/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x804E
USB_PRODUCT = "snekboard"
diff --git a/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.h b/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.h
index 80cacfa9b..d184945f3 100755
--- a/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.h
+++ b/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.h
@@ -13,10 +13,6 @@
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
//I2C
diff --git a/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk b/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk
index 9d0ef1c04..6a2afc306 100755
--- a/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x1B4F
USB_PID = 0x0017
USB_PRODUCT = "LUMIDrive Board"
diff --git a/ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.h b/ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.h
index 96291ff3f..dcce97b8d 100644
--- a/ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.h
+++ b/ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.h
@@ -5,10 +5,6 @@
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define CALIBRATE_CRYSTALLESS 1
#define BOARD_HAS_CRYSTAL 0
diff --git a/ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.mk b/ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.mk
index 4497507ac..632cd095c 100644
--- a/ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/sparkfun_qwiic_micro_no_flash/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x1B4F
USB_PID = 0x8D24
USB_PRODUCT = "SparkFun Qwiic Micro"
diff --git a/ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.h b/ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.h
index d31826d26..c9b195eef 100644
--- a/ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.h
+++ b/ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.h
@@ -13,10 +13,6 @@
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define CALIBRATE_CRYSTALLESS 1
#define BOARD_HAS_CRYSTAL 0
diff --git a/ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.mk b/ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.mk
index 324da2e35..ccf5a4149 100644
--- a/ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/sparkfun_qwiic_micro_with_flash/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x1B4F
USB_PID = 0x8D24
USB_PRODUCT = "SparkFun Qwiic Micro"
diff --git a/ports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.h b/ports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.h
index cf7c3998b..ae272d502 100755
--- a/ports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.h
+++ b/ports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.h
@@ -15,20 +15,12 @@
#define SPI_FLASH_SCK_PIN &pin_PB23
#define SPI_FLASH_CS_PIN &pin_PA13
-#define MICROPY_PORT_A ( 0 )
+#define MICROPY_PORT_A ( 0 )
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
-
// I2C - also QWIIC
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.mk b/ports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.mk
index e80ef6277..f2d4eccad 100755
--- a/ports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/sparkfun_redboard_turbo/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x1B4F
USB_PID = 0x0015
USB_PRODUCT = "RedBoard Turbo Board"
diff --git a/ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.h b/ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.h
index a50c61cf2..13bb26380 100644
--- a/ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.h
+++ b/ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.h
@@ -5,10 +5,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.mk b/ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.mk
index c9d0baf11..0c33ef960 100644
--- a/ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/sparkfun_samd21_dev/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x1B4F
USB_PID = 0x8D23
USB_PRODUCT = "SparkFun SAMD21 Dev Breakout"
diff --git a/ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.h b/ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.h
index 6af7fa191..2cfdd9e73 100644
--- a/ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.h
+++ b/ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.h
@@ -5,10 +5,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
diff --git a/ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.mk b/ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.mk
index a6e216575..d09785fb8 100644
--- a/ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/sparkfun_samd21_mini/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x1B4F
USB_PID = 0x8D22
USB_PRODUCT = "SparkFun SAMD21 Mini Breakout"
diff --git a/ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.h b/ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.h
index 34ab8fcfb..02a6e7f7c 100644
--- a/ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.h
@@ -16,12 +16,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA05)
#define DEFAULT_I2C_BUS_SDA (&pin_PA04)
@@ -47,4 +41,3 @@
#define IGNORE_PIN_PA28 1
#define IGNORE_PIN_PA30 1
#define IGNORE_PIN_PA31 1
-
diff --git a/ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.mk b/ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.mk
index 6dc71978c..20feabd18 100644
--- a/ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/stringcar_m0_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x239A
USB_PID = 0x8060
USB_PRODUCT = "StringCar M0 Express"
@@ -22,4 +21,3 @@ CIRCUITPY_RTC = 0
CFLAGS_INLINE_LIMIT = 60
SUPEROPT_GC = 0
-
diff --git a/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h b/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h
index 8ca1df162..96b38810c 100644
--- a/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h
+++ b/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h
@@ -16,14 +16,6 @@
#define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0)
-#define AUTORESET_DELAY_MS 500
-
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PB08)
#define DEFAULT_I2C_BUS_SDA (&pin_PB09)
diff --git a/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk
index bb0b7d175..ee82b99c9 100644
--- a/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x19-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x8030
USB_PRODUCT = "Trellis M4 Express"
diff --git a/ports/atmel-samd/boards/trinket_m0/mpconfigboard.h b/ports/atmel-samd/boards/trinket_m0/mpconfigboard.h
index dd8bc03cc..69517534e 100644
--- a/ports/atmel-samd/boards/trinket_m0/mpconfigboard.h
+++ b/ports/atmel-samd/boards/trinket_m0/mpconfigboard.h
@@ -11,10 +11,6 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define IGNORE_PIN_PA03 1
#define IGNORE_PIN_PA04 1
#define IGNORE_PIN_PA11 1
diff --git a/ports/atmel-samd/boards/trinket_m0/mpconfigboard.mk b/ports/atmel-samd/boards/trinket_m0/mpconfigboard.mk
index af8b561a2..5c942901a 100644
--- a/ports/atmel-samd/boards/trinket_m0/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/trinket_m0/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x239A
USB_PID = 0x801F
USB_PRODUCT = "Trinket M0"
@@ -17,4 +16,3 @@ CFLAGS_BOARD = --param max-inline-insns-auto=15
ifeq ($(TRANSLATION), zh_Latn_pinyin)
CFLAGS_INLINE_LIMIT = 35
endif
-
diff --git a/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.h b/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.h
index 369d84b8b..af473b128 100644
--- a/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.h
+++ b/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.h
@@ -18,12 +18,6 @@
#define CALIBRATE_CRYSTALLESS 1
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PA09)
#define DEFAULT_I2C_BUS_SDA (&pin_PA08)
diff --git a/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk b/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk
index c20358e19..bd6c9c9ff 100644
--- a/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x239A
USB_PID = 0x801F
USB_PRODUCT="Trinket M0 Haxpress"
diff --git a/ports/atmel-samd/boards/uchip/mpconfigboard.h b/ports/atmel-samd/boards/uchip/mpconfigboard.h
index 6dcaf2965..1877a41ef 100644
--- a/ports/atmel-samd/boards/uchip/mpconfigboard.h
+++ b/ports/atmel-samd/boards/uchip/mpconfigboard.h
@@ -7,11 +7,9 @@
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
+// No microcontroller.nvm
#define CIRCUITPY_INTERNAL_NVM_SIZE 0
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000)
-
-
// USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1
diff --git a/ports/atmel-samd/boards/uchip/mpconfigboard.mk b/ports/atmel-samd/boards/uchip/mpconfigboard.mk
index 109492b76..950910e48 100644
--- a/ports/atmel-samd/boards/uchip/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/uchip/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader.ld
USB_VID = 0x04D8
USB_PID = 0xED5F
USB_PRODUCT = "uChip CircuitPython"
diff --git a/ports/atmel-samd/boards/ugame10/mpconfigboard.h b/ports/atmel-samd/boards/ugame10/mpconfigboard.h
index b5590d986..550172a51 100644
--- a/ports/atmel-samd/boards/ugame10/mpconfigboard.h
+++ b/ports/atmel-samd/boards/ugame10/mpconfigboard.h
@@ -13,12 +13,6 @@
#define CALIBRATE_CRYSTALLESS 1
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code.
-#define CIRCUITPY_INTERNAL_NVM_SIZE 256
-
-#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_SPI_BUS_SCK (&pin_PA07)
#define DEFAULT_SPI_BUS_MISO (&pin_PA11)
#define DEFAULT_SPI_BUS_MOSI (&pin_PA06)
diff --git a/ports/atmel-samd/boards/ugame10/mpconfigboard.mk b/ports/atmel-samd/boards/ugame10/mpconfigboard.mk
index f0310b4aa..1c4336907 100644
--- a/ports/atmel-samd/boards/ugame10/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/ugame10/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd21x18-bootloader-external-flash-crystalless.ld
USB_VID = 0x239A
USB_PID = 0x801F
USB_PRODUCT = "uGame10"
diff --git a/ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.h b/ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.h
index 7e01e228a..86b1ad8a0 100644
--- a/ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.h
+++ b/ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.h
@@ -16,12 +16,6 @@
#define AUTORESET_DELAY_MS 500
-// If you change this, then make sure to update the linker scripts as well to
-// make sure you don't overwrite code
-#define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_SPI_BUS_SCK (&pin_PA17)
diff --git a/ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.mk b/ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.mk
index 1f624df99..a0449d7bb 100644
--- a/ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.mk
+++ b/ports/atmel-samd/boards/winterbloom_sol/mpconfigboard.mk
@@ -1,4 +1,3 @@
-LD_FILE = boards/samd51x20-bootloader-external-flash.ld
# Adafruit
USB_VID = 0x239A
# Allocated for Winterbloom Sol
diff --git a/ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c b/ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
index d34049946..cbb067104 100644
--- a/ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
+++ b/ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c
@@ -213,17 +213,17 @@ void frequencyin_samd51_start_dpll() {
// Will also enable the Lock Bypass due to low-frequency sources causing DPLL unlocks
// as outlined in the Errata (1.12.1)
OSCCTRL->Dpll[1].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0) | OSCCTRL_DPLLRATIO_LDR(2999);
- if (board_has_crystal()) { // we can use XOSC32K directly as the source
- OSC32KCTRL->XOSC32K.bit.EN32K = 1;
- OSCCTRL->Dpll[1].DPLLCTRLB.reg = OSCCTRL_DPLLCTRLB_REFCLK(1) |
- OSCCTRL_DPLLCTRLB_LBYPASS;
- } else {
- // can't use OSCULP32K directly; need to setup a GCLK as a reference,
- // which must be done in samd/clocks.c to avoid waiting for sync
- return;
- //OSC32KCTRL->OSCULP32K.bit.EN32K = 1;
- //OSCCTRL->Dpll[1].DPLLCTRLB.reg = OSCCTRL_DPLLCTRLB_REFCLK(0);
- }
+#if BOARD_HAS_CRYSTAL
+ // we can use XOSC32K directly as the source
+ OSC32KCTRL->XOSC32K.bit.EN32K = 1;
+ OSCCTRL->Dpll[1].DPLLCTRLB.reg = OSCCTRL_DPLLCTRLB_REFCLK(1) | OSCCTRL_DPLLCTRLB_LBYPASS;
+#else
+ // can't use OSCULP32K directly; need to setup a GCLK as a reference,
+ // which must be done in samd/clocks.c to avoid waiting for sync
+ return;
+ //OSC32KCTRL->OSCULP32K.bit.EN32K = 1;
+ //OSCCTRL->Dpll[1].DPLLCTRLB.reg = OSCCTRL_DPLLCTRLB_REFCLK(0);
+#endif
OSCCTRL->Dpll[1].DPLLCTRLA.reg = OSCCTRL_DPLLCTRLA_ENABLE;
while (!(OSCCTRL->Dpll[1].DPLLSTATUS.bit.LOCK || OSCCTRL->Dpll[1].DPLLSTATUS.bit.CLKRDY)) {}
diff --git a/ports/atmel-samd/common-hal/microcontroller/__init__.c b/ports/atmel-samd/common-hal/microcontroller/__init__.c
index cb0751ace..09212a0d1 100644
--- a/ports/atmel-samd/common-hal/microcontroller/__init__.c
+++ b/ports/atmel-samd/common-hal/microcontroller/__init__.c
@@ -92,7 +92,6 @@ const mcu_processor_obj_t common_hal_mcu_processor_obj = {
},
};
-// NVM is only available on Express boards for now.
#if CIRCUITPY_INTERNAL_NVM_SIZE > 0
// The singleton nvm.ByteArray object.
const nvm_bytearray_obj_t common_hal_mcu_nvm_obj = {
@@ -100,7 +99,7 @@ const nvm_bytearray_obj_t common_hal_mcu_nvm_obj = {
.type = &nvm_bytearray_type,
},
.len = CIRCUITPY_INTERNAL_NVM_SIZE,
- .start_address = (uint8_t*) (FLASH_SIZE - CIRCUITPY_INTERNAL_NVM_SIZE)
+ .start_address = (uint8_t*) (CIRCUITPY_INTERNAL_NVM_START_ADDR)
};
#endif
diff --git a/ports/atmel-samd/ld_defines.c b/ports/atmel-samd/ld_defines.c
new file mode 100644
index 000000000..18f49d42c
--- /dev/null
+++ b/ports/atmel-samd/ld_defines.c
@@ -0,0 +1,30 @@
+// Fake source file used only to capture #define values for use in ld template files.
+#include "mpconfigport.h"
+
+// For each value needed in the LD file, create a C-like line:
+// /*NAME_OF_VALUE=*/ NAME_OF_VALUE;
+// The C preprocessor will replace NAME_OF_VALUE with the actual value.
+// This will be post-processed by tools/gen_ld_files.py to extract the name and value.
+
+// The next line is a marker to start looking for definitions. Lines above the next line are ignored.
+// START_LD_DEFINES
+
+/*RAM_SIZE=*/ RAM_SIZE;
+/*FLASH_SIZE=*/ FLASH_SIZE;
+
+/*BOOTLOADER_SIZE=*/ BOOTLOADER_SIZE;
+/*BOOTLOADER_START_ADDR=*/ BOOTLOADER_START_ADDR;
+
+/*CIRCUITPY_DEFAULT_STACK_SIZE=*/ CIRCUITPY_DEFAULT_STACK_SIZE;
+
+/*CIRCUITPY_FIRMWARE_START_ADDR=*/ CIRCUITPY_FIRMWARE_START_ADDR;
+/*CIRCUITPY_FIRMWARE_SIZE=*/ CIRCUITPY_FIRMWARE_SIZE;
+
+/*CIRCUITPY_INTERNAL_CONFIG_START_ADDR=*/ CIRCUITPY_INTERNAL_CONFIG_START_ADDR;
+/*CIRCUITPY_INTERNAL_CONFIG_SIZE=*/ CIRCUITPY_INTERNAL_CONFIG_SIZE;
+
+/*CIRCUITPY_INTERNAL_NVM_START_ADDR=*/ CIRCUITPY_INTERNAL_NVM_START_ADDR;
+/*CIRCUITPY_INTERNAL_NVM_SIZE=*/ CIRCUITPY_INTERNAL_NVM_SIZE;
+
+/*CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR=*/ CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR;
+/*CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE=*/ CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE;
diff --git a/ports/atmel-samd/mpconfigport.h b/ports/atmel-samd/mpconfigport.h
index 4e15a6c30..846e8db70 100644
--- a/ports/atmel-samd/mpconfigport.h
+++ b/ports/atmel-samd/mpconfigport.h
@@ -30,7 +30,15 @@
// Definitions for which SAMD chip we're using.
#include "include/sam.h"
+// Definitions that control circuitpy_mpconfig.h:
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
#ifdef SAMD21
+
+// HMCRAMC0_SIZE is defined in the ASF4 include files for each SAMD21 chip.
+#define RAM_SIZE HMCRAMC0_SIZE
+#define BOOTLOADER_SIZE (8*1024)
#define CIRCUITPY_MCU_FAMILY samd21
#define MICROPY_PY_SYS_PLATFORM "Atmel SAMD21"
#define SPI_FLASH_MAX_BAUDRATE 8000000
@@ -54,9 +62,15 @@
X(EISDIR) \
X(EINVAL) \
-#endif
+#endif // SAMD21
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef SAMD51
+
+// HSRAM_SIZE is defined in the ASF4 include files for each SAMD51 chip.
+#define RAM_SIZE HSRAM_SIZE
+#define BOOTLOADER_SIZE (16*1024)
#define CIRCUITPY_MCU_FAMILY samd51
#define MICROPY_PY_SYS_PLATFORM "MicroChip SAMD51"
#define SPI_FLASH_MAX_BAUDRATE 24000000
@@ -65,10 +79,132 @@
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1)
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1)
#define MICROPY_PY_FUNCTION_ATTRS (1)
+// MICROPY_PY_UJSON depends on MICROPY_PY_IO
#define MICROPY_PY_IO (1)
#define MICROPY_PY_UJSON (1)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
// MICROPY_PY_UERRNO_LIST - Use the default
+
+#endif // SAMD51
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// This also includes mpconfigboard.h.
+#include "py/circuitpy_mpconfig.h"
+
+// Definitions that can be overridden by mpconfigboard.h:
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifdef SAMD21
+
+#if INTERNAL_FLASH_FILESYSTEM
+#define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (64*1024)
+#else
+#define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (0)
+#endif
+
+#ifndef CIRCUITPY_INTERNAL_NVM_SIZE
+#define CIRCUITPY_INTERNAL_NVM_SIZE (256)
+#endif
+
+#endif // SAMD21
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifdef SAMD51
+
+#ifndef CIRCUITPY_INTERNAL_NVM_SIZE
+#define CIRCUITPY_INTERNAL_NVM_SIZE (8192)
+#endif
+
+// If CIRCUITPY is internal, use half of flash for it.
+#if INTERNAL_FLASH_FILESYSTEM
+ #ifndef CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE
+ #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (FLASH_SIZE/2)
+ #endif
+#else
+ #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (0)
+#endif
+
+#endif // SAMD51
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef CALIBRATE_CRYSTALLESS
+#define CALIBRATE_CRYSTALLESS (0)
+#endif
+
+#ifndef BOARD_HAS_CRYSTAL
+#define BOARD_HAS_CRYSTAL (0)
+#endif
+
+// if CALIBRATE_CRYSTALLESS is requested, make room for storing
+// calibration data generated from external USB.
+#ifndef CIRCUITPY_INTERNAL_CONFIG_SIZE
+ #if CALIBRATE_CRYSTALLESS
+ #define CIRCUITPY_INTERNAL_CONFIG_SIZE (NVMCTRL_ROW_SIZE) // 256
+ #else
+ #define CIRCUITPY_INTERNAL_CONFIG_SIZE (0)
+ #endif
+#endif
+
+// Flash layout, starting at 0x00000000
+//
+// - bootloader (8 or 16kB)
+// - firmware
+// - internal CIRCUITPY flash filesystem (optional)
+// - internal config, used to store crystalless clock calibration info (optional)
+// - microntroller.nvm (optional)
+
+// Define these regions starting up from the bottom of flash:
+
+#define BOOTLOADER_START_ADDR (0x00000000)
+
+#define CIRCUITPY_FIRMWARE_START_ADDR (BOOTLOADER_START_ADDR + BOOTLOADER_SIZE)
+
+// Define these regions start down from the top of flash:
+
+#define CIRCUITPY_INTERNAL_NVM_START_ADDR \
+ (FLASH_SIZE - CIRCUITPY_INTERNAL_NVM_SIZE)
+
+#define CIRCUITPY_INTERNAL_CONFIG_START_ADDR \
+ (CIRCUITPY_INTERNAL_NVM_START_ADDR - CIRCUITPY_INTERNAL_CONFIG_SIZE)
+
+#define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR \
+ (CIRCUITPY_INTERNAL_CONFIG_START_ADDR - CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE)
+
+// The firmware space is the space left over between the fixed lower and upper regions.
+#define CIRCUITPY_FIRMWARE_SIZE \
+ (CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR - CIRCUITPY_FIRMWARE_START_ADDR)
+
+#if BOOTLOADER_START_ADDR % FLASH_PAGE_SIZE != 0
+#error BOOTLOADER_START_ADDR must be on a flash page boundary.
+#endif
+
+#if CIRCUITPY_INTERNAL_NVM_START_ADDR % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_NVM_START_ADDR must be on a flash page boundary.
+#endif
+#if CIRCUITPY_INTERNAL_NVM_SIZE % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_NVM_SIZE must be a multiple of FLASH_PAGE_SIZE.
+#endif
+
+#if CIRCUITPY_INTERNAL_CONFIG_START_ADDR % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_CONFIG_SIZE must be on a flash page boundary.
+#endif
+#if CIRCUITPY_INTERNAL_CONFIG_SIZE % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_CONFIG_SIZE must be a multiple of FLASH_PAGE_SIZE.
+#endif
+
+#if CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE must be on a flash page boundary.
+#endif
+#if CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE must be a multiple of FLASH_PAGE_SIZE.
+#endif
+
+#if CIRCUITPY_FIRMWARE_SIZE < 0
+#error No space left in flash for firmware after specifying other regions!
#endif
// Turning off audioio, audiobusio, and touchio as necessary
@@ -76,8 +212,6 @@
#include "peripherals/samd/dma.h"
-#include "py/circuitpy_mpconfig.h"
-
#define MICROPY_PORT_ROOT_POINTERS \
CIRCUITPY_COMMON_ROOT_POINTERS \
mp_obj_t playing_audio[AUDIO_DMA_CHANNEL_COUNT];
diff --git a/ports/atmel-samd/mpconfigport.mk b/ports/atmel-samd/mpconfigport.mk
index 58bf07247..354745a2c 100644
--- a/ports/atmel-samd/mpconfigport.mk
+++ b/ports/atmel-samd/mpconfigport.mk
@@ -1,3 +1,7 @@
+# All linking can be done with this common templated linker script, which has
+# parameters that vary based on chip and/or board.
+LD_TEMPLATE_FILE = boards/common.template.ld
+
# Define an equivalent for MICROPY_LONGINT_IMPL, to pass to $(MPY-TOOL) in py/mkrules.mk
# $(MPY-TOOL) needs to know what kind of longint to use (if any) to freeze long integers.
# This should correspond to the MICROPY_LONGINT_IMPL definition in mpconfigport.h.
@@ -35,7 +39,8 @@ endif
# SAMD21 needs separate endpoint pairs for MSC BULK IN and BULK OUT, otherwise it's erratic.
USB_MSC_EP_NUM_OUT = 1
-endif
+
+endif # samd21
# Put samd51-only choices here.
ifeq ($(CHIP_FAMILY),samd51)
@@ -57,7 +62,7 @@ ifndef CIRCUITPY_SAMD
CIRCUITPY_SAMD = 1
endif
-endif
+endif # samd51
INTERNAL_LIBM = 1
diff --git a/ports/atmel-samd/peripherals b/ports/atmel-samd/peripherals
-Subproject 2ba5b20ba725e1c91c77875fba3a5e22059cdb9
+Subproject 4c0deecf889da0074c1dbc9a5e2d24cb7c7a31c
diff --git a/ports/atmel-samd/supervisor/internal_flash.c b/ports/atmel-samd/supervisor/internal_flash.c
index 6dd5ac0a7..a8ff5adfa 100644
--- a/ports/atmel-samd/supervisor/internal_flash.c
+++ b/ports/atmel-samd/supervisor/internal_flash.c
@@ -86,7 +86,7 @@ void flash_flush(void) {
static int32_t convert_block_to_flash_addr(uint32_t block) {
if (0 <= block && block < INTERNAL_FLASH_PART1_NUM_BLOCKS) {
// a block in partition 1
- return INTERNAL_FLASH_MEM_SEG1_START_ADDR + block * FILESYSTEM_BLOCK_SIZE;
+ return CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR + block * FILESYSTEM_BLOCK_SIZE;
}
// bad block
return -1;
diff --git a/ports/atmel-samd/supervisor/internal_flash.h b/ports/atmel-samd/supervisor/internal_flash.h
index 0939a3454..df8b495cc 100644
--- a/ports/atmel-samd/supervisor/internal_flash.h
+++ b/ports/atmel-samd/supervisor/internal_flash.h
@@ -32,16 +32,7 @@
#include "sam.h"
-#ifdef SAMD51
-#define TOTAL_INTERNAL_FLASH_SIZE (FLASH_SIZE / 2)
-#endif
-
-#ifdef SAMD21
-#define TOTAL_INTERNAL_FLASH_SIZE 0x010000
-#endif
-
-#define INTERNAL_FLASH_MEM_SEG1_START_ADDR (FLASH_SIZE - TOTAL_INTERNAL_FLASH_SIZE - CIRCUITPY_INTERNAL_NVM_SIZE)
-#define INTERNAL_FLASH_PART1_NUM_BLOCKS (TOTAL_INTERNAL_FLASH_SIZE / FILESYSTEM_BLOCK_SIZE)
+#define INTERNAL_FLASH_PART1_NUM_BLOCKS (CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE / FILESYSTEM_BLOCK_SIZE)
#define INTERNAL_FLASH_SYSTICK_MASK (0x1ff) // 512ms
#define INTERNAL_FLASH_IDLE_TICK(tick) (((tick) & INTERNAL_FLASH_SYSTICK_MASK) == 2)
diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c
index e962281c1..5662b159b 100644
--- a/ports/atmel-samd/supervisor/port.c
+++ b/ports/atmel-samd/supervisor/port.c
@@ -24,12 +24,16 @@
* THE SOFTWARE.
*/
+#include <string.h>
+#include <stdlib.h>
+
#include "boards/board.h"
#include "supervisor/port.h"
// ASF 4
#include "atmel_start_pins.h"
#include "hal/include/hal_delay.h"
+#include "hal/include/hal_flash.h"
#include "hal/include/hal_gpio.h"
#include "hal/include/hal_init.h"
#include "hpl/gclk/hpl_gclk_base.h"
@@ -94,6 +98,40 @@ extern volatile bool mp_msc_enabled;
__attribute__((__aligned__(TRACE_BUFFER_SIZE_BYTES))) uint32_t mtb[TRACE_BUFFER_SIZE] = {0};
#endif
+#if CALIBRATE_CRYSTALLESS
+static void save_usb_clock_calibration(void) {
+ // If we are on USB lets double check our fine calibration for the clock and
+ // save the new value if its different enough.
+ SYSCTRL->DFLLSYNC.bit.READREQ = 1;
+ uint16_t saved_calibration = 0x1ff;
+ if (strcmp((char*) CIRCUITPY_INTERNAL_CONFIG_START_ADDR, "CIRCUITPYTHON1") == 0) {
+ saved_calibration = ((uint16_t *) CIRCUITPY_INTERNAL_CONFIG_START_ADDR)[8];
+ }
+ while (SYSCTRL->PCLKSR.bit.DFLLRDY == 0) {
+ // TODO(tannewt): Run the mass storage stuff if this takes a while.
+ }
+ int16_t current_calibration = SYSCTRL->DFLLVAL.bit.FINE;
+ if (abs(current_calibration - saved_calibration) > 10) {
+ // Copy the full internal config page to memory.
+ uint8_t page_buffer[NVMCTRL_ROW_SIZE];
+ memcpy(page_buffer, (uint8_t*) CIRCUITPY_INTERNAL_CONFIG_START_ADDR, NVMCTRL_ROW_SIZE);
+
+ // Modify it.
+ memcpy(page_buffer, "CIRCUITPYTHON1", 15);
+ // First 16 bytes (0-15) are ID. Little endian!
+ page_buffer[16] = current_calibration & 0xff;
+ page_buffer[17] = current_calibration >> 8;
+
+ // Write it back.
+ // We don't use features that use any advanced NVMCTRL features so we can fake the descriptor
+ // whenever we need it instead of storing it long term.
+ struct flash_descriptor desc;
+ desc.dev.hw = NVMCTRL;
+ flash_write(&desc, (uint32_t) CIRCUITPY_INTERNAL_CONFIG_START_ADDR, page_buffer, NVMCTRL_ROW_SIZE);
+ }
+}
+#endif
+
safe_mode_t port_init(void) {
#if defined(SAMD21)
@@ -168,7 +206,19 @@ safe_mode_t port_init(void) {
hri_nvmctrl_set_CTRLB_RWS_bf(NVMCTRL, 2);
_pm_init();
#endif
- clock_init();
+
+#if CALIBRATE_CRYSTALLESS
+ uint32_t fine = DEFAULT_DFLL48M_FINE_CALIBRATION;
+ // The fine calibration data is stored in an NVM page after the text and data storage but before
+ // the optional file system. The first 16 bytes are the identifier for the section.
+ if (strcmp((char*) CIRCUITPY_INTERNAL_CONFIG_START_ADDR, "CIRCUITPYTHON1") == 0) {
+ fine = ((uint16_t *) CIRCUITPY_INTERNAL_CONFIG_START_ADDR)[8];
+ }
+ clock_init(BOARD_HAS_CRYSTAL, fine);
+#else
+ // Use a default fine value
+ clock_init(BOARD_HAS_CRYSTAL, DEFAULT_DFLL48M_FINE_CALIBRATION);
+#endif
// Configure millisecond timer initialization.
tick_init();
@@ -257,9 +307,11 @@ void reset_port(void) {
// gpio_set_pin_function(PIN_PB15, GPIO_PIN_FUNCTION_M); // GCLK1, D6
// #endif
+#if CALIBRATE_CRYSTALLESS
if (tud_cdc_connected()) {
save_usb_clock_calibration();
}
+#endif
}
void reset_to_bootloader(void) {
diff --git a/ports/cxd56/boards/spresense/mpconfigboard.mk b/ports/cxd56/boards/spresense/mpconfigboard.mk
index a2d4e5d88..7b8ac6ff6 100644
--- a/ports/cxd56/boards/spresense/mpconfigboard.mk
+++ b/ports/cxd56/boards/spresense/mpconfigboard.mk
@@ -2,3 +2,5 @@ USB_VID = 0x054c
USB_PID = 0x0bc2
USB_PRODUCT = "Spresense"
USB_MANUFACTURER = "Sony"
+
+INTERNAL_FLASH_FILESYSTEM = 1
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 096dfaa4b..e6070fc32 100755
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -63,8 +63,6 @@ ifneq ($(SD), )
include bluetooth/bluetooth_common.mk
endif
-FROZEN_MPY_DIR = freeze
-
CROSS_COMPILE = arm-none-eabi-
FATFS_DIR = lib/oofatfs
@@ -119,7 +117,7 @@ CFLAGS += \
# TODO: check this
CFLAGS += -D__START=main
-LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
+LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -Wl,-nostdlib -Wl,-T,$(GENERATED_LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
LIBS := -lgcc -lc
LDFLAGS += -mthumb -mcpu=cortex-m4
@@ -194,15 +192,16 @@ SRC_SHARED_MODULE_EXPANDED = $(addprefix shared-bindings/, $(SRC_SHARED_MODULE))
$(addprefix shared-module/, $(SRC_SHARED_MODULE)) \
$(addprefix shared-module/, $(SRC_SHARED_MODULE_INTERNAL))
-SRC_S = supervisor/cpu.s
+# There may be duplicates between SRC_COMMON_HAL_EXPANDED and SRC_SHARED_MODULE_EXPANDED,
+# because a few modules have files both in common-hal/ and shared-modules/.
+# Doing a $(sort ...) removes duplicates as part of sorting.
+SRC_COMMON_HAL_SHARED_MODULE_EXPANDED = $(sort $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED))
-FROZEN_MPY_PY_FILES := $(shell find -L $(FROZEN_MPY_DIR) -type f -name '*.py')
-FROZEN_MPY_MPY_FILES := $(addprefix $(BUILD)/,$(FROZEN_MPY_PY_FILES:.py=.mpy))
+SRC_S = supervisor/cpu.s
OBJ += $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_NRFX:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_EXPANDED:.c=.o))
-OBJ += $(addprefix $(BUILD)/, $(SRC_SHARED_MODULE_EXPANDED:.c=.o))
+OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_SHARED_MODULE_EXPANDED:.c=.o))
ifeq ($(INTERNAL_LIBM),1)
OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
endif
@@ -220,10 +219,10 @@ SRC_QSTR_PREPROCESSOR +=
all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2
-$(BUILD)/firmware.elf: $(OBJ)
+$(BUILD)/firmware.elf: $(OBJ) $(GENERATED_LD_FILE)
$(STEPECHO) "LINK $@"
- $(Q)$(CC) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(LIBS) -Wl,--end-group
- $(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py $(LD_FILE)
+ $(Q)$(CC) -o $@ $(LDFLAGS) $(OBJ) -Wl,--start-group $(LIBS) -Wl,--end-group
+ $(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py $(GENERATED_LD_FILE)
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
$(STEPECHO) "Create $@"
@@ -265,7 +264,7 @@ else ifeq ($(FLASHER), pyocd)
flash: $(BUILD)/firmware.hex
pyocd-flashtool -t $(MCU_VARIANT) $< --sector_erase
- #pyocd-tool -t $(MCU_VARIANT) erase $(BOOT_SETTING_ADDR)
+# pyocd-tool -t $(MCU_VARIANT) erase $(BOOT_SETTING_ADDR)
pyocd-tool -t $(MCU_VARIANT) write32 $(BOOT_SETTING_ADDR) 0x00000001
pyocd-tool -t $(MCU_VARIANT) reset
diff --git a/ports/nrf/README.md b/ports/nrf/README.md
index 5f6d03720..88dd47273 100644
--- a/ports/nrf/README.md
+++ b/ports/nrf/README.md
@@ -2,85 +2,18 @@
This is a port of CircuitPython to the Nordic Semiconductor nRF52 series of chips.
-## Supported Features
+> **NOTE**: There are board-specific READMEs that may be more up to date than the
+ generic board-neutral documentation below.
-* UART
-* SPI
-* LEDs
-* Pins
-* ADC
-* I2C
-* PWM
-* Temperature
-* RTC (Real Time Counter. Low-Power counter)
-* BLE support including:
- * Peripheral role
- * Scanner role
- * _REPL over Bluetooth LE_ (optionally using WebBluetooth)
- * ubluepy: Bluetooth LE module for CircuitPython
- * 1 non-connectable advertiser while in connection
+## Flash
-## Tested Hardware
+Some boards have UF2 bootloaders and can simply be flashed in the normal way, by copying
+firmware.uf2 to the BOOT drive.
-* nRF52840
- * [PCA10056](http://www.nordicsemi.com/eng/Products/nRF52840-Preview-DK)
+For some boards, you can use the `flash` target:
-## Board Specific Instructions
-
-For board-specific instructions on building and flashing CircuitPython, see
-the following links:
-
-> **NOTE**: These board specific readmes may be more up to date than the
- generic board-neutral documentation further down.
-
-* Adafruit Feather nRF52840: `boards/feather_nrf52840_express/README.md`: 1MB Flash, 256KB SRAM
-* Nordic PCA10056 (uses nRF52840): `boards/pca10056/README.md`
-* MakerDiary nRF52840 MDK: `boards/makerdiary_nrf52840_mdk/README.md`
-* MakerDiary nRF52840 MDK USB Dongle: `boards/makerdiary_nrf52840_mdk_usb_dongle/README.md`
-
-For all other board targets, see the generic notes below.
-
-## Compile and Flash
-
-Prerequisite steps for building the nrf port:
-
- git clone <URL>.git circuitpython
- cd circuitpython
- git submodule update --init
- make -C mpy-cross
-
-To build and flash issue the following command inside the ports/nrf/ folder:
-
- make BOARD=pca10056
make BOARD=pca10056 flash
-## Compile and Flash with Bluetooth Stack
-
-First prepare the bluetooth folder by downloading Bluetooth LE stacks and headers:
-
- ./bluetooth/download_ble_stack.sh
-
-If the Bluetooth stacks has been downloaded, compile the target with the following command:
-
- make BOARD=pca10040 SD=s132
-
-The **make sd** will trigger a flash of the bluetooth stack before that application is flashed. Note that **make sd** will perform a full erase of the chip, which could cause 3rd party bootloaders to also be wiped.
-
- make BOARD=pca10040 SD=s132 sd
-
-Note: further tuning of features to include in bluetooth or even setting up the device to use REPL over Bluetooth can be configured in the `bluetooth_conf.h`.
-
-## Target Boards and Make Flags
-
-Target Board (BOARD) | Bluetooth Stack (SD) | Bluetooth Support | Flash Util
--------------------------|-------------------------|------------------------|-------------------------------
-pca10056 | s140 | Peripheral and Scanner | [Segger](#segger-targets)
-feather_nrf52840_express | s140 | Peripheral and Scanner | UF2 bootloader
-makerdiary_nrf52840_mdk | s140 | Peripheral and Scanner | pyocd or ARM mbed DAPLink
-makerdiary_nrf52840_mdk_usb_dongle | s140 | Peripheral and Scanner | DFU bootloader & nrfutil
-electronut_labs_papyr | s140 | Peripheral and Scanner | UF2 bootloader
-electronut_labs_blip | s140 | Peripheral and Scanner | Black Magic Probe
-
## Segger Targets
Install the necessary tools to flash and debug using Segger:
@@ -107,22 +40,7 @@ run follow command to install [adafruit-nrfutil](https://github.com/adafruit/Ada
* dfu-gen: Generates a Firmware zip to be used by the DFU flash application.
* dfu-flash: Triggers the DFU flash application to upload the firmware from the generated Firmware zip file.
-Example on how to generate and flash feather_nrf52840 target:
-
- make BOARD=feather_nrf52840 SD=s140
- make BOARD=feather_nrf52840 SD=s140 dfu-gen dfu-flash
-
-## Bluetooth LE REPL
-
-The port also implements a BLE REPL driver. This feature is disabled by default, as it will deactivate the UART REPL when activated. As some of the nRF devices only have one UART, using the BLE REPL free's the UART instance such that it can be used as a general UART peripheral not bound to REPL.
-
-The configuration can be enabled by editing the `bluetooth_conf.h` and set `MICROPY_PY_BLE_NUS` to 1.
When enabled you have different options to test it:
* [NUS Console for Linux](https://github.com/tralamazza/nus_console) (recommended)
* [WebBluetooth REPL](https://glennrub.github.io/webbluetooth/micropython/repl/) (experimental)
-
-Other:
-* nRF UART application for IPhone/Android
-
-WebBluetooth mode can also be configured by editing `bluetooth_conf.h` and set `BLUETOOTH_WEBBLUETOOTH_REPL` to 1. This will alternate advertisement between Eddystone URL and regular connectable advertisement. The Eddystone URL will point the phone or PC to download [WebBluetooth REPL](https://glennrub.github.io/webbluetooth/micropython/repl/) (experimental), which subsequently can be used to connect to the Bluetooth REPL from the PC or Phone browser.
diff --git a/ports/nrf/bluetooth/ble_drv.c b/ports/nrf/bluetooth/ble_drv.c
index 63d67a7f4..7dbb31582 100644
--- a/ports/nrf/bluetooth/ble_drv.c
+++ b/ports/nrf/bluetooth/ble_drv.c
@@ -43,7 +43,7 @@
nrf_nvic_state_t nrf_nvic_state = { 0 };
// Flag indicating progress of internal flash operation.
-sd_flash_operation_status_t sd_flash_operation_status;
+volatile sd_flash_operation_status_t sd_flash_operation_status;
__attribute__((aligned(4)))
static uint8_t m_ble_evt_buf[sizeof(ble_evt_t) + (BLE_GATT_ATT_MTU_DEFAULT)];
diff --git a/ports/nrf/bluetooth/ble_drv.h b/ports/nrf/bluetooth/ble_drv.h
index 7716cab8b..91990da6d 100644
--- a/ports/nrf/bluetooth/ble_drv.h
+++ b/ports/nrf/bluetooth/ble_drv.h
@@ -59,7 +59,7 @@ typedef enum {
} sd_flash_operation_status_t;
// Flag indicating progress of internal flash operation.
-extern sd_flash_operation_status_t sd_flash_operation_status;
+extern volatile sd_flash_operation_status_t sd_flash_operation_status;
typedef struct ble_drv_evt_handler_entry {
struct ble_drv_evt_handler_entry *next;
diff --git a/ports/nrf/bluetooth/ble_uart.c b/ports/nrf/bluetooth/ble_uart.c
index 787a2a117..1e7a319bd 100644
--- a/ports/nrf/bluetooth/ble_uart.c
+++ b/ports/nrf/bluetooth/ble_uart.c
@@ -40,7 +40,7 @@
#include "shared-bindings/_bleio/Service.h"
#include "shared-bindings/_bleio/UUID.h"
-#if (MICROPY_PY_BLE_NUS == 1)
+#if CIRCUITPY_SERIAL_BLE
static const char default_name[] = "CP-REPL"; // max 8 chars or uuid won't fit in adv data
static const char NUS_UUID[] = "6e400001-b5a3-f393-e0a9-e50e24dcca9e";
@@ -190,4 +190,4 @@ void mp_hal_stdout_tx_strn(const char *str, size_t len) {
}
}
-#endif // MICROPY_PY_BLE_NUS
+#endif // CIRCUITPY_SERIAL_BLE
diff --git a/ports/nrf/boards/adafruit_nrf52840_s140_v6.ld b/ports/nrf/boards/adafruit_nrf52840_s140_v6.ld
deleted file mode 100644
index 756060f96..000000000
--- a/ports/nrf/boards/adafruit_nrf52840_s140_v6.ld
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- GNU linker script for NRF52840 w/S140 6.x.x SoftDevice
-
- MEMORY MAP
- ------------------------------------------------------------------------
- START ADDR END ADDR SIZE DESCRIPTION
- ---------- ---------- ------- -----------------------------------------
- 0x000FF000..0x000FFFFF ( 4KB) Bootloader Settings
- 0x000FE000..0x000FEFFF ( 4KB) Master Boot Record Params
- 0x000F4000..0x000FDFFF ( 40KB) Bootloader (UF2 + CDC + OTA)
-
- 0x000ED000..0x000F3FFF (28KB ) Private Config Data (Bonding, Keys, etc.)
- 0x000AD000..0x000ECFFF (256KB) User Filesystem
- 0x00026000..0x000ACFFF (540KB) Application Code (including ISR vector)
- 0x00001000..0x00025FFF (148KB) SoftDevice
- 0x00000000..0x00000FFF (4KB) Master Boot Record
-*/
-
-
-/* Specify the memory areas (S140 6.x.x) */
-MEMORY
-{
- FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x100000
-
- FLASH_ISR (rx) : ORIGIN = 0x00026000, LENGTH = 0x001000
- FLASH_TEXT (rx) : ORIGIN = 0x00027000, LENGTH = 0x086000
- FLASH_FATFS (r) : ORIGIN = 0x000AD000, LENGTH = 0x040000
-
- /* 0x2000000 - RAM:ORIGIN is reserved for Softdevice */
- /* SoftDevice 6.1.0 takes 0x1628 bytes (5.54 kb) minimum. */
- /* To measure the minimum required amount of memory for given configuration, set this number
- high enough to work and then check the mutation of the value done by sd_ble_enable. */
- RAM (xrw) : ORIGIN = 0x20000000 + 16K, LENGTH = 256K - 16K
-}
-
-/* produce a link error if there is not this amount of RAM for these sections */
-_minimum_stack_size = 2K;
-_minimum_heap_size = 0;
-
-/* top end of the stack */
-
-/*_stack_end = ORIGIN(RAM) + LENGTH(RAM);*/
-_estack = ORIGIN(RAM) + LENGTH(RAM);
-
-/* RAM extents for the garbage collector and soft device init */
-_ram_start = ORIGIN(RAM);
-_ram_end = ORIGIN(RAM) + LENGTH(RAM);
-_heap_end = 0x20020000; /* tunable */
-
-INCLUDE "boards/common.ld"
diff --git a/ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk b/ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk
index 9a875ac44..d5e38c5b7 100644
--- a/ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk
+++ b/ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0x805A
USB_PRODUCT = "Arduino_Nano_33_BLE"
USB_MANUFACTURER = "Arduino"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
INTERNAL_FLASH_FILESYSTEM = 1
diff --git a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h
index 21ba3a976..7f9933b42 100644
--- a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h
+++ b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h
@@ -30,9 +30,6 @@
#define MICROPY_HW_BOARD_NAME "Adafruit Circuit Playground Bluefruit"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define FLASH_SIZE (0x100000)
-#define FLASH_PAGE_SIZE (4096)
-
#define MICROPY_HW_LED_STATUS (&pin_P1_14)
// Unusually, board does not have a 32 kHz xtal. Nearly all boards do.
@@ -57,12 +54,6 @@
// Disables onboard peripherals and neopixels to save power.
#define POWER_SWITCH_PIN (&pin_P0_06)
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-#define CIRCUITPY_INTERNAL_NVM_SIZE (4096)
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define DEFAULT_I2C_BUS_SCL (&pin_P0_04)
#define DEFAULT_I2C_BUS_SDA (&pin_P0_05)
diff --git a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
index d53e486f9..f63554e5e 100644
--- a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
+++ b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0x8046
USB_PRODUCT = "Circuit Playground Bluefruit"
USB_MANUFACTURER = "Adafruit Industries LLC"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
diff --git a/ports/nrf/boards/common.ld b/ports/nrf/boards/common.template.ld
index df81aae58..931f95ee9 100644
--- a/ports/nrf/boards/common.ld
+++ b/ports/nrf/boards/common.template.ld
@@ -1,6 +1,36 @@
-/* Flash region for File System */
-__fatfs_flash_start_addr = ORIGIN(FLASH_FATFS);
-__fatfs_flash_length = LENGTH(FLASH_FATFS);
+/*
+ GNU linker script for NRF52840 w/ s140 6.0.0 SoftDevice
+*/
+
+/* Specify the memory areas */
+MEMORY
+{
+ FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x100000 /* entire flash, 1 MiB */
+ /* nRF SoftDevice */
+ FLASH_MBR (rx) : ORIGIN = ${MBR_START_ADDR}, LENGTH = ${MBR_SIZE}
+ FLASH_SD (rx) : ORIGIN = ${SD_FLASH_START_ADDR}, LENGTH = ${SD_FLASH_SIZE}
+ FLASH_ISR (rx) : ORIGIN = ${ISR_START_ADDR}, LENGTH = ${ISR_SIZE}
+ FLASH_FIRMWARE (rx) : ORIGIN = ${CIRCUITPY_FIRMWARE_START_ADDR}, LENGTH = ${CIRCUITPY_FIRMWARE_SIZE}
+ FLASH_BLE_CONFIG (r) : ORIGIN = ${CIRCUITPY_BLE_CONFIG_START_ADDR}, LENGTH = ${CIRCUITPY_BLE_CONFIG_SIZE}
+ FLASH_NVM (r) : ORIGIN = ${CIRCUITPY_INTERNAL_NVM_START_ADDR}, LENGTH = ${CIRCUITPY_INTERNAL_NVM_SIZE}
+ FLASH_FATFS (r) : ORIGIN = ${CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR}, LENGTH = ${CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE}
+ FLASH_BOOTLOADER (rx) : ORIGIN = ${BOOTLOADER_START_ADDR}, LENGTH = ${BOOTLOADER_SIZE}
+ FLASH_BOOTLOADER_SETTINGS (r) : ORIGIN = ${BOOTLOADER_SETTINGS_START_ADDR}, LENGTH = ${BOOTLOADER_SETTINGS_SIZE}
+ RAM (xrw) : ORIGIN = 0x20004000, LENGTH = 0x03C000 /* 240 KiB */
+}
+
+/* produce a link error if there is not this amount of RAM for these sections */
+_minimum_stack_size = 40K;
+_minimum_heap_size = 0;
+
+/* top end of the stack */
+
+/*_stack_end = ORIGIN(RAM) + LENGTH(RAM);*/
+_estack = ORIGIN(RAM) + LENGTH(RAM);
+
+/* RAM extents for the garbage collector */
+_ram_end = ORIGIN(RAM) + LENGTH(RAM);
+_heap_end = 0x20020000; /* tunable */
/* define output sections */
SECTIONS
@@ -13,7 +43,7 @@ SECTIONS
. = ALIGN(4);
} >FLASH_ISR
-
+
/* The program code and other data goes into FLASH */
.text :
{
@@ -27,25 +57,25 @@ SECTIONS
. = ALIGN(4);
_etext = .; /* define a global symbol at end of code */
- } >FLASH_TEXT
-
+ } >FLASH_FIRMWARE
+
/*
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
- } >FLASH
+ } >FLASH_FIRMWARE
.ARM :
{
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
- } >FLASH
+ } >FLASH_FIRMWARE
*/
-
+
/* used by the startup to initialize data */
_sidata = .;
-
+
/* This is the initialized data section
The program executes knowing that the data is in the RAM
but the loader puts the initial values in the FLASH (inidata).
@@ -60,8 +90,8 @@ SECTIONS
. = ALIGN(4);
_edata = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
- } >RAM
-
+ } >RAM
+
/* Uninitialized data section */
.bss :
{
@@ -105,4 +135,3 @@ SECTIONS
.ARM.attributes 0 : { *(.ARM.attributes) }
}
-
diff --git a/ports/nrf/boards/electronut_labs_blip/mpconfigboard.h b/ports/nrf/boards/electronut_labs_blip/mpconfigboard.h
index 6fe969d4a..ed1c32bd3 100644
--- a/ports/nrf/boards/electronut_labs_blip/mpconfigboard.h
+++ b/ports/nrf/boards/electronut_labs_blip/mpconfigboard.h
@@ -33,12 +33,6 @@
#define MICROPY_HW_BOARD_NAME "Electronut Labs Blip"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_P0_11)
diff --git a/ports/nrf/boards/electronut_labs_blip/mpconfigboard.mk b/ports/nrf/boards/electronut_labs_blip/mpconfigboard.mk
index 9cddd96ee..f30b308ec 100644
--- a/ports/nrf/boards/electronut_labs_blip/mpconfigboard.mk
+++ b/ports/nrf/boards/electronut_labs_blip/mpconfigboard.mk
@@ -3,28 +3,10 @@ USB_PID = 0x803C
USB_PRODUCT = "Blip"
USB_MANUFACTURER = "Electronut Labs"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
-
-QSPI_FLASH_FILESYSTEM = 0
INTERNAL_FLASH_FILESYSTEM = 1
CIRCUITPY_AUDIOIO = 0
CIRCUITPY_DISPLAYIO = 1
CIRCUITPY_GAMEPAD = 1
CIRCUITPY_STAGE = 1
-
diff --git a/ports/nrf/boards/electronut_labs_papyr/mpconfigboard.h b/ports/nrf/boards/electronut_labs_papyr/mpconfigboard.h
index 6fc1c5fad..4c2e7a92c 100644
--- a/ports/nrf/boards/electronut_labs_papyr/mpconfigboard.h
+++ b/ports/nrf/boards/electronut_labs_papyr/mpconfigboard.h
@@ -32,12 +32,6 @@
#define MICROPY_HW_BOARD_NAME "Electronut Labs Papyr"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_P0_06)
diff --git a/ports/nrf/boards/electronut_labs_papyr/mpconfigboard.mk b/ports/nrf/boards/electronut_labs_papyr/mpconfigboard.mk
index 5aee244f1..569dccc9c 100644
--- a/ports/nrf/boards/electronut_labs_papyr/mpconfigboard.mk
+++ b/ports/nrf/boards/electronut_labs_papyr/mpconfigboard.mk
@@ -3,20 +3,6 @@ USB_PID = 0x803C
USB_PRODUCT = "Papyr"
USB_MANUFACTURER = "Electronut Labs"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840 \ No newline at end of file
+INTERNAL_FLASH_FILESYSTEM = 1
diff --git a/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.h b/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.h
index b5319032c..64988e1a2 100644
--- a/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.h
+++ b/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.h
@@ -30,9 +30,6 @@
#define MICROPY_HW_BOARD_NAME "Adafruit Feather nRF52840 Express"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define FLASH_SIZE (0x100000)
-#define FLASH_PAGE_SIZE (4096)
-
#define MICROPY_HW_NEOPIXEL (&pin_P0_16)
#define MICROPY_HW_LED_STATUS (&pin_P1_15)
@@ -53,12 +50,6 @@
#define SPI_FLASH_CS_PIN &pin_P0_20
#endif
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-#define CIRCUITPY_INTERNAL_NVM_SIZE (4096)
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_P0_11)
diff --git a/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk b/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk
index 0fef54ef7..84861a1f0 100644
--- a/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk
+++ b/ports/nrf/boards/feather_nrf52840_express/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0x802A
USB_PRODUCT = "Feather nRF52840 Express"
USB_MANUFACTURER = "Adafruit Industries LLC"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
diff --git a/ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.h b/ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.h
index 2f17460ae..629463e4e 100644
--- a/ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.h
+++ b/ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.h
@@ -3,9 +3,6 @@
#define MICROPY_HW_BOARD_NAME "Adafruit ItsyBitsy nRF52840 Express"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define FLASH_SIZE (0x100000)
-#define FLASH_PAGE_SIZE (4096)
-
#define MICROPY_HW_LED_STATUS (&pin_P0_06)
#define MICROPY_HW_APA102_MOSI (&pin_P0_08)
diff --git a/ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.mk b/ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.mk
index d290077e7..d5587f4b9 100644
--- a/ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.mk
+++ b/ports/nrf/boards/itsybitsy_nrf52840_express/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0x8052
USB_PRODUCT = "ItsyBitsy nRF52840 Express"
USB_MANUFACTURER = "Adafruit Industries LLC"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
# Don't use up a hardware SPI peripheral for the status DotStar: we only have one or two.
CIRCUITPY_BITBANG_APA102 = 1
diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.h b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.h
index ce0abe724..871cbe73d 100644
--- a/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.h
+++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.h
@@ -39,12 +39,6 @@
#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(1, 3)
#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(1, 8)
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 0
#define DEFAULT_UART_BUS_RX (&pin_P0_19)
diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk
index abb0f4946..339575049 100644
--- a/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk
+++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0x802A
USB_PRODUCT = "nRF52840-MDK"
USB_MANUFACTURER = "makerdiary"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.h b/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.h
index 86c7243e5..684b2c501 100644
--- a/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.h
+++ b/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.h
@@ -32,10 +32,4 @@
#define MICROPY_HW_BOARD_NAME "MakerDiary nRF52840 MDK USB Dongle"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1 // according to the schematic we do
diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk b/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk
index 82bbc3bd8..55ca410d9 100644
--- a/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk
+++ b/ports/nrf/boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk
@@ -3,21 +3,6 @@ USB_PID = 0x802A
USB_PRODUCT = "nRF52840-MDK-Dongle"
USB_MANUFACTURER = "makerdiary"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-BOOT_SETTING_ADDR = 0xFF000
-BOOT_FILE = boards/$(BOARD)/bootloader/$(SOFTDEV_VERSION)/$(BOARD)_bootloader_$(SOFTDEV_VERSION)_s140
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
+INTERNAL_FLASH_FILESYSTEM = 1
diff --git a/ports/nrf/boards/metro_nrf52840_express/mpconfigboard.h b/ports/nrf/boards/metro_nrf52840_express/mpconfigboard.h
index 797cc9668..837355154 100644
--- a/ports/nrf/boards/metro_nrf52840_express/mpconfigboard.h
+++ b/ports/nrf/boards/metro_nrf52840_express/mpconfigboard.h
@@ -30,9 +30,6 @@
#define MICROPY_HW_BOARD_NAME "Adafruit Metro nRF52840 Express"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define FLASH_SIZE (0x100000)
-#define FLASH_PAGE_SIZE (4096)
-
#define MICROPY_HW_NEOPIXEL (&pin_P0_13)
#define MICROPY_HW_LED_STATUS (&pin_P1_13)
@@ -53,12 +50,6 @@
#define SPI_FLASH_CS_PIN &pin_P0_20
#endif
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-#define CIRCUITPY_INTERNAL_NVM_SIZE (4096)
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_P0_16)
diff --git a/ports/nrf/boards/metro_nrf52840_express/mpconfigboard.mk b/ports/nrf/boards/metro_nrf52840_express/mpconfigboard.mk
index 4c1c93c10..d421e5210 100644
--- a/ports/nrf/boards/metro_nrf52840_express/mpconfigboard.mk
+++ b/ports/nrf/boards/metro_nrf52840_express/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0x8040
USB_PRODUCT = "Metro nRF52840 Express"
USB_MANUFACTURER = "Adafruit Industries LLC"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
diff --git a/ports/nrf/boards/nrf52840_1M_256k.ld b/ports/nrf/boards/nrf52840_1M_256k.ld
deleted file mode 100644
index eb8a18aef..000000000
--- a/ports/nrf/boards/nrf52840_1M_256k.ld
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- GNU linker script for NRF52840 blank w/ no SoftDevice
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x100000 /* entire flash, 1 MiB */
- FLASH_ISR (rx) : ORIGIN = 0x00000000, LENGTH = 0x001000 /* sector 0, 4 KiB */
- FLASH_TEXT (rx) : ORIGIN = 0x00001000, LENGTH = 0x0E6000 /* 920 KiB */
- FLASH_FATFS (r) : ORIGIN = 0x000E7000, LENGTH = 0x019000 /* File system 100 KiB */
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 0x040000 /* 256 KiB */
-}
-
-/* produce a link error if there is not this amount of RAM for these sections */
-_minimum_stack_size = 40K;
-_minimum_heap_size = 0;
-
-/* top end of the stack */
-
-/*_stack_end = ORIGIN(RAM) + LENGTH(RAM);*/
-_estack = ORIGIN(RAM) + LENGTH(RAM);
-
-/* RAM extents for the garbage collector */
-_ram_end = ORIGIN(RAM) + LENGTH(RAM);
-_heap_end = 0x20020000; /* tunable */
-
-INCLUDE "boards/common.ld"
diff --git a/ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0.ld b/ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0.ld
deleted file mode 100644
index 90d6c402d..000000000
--- a/ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0.ld
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- GNU linker script for NRF52840 w/ s140 6.0.0 SoftDevice
-*/
-
-/* Specify the memory areas */
-MEMORY
-{
- FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x100000 /* entire flash, 1 MiB */
- FLASH_ISR (rx) : ORIGIN = 0x00026000, LENGTH = 0x001000 /* sector 0, 4 KiB */
- FLASH_TEXT (rx) : ORIGIN = 0x00027000, LENGTH = 0x099000 /* 612 KiB */
- FLASH_FATFS (r) : ORIGIN = 0x000C0000, LENGTH = 0x040000 /* File system 256 KiB */
- RAM (xrw) : ORIGIN = 0x20004000, LENGTH = 0x03C000 /* 240 KiB */
-}
-
-/* produce a link error if there is not this amount of RAM for these sections */
-_minimum_stack_size = 40K;
-_minimum_heap_size = 0;
-
-/* top end of the stack */
-
-/*_stack_end = ORIGIN(RAM) + LENGTH(RAM);*/
-_estack = ORIGIN(RAM) + LENGTH(RAM);
-
-/* RAM extents for the garbage collector */
-_ram_end = ORIGIN(RAM) + LENGTH(RAM);
-_heap_end = 0x20020000; /* tunable */
-
-INCLUDE "boards/common.ld"
diff --git a/ports/nrf/boards/particle_argon/mpconfigboard.h b/ports/nrf/boards/particle_argon/mpconfigboard.h
index 1eeb7291b..a4952fc79 100644
--- a/ports/nrf/boards/particle_argon/mpconfigboard.h
+++ b/ports/nrf/boards/particle_argon/mpconfigboard.h
@@ -52,12 +52,6 @@
#define SPI_FLASH_CS_PIN &pin_P0_17
#endif
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_P0_27)
diff --git a/ports/nrf/boards/particle_argon/mpconfigboard.mk b/ports/nrf/boards/particle_argon/mpconfigboard.mk
index 8d3bb2a28..f8d3d2aca 100644
--- a/ports/nrf/boards/particle_argon/mpconfigboard.mk
+++ b/ports/nrf/boards/particle_argon/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0xc00c
USB_PRODUCT = "Argon"
USB_MANUFACTURER = "Particle"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
diff --git a/ports/nrf/boards/particle_boron/mpconfigboard.h b/ports/nrf/boards/particle_boron/mpconfigboard.h
index af6992484..bab1b3d5c 100644
--- a/ports/nrf/boards/particle_boron/mpconfigboard.h
+++ b/ports/nrf/boards/particle_boron/mpconfigboard.h
@@ -52,12 +52,6 @@
#define SPI_FLASH_CS_PIN &pin_P0_17
#endif
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_P0_27)
diff --git a/ports/nrf/boards/particle_boron/mpconfigboard.mk b/ports/nrf/boards/particle_boron/mpconfigboard.mk
index 801b9613f..eada97a73 100644
--- a/ports/nrf/boards/particle_boron/mpconfigboard.mk
+++ b/ports/nrf/boards/particle_boron/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0xc00d
USB_PRODUCT = "Boron"
USB_MANUFACTURER = "Particle"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
diff --git a/ports/nrf/boards/particle_xenon/mpconfigboard.h b/ports/nrf/boards/particle_xenon/mpconfigboard.h
index 34ca6421e..f0d12bb0b 100644
--- a/ports/nrf/boards/particle_xenon/mpconfigboard.h
+++ b/ports/nrf/boards/particle_xenon/mpconfigboard.h
@@ -52,12 +52,6 @@
#define SPI_FLASH_CS_PIN &pin_P0_17
#endif
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
-
#define BOARD_HAS_CRYSTAL 1
#define DEFAULT_I2C_BUS_SCL (&pin_P0_27)
diff --git a/ports/nrf/boards/particle_xenon/mpconfigboard.mk b/ports/nrf/boards/particle_xenon/mpconfigboard.mk
index 5cebc423a..6062da378 100644
--- a/ports/nrf/boards/particle_xenon/mpconfigboard.mk
+++ b/ports/nrf/boards/particle_xenon/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0xc00e # argon is 0xc00c
USB_PRODUCT = "Xenon"
USB_MANUFACTURER = "Particle"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
diff --git a/ports/nrf/boards/pca10056/mpconfigboard.h b/ports/nrf/boards/pca10056/mpconfigboard.h
index 5b30c7fe8..5d0d4d3a5 100644
--- a/ports/nrf/boards/pca10056/mpconfigboard.h
+++ b/ports/nrf/boards/pca10056/mpconfigboard.h
@@ -29,8 +29,6 @@
#define MICROPY_HW_BOARD_NAME "PCA10056 nRF52840-DK"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
#define MICROPY_HW_LED_STATUS (&pin_P0_13)
#define DEFAULT_I2C_BUS_SCL (&pin_P0_27)
diff --git a/ports/nrf/boards/pca10056/mpconfigboard.mk b/ports/nrf/boards/pca10056/mpconfigboard.mk
index 723e7976e..8fd1ef08d 100644
--- a/ports/nrf/boards/pca10056/mpconfigboard.mk
+++ b/ports/nrf/boards/pca10056/mpconfigboard.mk
@@ -3,23 +3,7 @@ USB_PID = 0x802A
USB_PRODUCT = "PCA10056"
USB_MANUFACTURER = "Nordic Semiconductor"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
diff --git a/ports/nrf/boards/pca10059/mpconfigboard.h b/ports/nrf/boards/pca10059/mpconfigboard.h
index b79d3c88f..18aa66f16 100644
--- a/ports/nrf/boards/pca10059/mpconfigboard.h
+++ b/ports/nrf/boards/pca10059/mpconfigboard.h
@@ -28,5 +28,3 @@
#define MICROPY_HW_MCU_NAME "nRF52840"
#define MICROPY_HW_LED_STATUS (&pin_P0_06)
-
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
diff --git a/ports/nrf/boards/pca10059/mpconfigboard.mk b/ports/nrf/boards/pca10059/mpconfigboard.mk
index db9d80668..3f97b0821 100644
--- a/ports/nrf/boards/pca10059/mpconfigboard.mk
+++ b/ports/nrf/boards/pca10059/mpconfigboard.mk
@@ -3,21 +3,6 @@ USB_PID = 0x802A
USB_PRODUCT = "PCA10059"
USB_MANUFACTURER = "Nordic Semiconductor"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-BOOT_SETTING_ADDR = 0xFF000
-BOOT_FILE = boards/$(BOARD)/bootloader/$(SOFTDEV_VERSION)/$(BOARD)_bootloader_$(SOFTDEV_VERSION)_s140
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
+INTERNAL_FLASH_FILESYSTEM = 1
diff --git a/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.h b/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.h
index cc7e68864..23cce7f8a 100644
--- a/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.h
+++ b/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.h
@@ -29,8 +29,6 @@
#define MICROPY_HW_BOARD_NAME "SparkFun Pro nRF52840 Mini"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
#define DEFAULT_I2C_BUS_SCL (&pin_P0_11)
#define DEFAULT_I2C_BUS_SDA (&pin_P0_08)
diff --git a/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk b/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk
index 212a85d57..f66b2eaf7 100644
--- a/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk
+++ b/ports/nrf/boards/sparkfun_nrf52840_mini/mpconfigboard.mk
@@ -3,22 +3,6 @@ USB_PID = 0x5289
USB_PRODUCT = "SFE_nRF52840_Mini"
USB_MANUFACTURER = "SparkFun Electronics"
-MCU_SERIES = m4
-MCU_VARIANT = nrf52
-MCU_SUB_VARIANT = nrf52840
MCU_CHIP = nrf52840
-SD ?= s140
-SOFTDEV_VERSION ?= 6.1.0
-
-BOOT_SETTING_ADDR = 0xFF000
-
-ifeq ($(SD),)
- LD_FILE = boards/nrf52840_1M_256k.ld
-else
- LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld
- CIRCUITPY_BLEIO = 1
-endif
-
-NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
INTERNAL_FLASH_FILESYSTEM = 1
diff --git a/ports/nrf/common-hal/_bleio/Adapter.c b/ports/nrf/common-hal/_bleio/Adapter.c
index 8f67d66d2..cee40a5a0 100644
--- a/ports/nrf/common-hal/_bleio/Adapter.c
+++ b/ports/nrf/common-hal/_bleio/Adapter.c
@@ -45,6 +45,7 @@
#include "shared-bindings/_bleio/__init__.h"
#include "shared-bindings/_bleio/Adapter.h"
#include "shared-bindings/_bleio/Address.h"
+#include "shared-bindings/nvm/ByteArray.h"
#include "shared-bindings/_bleio/Connection.h"
#include "shared-bindings/_bleio/ScanEntry.h"
#include "shared-bindings/time/__init__.h"
@@ -54,6 +55,14 @@
#define BLE_SLAVE_LATENCY 0
#define BLE_CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS)
+const nvm_bytearray_obj_t common_hal_bleio_nvm_obj = {
+ .base = {
+ .type = &nvm_bytearray_type,
+ },
+ .start_address = (uint8_t*) CIRCUITPY_BLE_CONFIG_START_ADDR,
+ .len = CIRCUITPY_BLE_CONFIG_SIZE,
+};
+
STATIC void softdevice_assert_handler(uint32_t id, uint32_t pc, uint32_t info) {
reset_into_safe_mode(NORDIC_SOFT_DEVICE_ASSERT);
}
diff --git a/ports/nrf/common-hal/microcontroller/__init__.c b/ports/nrf/common-hal/microcontroller/__init__.c
index a6b1c4ba3..de924566c 100644
--- a/ports/nrf/common-hal/microcontroller/__init__.c
+++ b/ports/nrf/common-hal/microcontroller/__init__.c
@@ -76,11 +76,14 @@ const mcu_processor_obj_t common_hal_mcu_processor_obj = {
};
#if CIRCUITPY_INTERNAL_NVM_SIZE > 0
+
// The singleton nvm.ByteArray object.
const nvm_bytearray_obj_t common_hal_mcu_nvm_obj = {
.base = {
.type = &nvm_bytearray_type,
},
+ .start_address = (uint8_t*) CIRCUITPY_INTERNAL_NVM_START_ADDR,
+ .len = CIRCUITPY_INTERNAL_NVM_SIZE,
};
#endif
diff --git a/ports/nrf/common-hal/nvm/ByteArray.c b/ports/nrf/common-hal/nvm/ByteArray.c
index ee270f79b..7d733ce7b 100644
--- a/ports/nrf/common-hal/nvm/ByteArray.c
+++ b/ports/nrf/common-hal/nvm/ByteArray.c
@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/
+#include "py/runtime.h"
#include "common-hal/nvm/ByteArray.h"
#include <stdio.h>
@@ -31,35 +32,32 @@
#include "peripherals/nrf/nvm.h"
-// defined in linker
-extern uint32_t __fatfs_flash_start_addr[];
-extern uint32_t __fatfs_flash_length[];
-
-#define NVM_START_ADDR ((uint32_t)__fatfs_flash_start_addr + \
- (uint32_t)__fatfs_flash_length - CIRCUITPY_INTERNAL_NVM_SIZE)
-
uint32_t common_hal_nvm_bytearray_get_length(nvm_bytearray_obj_t *self) {
- return CIRCUITPY_INTERNAL_NVM_SIZE;
+ return self->len;
}
static void write_page(uint32_t page_addr, uint32_t offset, uint32_t len, uint8_t *bytes) {
- // Write a whole page to flash, buffering it first and then erasing and rewriting
+ // Write a whole page to flash, buffering it first and then erasing and rewriting
// it since we can only clear a whole page at a time.
+ bool status;
if (offset == 0 && len == FLASH_PAGE_SIZE) {
- nrf_nvm_safe_flash_page_write(page_addr, bytes);
+ status = nrf_nvm_safe_flash_page_write(page_addr, bytes);
} else {
uint8_t buffer[FLASH_PAGE_SIZE];
memcpy(buffer, (uint8_t *)page_addr, FLASH_PAGE_SIZE);
memcpy(buffer + offset, bytes, len);
- nrf_nvm_safe_flash_page_write(page_addr, buffer);
+ status = nrf_nvm_safe_flash_page_write(page_addr, buffer);
+ }
+ if (!status) {
+ mp_raise_OSError_msg(translate("Flash write failed"));
}
}
bool common_hal_nvm_bytearray_set_bytes(nvm_bytearray_obj_t *self,
uint32_t start_index, uint8_t* values, uint32_t len) {
- uint32_t address = NVM_START_ADDR + start_index;
+ uint32_t address = (uint32_t) self->start_address + start_index;
uint32_t offset = address % FLASH_PAGE_SIZE;
uint32_t page_addr = address - offset;
@@ -76,5 +74,5 @@ bool common_hal_nvm_bytearray_set_bytes(nvm_bytearray_obj_t *self,
void common_hal_nvm_bytearray_get_bytes(nvm_bytearray_obj_t *self,
uint32_t start_index, uint32_t len, uint8_t* values) {
- memcpy(values, (uint8_t *)(NVM_START_ADDR + start_index), len);
+ memcpy(values, self->start_address + start_index, len);
}
diff --git a/ports/nrf/common-hal/nvm/ByteArray.h b/ports/nrf/common-hal/nvm/ByteArray.h
index a8d09dd43..c048d5577 100644
--- a/ports/nrf/common-hal/nvm/ByteArray.h
+++ b/ports/nrf/common-hal/nvm/ByteArray.h
@@ -31,6 +31,8 @@
typedef struct {
mp_obj_base_t base;
+ uint8_t* start_address;
+ uint32_t len;
} nvm_bytearray_obj_t;
#endif // MICROPY_INCLUDED_NRF_COMMON_HAL_NVM_BYTEARRAY_H
diff --git a/ports/nrf/ld_defines.c b/ports/nrf/ld_defines.c
new file mode 100644
index 000000000..0ec6dfdb5
--- /dev/null
+++ b/ports/nrf/ld_defines.c
@@ -0,0 +1,39 @@
+// Fake source file used only to capture #define values for use in ld template files.
+#include "mpconfigport.h"
+
+// For each value needed in the LD file, create a C-like line:
+// /*NAME_OF_VALUE=*/ NAME_OF_VALUE;
+// The C preprocessor will replace NAME_OF_VALUE with the actual value.
+// This will be post-processed by tools/gen_ld_files.py to extract the name and value.
+
+// The next line is a marker to start looking for definitions. Lines above the next line are ignored.
+// START_LD_DEFINES
+
+/*MBR_START_ADDR=*/ MBR_START_ADDR;
+/*MBR_SIZE=*/ MBR_SIZE;
+
+/*SD_FLASH_START_ADDR=*/ SD_FLASH_START_ADDR;
+/*SD_FLASH_SIZE=*/ SD_FLASH_SIZE;
+
+/*ISR_START_ADDR=*/ ISR_START_ADDR;
+/*ISR_SIZE=*/ ISR_SIZE;
+
+/*CIRCUITPY_DEFAULT_STACK_SIZE=*/ CIRCUITPY_DEFAULT_STACK_SIZE;
+
+/*CIRCUITPY_FIRMWARE_START_ADDR=*/ CIRCUITPY_FIRMWARE_START_ADDR;
+/*CIRCUITPY_FIRMWARE_SIZE=*/ CIRCUITPY_FIRMWARE_SIZE;
+
+/*CIRCUITPY_BLE_CONFIG_START_ADDR=*/ CIRCUITPY_BLE_CONFIG_START_ADDR;
+/*CIRCUITPY_BLE_CONFIG_SIZE=*/ CIRCUITPY_BLE_CONFIG_SIZE;
+
+/*CIRCUITPY_INTERNAL_NVM_START_ADDR=*/ CIRCUITPY_INTERNAL_NVM_START_ADDR;
+/*CIRCUITPY_INTERNAL_NVM_SIZE=*/ CIRCUITPY_INTERNAL_NVM_SIZE;
+
+/*CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR=*/ CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR;
+/*CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE=*/ CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE;
+
+/*BOOTLOADER_START_ADDR=*/ BOOTLOADER_START_ADDR;
+/*BOOTLOADER_SIZE=*/ BOOTLOADER_SIZE;
+
+/*BOOTLOADER_SETTINGS_START_ADDR=*/ BOOTLOADER_SETTINGS_START_ADDR;
+/*BOOTLOADER_SETTINGS_SIZE=*/ BOOTLOADER_SETTINGS_SIZE;
diff --git a/ports/nrf/mpconfigport.h b/ports/nrf/mpconfigport.h
index bbe6419a5..cb25870dc 100644
--- a/ports/nrf/mpconfigport.h
+++ b/ports/nrf/mpconfigport.h
@@ -30,8 +30,13 @@
#include "ble_drv.h"
+#include "nrf_mbr.h" // for MBR_SIZE
+#include "nrf_sdm.h" // for SD_FLASH_SIZE
+#include "peripherals/nrf/nvm.h" // for FLASH_PAGE_SIZE
+
#ifdef NRF52840
#define MICROPY_PY_SYS_PLATFORM "nRF52840"
+#define FLASH_SIZE (0x100000) // 1MiB
#endif
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1)
@@ -42,26 +47,113 @@
#define MICROPY_PY_UBINASCII (1)
#define MICROPY_PY_UJSON (1)
-// TODO this is old BLE stuff
-#if BLUETOOTH_SD
- #define MICROPY_PY_BLEIO (1)
- #define MICROPY_PY_BLE_NUS (0)
-#else
- #ifndef MICROPY_PY_BLEIO
- #define MICROPY_PY_BLEIO (0)
- #endif
-#endif
-
// 24kiB stack
#define CIRCUITPY_DEFAULT_STACK_SIZE 0x6000
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// This also includes mpconfigboard.h.
#include "py/circuitpy_mpconfig.h"
+// Definitions that might be overriden by mpconfigboard.h
+
+#ifndef CIRCUITPY_INTERNAL_NVM_SIZE
+#define CIRCUITPY_INTERNAL_NVM_SIZE (8192)
+#endif
+
#ifndef BOARD_HAS_32KHZ_XTAL
// Assume crystal is present, which is the most common case.
#define BOARD_HAS_32KHZ_XTAL (1)
#endif
+#if INTERNAL_FLASH_FILESYSTEM
+ #ifndef CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE
+ #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (256*1024)
+ #endif
+#else
+ #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (0)
+#endif
+
+// Flash layout, starting at 0x00000000
+//
+// - SoftDevice
+// - ISR
+// - firmware
+// - BLE config (bonding info, etc.) (optional)
+// - microcontroller.nvm (optional)
+// - internal CIRCUITPY flash filesystem (optional)
+// The flash filesystem is adjacent to the bootloader, so that its location will not change even if
+// other regions change in size.
+// - bootloader (note the MBR at 0x0 redirects to the bootloader here, in high flash)
+// - bootloader settings
+
+// Define these regions starting up from the bottom of flash:
+
+#define MBR_START_ADDR (0x0)
+// MBR_SIZE is from nrf_mbr.h
+#define SD_FLASH_START_ADDR (MBR_START_ADDR + MBR_SIZE)
+
+// SD_FLASH_SIZE is from nrf_sdm.h
+#define ISR_START_ADDR (SD_FLASH_START_ADDR + SD_FLASH_SIZE)
+#define ISR_SIZE (0x1000) // 4kiB
+
+#define CIRCUITPY_FIRMWARE_START_ADDR (ISR_START_ADDR + ISR_SIZE)
+
+// Define these regions starting down from the bootloader:
+
+// Bootloader values from https://github.com/adafruit/Adafruit_nRF52_Bootloader/blob/master/src/linker/s140_v6.ld
+#define BOOTLOADER_START_ADDR (0x000F4000)
+#define BOOTLOADER_SIZE (0xA000) // 40kiB
+#define BOOTLOADER_SETTINGS_START_ADDR (0x000FF000)
+#define BOOTLOADER_SETTINGS_SIZE (0x1000) // 4kiB
+
+#define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR (BOOTLOADER_START_ADDR - CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE)
+
+#if CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE > 0 && CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR != (BOOTLOADER_START_ADDR - 256*1024)
+#warning Internal flash filesystem location has moved!
+#endif
+
+#define CIRCUITPY_INTERNAL_NVM_START_ADDR (CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR - CIRCUITPY_INTERNAL_NVM_SIZE)
+
+// 32kiB for bonding, etc.
+#define CIRCUITPY_BLE_CONFIG_SIZE (32*1024)
+#define CIRCUITPY_BLE_CONFIG_START_ADDR (CIRCUITPY_INTERNAL_NVM_START_ADDR - CIRCUITPY_BLE_CONFIG_SIZE)
+
+// The firmware space is the space left over between the fixed lower and upper regions.
+#define CIRCUITPY_FIRMWARE_SIZE (CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR - CIRCUITPY_FIRMWARE_START_ADDR)
+
+#if BOOTLOADER_START_ADDR % FLASH_PAGE_SIZE != 0
+#error BOOTLOADER_START_ADDR must be on a flash page boundary.
+#endif
+
+#if CIRCUITPY_INTERNAL_NVM_START_ADDR % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_NVM_START_ADDR must be on a flash page boundary.
+#endif
+#if CIRCUITPY_INTERNAL_NVM_SIZE % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_NVM_SIZE must be a multiple of FLASH_PAGE_SIZE.
+#endif
+
+#if CIRCUITPY_BLE_CONFIG_START_ADDR % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_BLE_CONFIG_SIZE must be on a flash page boundary.
+#endif
+#if CIRCUITPY_BLE_CONFIG_SIZE % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_BLE_CONFIG_SIZE must be a multiple of FLASH_PAGE_SIZE.
+#endif
+
+#if CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE must be on a flash page boundary.
+#endif
+#if CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE % FLASH_PAGE_SIZE != 0
+#error CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE must be a multiple of FLASH_PAGE_SIZE.
+#endif
+
+#if CIRCUITPY_FIRMWARE_SIZE < 0
+#error No space left in flash for firmware after specifying other regions!
+#endif
+
+
+
+
#define MICROPY_PORT_ROOT_POINTERS \
CIRCUITPY_COMMON_ROOT_POINTERS \
ble_drv_evt_handler_entry_t* ble_drv_evt_handler_entries; \
diff --git a/ports/nrf/mpconfigport.mk b/ports/nrf/mpconfigport.mk
index f61d9f8ea..9b738d4b3 100644
--- a/ports/nrf/mpconfigport.mk
+++ b/ports/nrf/mpconfigport.mk
@@ -1,3 +1,7 @@
+# All linking can be done with this common templated linker script, which has
+# parameters that vary based on chip and/or board.
+LD_TEMPLATE_FILE = boards/common.template.ld
+
# Define an equivalent for MICROPY_LONGINT_IMPL, to pass to $(MPY-TOOL) in py/mkrules.mk
# $(MPY-TOOL) needs to know what kind of longint to use (if any) to freeze long integers.
# This should correspond to the MICROPY_LONGINT_IMPL definition in mpconfigport.h.
@@ -17,8 +21,13 @@ endif
CIRCUITPY_AUDIOIO = 0
+
# The ifndef's allow overriding in mpconfigboard.mk.
+ifndef
+CIRCUITPY_BLEIO = 1
+endif
+
ifndef CIRCUITPY_AUDIOMIXER
CIRCUITPY_AUDIOMIXER = 1
endif
@@ -42,7 +51,22 @@ endif
# frequencyio not yet implemented
CIRCUITPY_FREQUENCYIO = 0
+# nRF52840-specific
+
+ifeq ($(MCU_CHIP),nrf52840)
+MCU_SERIES = m4
+MCU_VARIANT = nrf52
+MCU_SUB_VARIANT = nrf52840
+
+SD ?= s140
+SOFTDEV_VERSION ?= 6.1.0
+
+BOOT_SETTING_ADDR = 0xFF000
+NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
+
# CircuitPython doesn't yet support NFC so force the NFC antenna pins to be GPIO.
# See https://github.com/adafruit/circuitpython/issues/1300
# Defined here because system_nrf52840.c doesn't #include any of our own include files.
CFLAGS += -DCONFIG_NFCT_PINS_AS_GPIOS
+
+endif
diff --git a/ports/nrf/peripherals/nrf/nvm.c b/ports/nrf/peripherals/nrf/nvm.c
index d8fddc4dc..7118b9c87 100644
--- a/ports/nrf/peripherals/nrf/nvm.c
+++ b/ports/nrf/peripherals/nrf/nvm.c
@@ -50,7 +50,7 @@ STATIC sd_flash_operation_status_t sd_flash_operation_wait_until_done(void) {
}
#endif
-void nrf_nvm_safe_flash_page_write(uint32_t page_addr, uint8_t *data) {
+bool nrf_nvm_safe_flash_page_write(uint32_t page_addr, uint8_t *data) {
#ifdef BLUETOOTH_SD
uint8_t sd_en = 0;
(void) sd_softdevice_is_enabled(&sd_en);
@@ -61,11 +61,11 @@ void nrf_nvm_safe_flash_page_write(uint32_t page_addr, uint8_t *data) {
sd_flash_operation_start();
err_code = sd_flash_page_erase(page_addr / FLASH_PAGE_SIZE);
if (err_code != NRF_SUCCESS) {
- mp_raise_OSError_msg_varg(translate("Flash erase failed to start, err 0x%04x"), err_code);
+ return false;
}
status = sd_flash_operation_wait_until_done();
if (status == SD_FLASH_OPERATION_ERROR) {
- mp_raise_OSError_msg(translate("Flash erase failed"));
+ return false;
}
// Divide a full page into parts, because writing a full page causes an assertion failure.
@@ -78,18 +78,19 @@ void nrf_nvm_safe_flash_page_write(uint32_t page_addr, uint8_t *data) {
(uint32_t *)data + i * words_to_write,
words_to_write);
if (err_code != NRF_SUCCESS) {
- mp_raise_OSError_msg_varg(translate("Flash write failed to start, err 0x%04x"), err_code);
+ return false;
}
status = sd_flash_operation_wait_until_done();
if (status == SD_FLASH_OPERATION_ERROR) {
- mp_raise_OSError_msg(translate("Flash write failed"));
+ return false;
}
}
- return;
+ return true;
}
#endif
nrf_nvmc_page_erase(page_addr);
nrf_nvmc_write_bytes(page_addr, data, FLASH_PAGE_SIZE);
-}
+ return true;
+}
diff --git a/ports/nrf/peripherals/nrf/nvm.h b/ports/nrf/peripherals/nrf/nvm.h
index 4eac3d728..e54e953df 100644
--- a/ports/nrf/peripherals/nrf/nvm.h
+++ b/ports/nrf/peripherals/nrf/nvm.h
@@ -27,8 +27,4 @@
#define FLASH_PAGE_SIZE (4096)
-#ifndef CIRCUITPY_INTERNAL_NVM_SIZE
-#define CIRCUITPY_INTERNAL_NVM_SIZE (0)
-#endif
-
-void nrf_nvm_safe_flash_page_write(uint32_t page_addr, uint8_t *data);
+bool nrf_nvm_safe_flash_page_write(uint32_t page_addr, uint8_t *data);
diff --git a/ports/nrf/supervisor/internal_flash.c b/ports/nrf/supervisor/internal_flash.c
index dcacd4d27..a44f047ff 100644
--- a/ports/nrf/supervisor/internal_flash.c
+++ b/ports/nrf/supervisor/internal_flash.c
@@ -34,6 +34,7 @@
#include "py/obj.h"
#include "py/runtime.h"
#include "lib/oofatfs/ff.h"
+#include "supervisor/shared/safe_mode.h"
#include "peripherals/nrf/nvm.h"
@@ -42,10 +43,6 @@
#include "nrf_sdm.h"
#endif
-// defined in linker
-extern uint32_t __fatfs_flash_start_addr[];
-extern uint32_t __fatfs_flash_length[];
-
#define NO_CACHE 0xffffffff
uint8_t _flash_cache[FLASH_PAGE_SIZE] __attribute__((aligned(4)));
@@ -56,7 +53,7 @@ uint32_t _flash_page_addr = NO_CACHE;
/* Internal Flash API
*------------------------------------------------------------------*/
static inline uint32_t lba2addr(uint32_t block) {
- return ((uint32_t)__fatfs_flash_start_addr) + block * FILESYSTEM_BLOCK_SIZE;
+ return CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR + block * FILESYSTEM_BLOCK_SIZE;
}
void supervisor_flash_init(void) {
@@ -67,7 +64,7 @@ uint32_t supervisor_flash_get_block_size(void) {
}
uint32_t supervisor_flash_get_block_count(void) {
- return ((uint32_t) __fatfs_flash_length - CIRCUITPY_INTERNAL_NVM_SIZE) / FILESYSTEM_BLOCK_SIZE ;
+ return CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE / FILESYSTEM_BLOCK_SIZE ;
}
void supervisor_flash_flush(void) {
@@ -75,7 +72,9 @@ void supervisor_flash_flush(void) {
// Skip if data is the same
if (memcmp(_flash_cache, (void *)_flash_page_addr, FLASH_PAGE_SIZE) != 0) {
- nrf_nvm_safe_flash_page_write(_flash_page_addr, _flash_cache);
+ if (!nrf_nvm_safe_flash_page_write(_flash_page_addr, _flash_cache)) {
+ reset_into_safe_mode(FLASH_WRITE_FAIL);
+ }
}
}
@@ -120,4 +119,3 @@ mp_uint_t supervisor_flash_write_blocks(const uint8_t *src, uint32_t lba, uint32
void supervisor_flash_release_cache(void) {
}
-
diff --git a/ports/nrf/supervisor/serial.c b/ports/nrf/supervisor/serial.c
index 6fd89eb3e..b19e9267c 100644
--- a/ports/nrf/supervisor/serial.c
+++ b/ports/nrf/supervisor/serial.c
@@ -28,15 +28,15 @@
#include "supervisor/serial.h"
-#if (MICROPY_PY_BLE_NUS == 1)
+#if CIRCUITPY_SERIAL_BLE
#include "ble_uart.h"
-#else
+#elif CIRCUITPY_SERIAL_UART
#include <string.h>
#include "nrf_gpio.h"
#include "nrfx_uarte.h"
#endif
-#if (MICROPY_PY_BLE_NUS == 1)
+#if CIRCUITPY_SERIAL_BLE
void serial_init(void) {
ble_uart_init();
@@ -58,7 +58,7 @@ void serial_write(const char *text) {
ble_uart_stdout_tx_str(text);
}
-#elif !defined(NRF52840_XXAA)
+#elif CIRCUITPY_SERIAL_UART
uint8_t serial_received_char;
nrfx_uarte_t serial_instance = NRFX_UARTE_INSTANCE(0);
@@ -124,4 +124,4 @@ void serial_write_substring(const char *text, uint32_t len) {
}
}
-#endif
+#endif // CIRCUITPY_SERIAL_UART
diff --git a/ports/stm32f4/boards/feather_stm32f405_express/mpconfigboard.h b/ports/stm32f4/boards/feather_stm32f405_express/mpconfigboard.h
index dc88f695a..a1d83a25a 100644
--- a/ports/stm32f4/boards/feather_stm32f405_express/mpconfigboard.h
+++ b/ports/stm32f4/boards/feather_stm32f405_express/mpconfigboard.h
@@ -32,9 +32,6 @@
#define FLASH_SIZE (0x100000)
#define FLASH_PAGE_SIZE (0x4000)
-#define AUTORESET_DELAY_MS 500
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000)
-
#define MICROPY_HW_NEOPIXEL (&pin_PC00)
// On-board flash
diff --git a/ports/stm32f4/boards/pyboard_v11/mpconfigboard.h b/ports/stm32f4/boards/pyboard_v11/mpconfigboard.h
index 9d8f72f77..7093442d0 100644
--- a/ports/stm32f4/boards/pyboard_v11/mpconfigboard.h
+++ b/ports/stm32f4/boards/pyboard_v11/mpconfigboard.h
@@ -32,8 +32,6 @@
#define FLASH_SIZE (0x100000)
#define FLASH_PAGE_SIZE (0x4000)
-#define AUTORESET_DELAY_MS 500
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000)
#define DEFAULT_I2C_BUS_SCL (&pin_PB06)
#define DEFAULT_I2C_BUS_SDA (&pin_PB07)
diff --git a/ports/stm32f4/boards/stm32f411ce_blackpill/board.c b/ports/stm32f4/boards/stm32f411ce_blackpill/board.c
new file mode 100644
index 000000000..82b0c506e
--- /dev/null
+++ b/ports/stm32f4/boards/stm32f411ce_blackpill/board.c
@@ -0,0 +1,39 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "boards/board.h"
+#include "mpconfigboard.h"
+
+void board_init(void) {
+}
+
+bool board_requests_safe_mode(void) {
+ return false;
+}
+
+void reset_board(void) {
+
+}
diff --git a/ports/stm32f4/boards/stm32f411ce_blackpill/mpconfigboard.h b/ports/stm32f4/boards/stm32f411ce_blackpill/mpconfigboard.h
new file mode 100644
index 000000000..a438b5baa
--- /dev/null
+++ b/ports/stm32f4/boards/stm32f411ce_blackpill/mpconfigboard.h
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2019 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+//Micropython setup
+
+#define MICROPY_HW_BOARD_NAME "stm32f411ce-blackpill"
+#define MICROPY_HW_MCU_NAME "STM32F411CE"
+
+#define FLASH_SIZE (0x80000)
+#define FLASH_PAGE_SIZE (0x4000)
+
+#define BOARD_OSC_DIV 25
+
+// On-board flash
+// #define SPI_FLASH_MOSI_PIN (&pin_PA07)
+// #define SPI_FLASH_MISO_PIN (&pin_PA06)
+// #define SPI_FLASH_SCK_PIN (&pin_PA05)
+// #define SPI_FLASH_CS_PIN (&pin_PA04)
+
+#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
+
+#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x2000 - 0xC000)
+
+#define AUTORESET_DELAY_MS 500
diff --git a/ports/stm32f4/boards/stm32f411ce_blackpill/mpconfigboard.mk b/ports/stm32f4/boards/stm32f411ce_blackpill/mpconfigboard.mk
new file mode 100644
index 000000000..d4f0f9577
--- /dev/null
+++ b/ports/stm32f4/boards/stm32f411ce_blackpill/mpconfigboard.mk
@@ -0,0 +1,22 @@
+USB_VID = 0x239A
+USB_PID = 0x806A
+USB_PRODUCT = "stm32f411ce blackpill"
+USB_MANUFACTURER = "Unknown"
+USB_DEVICES = "CDC,MSC"
+
+# SPI_FLASH_FILESYSTEM = 1
+# EXTERNAL_FLASH_DEVICE_COUNT = 1
+# EXTERNAL_FLASH_DEVICES = xxxxxx #See supervisor/shared/external_flash/devices.h for options
+# LONGINT_IMPL = MPZ
+
+INTERNAL_FLASH_FILESYSTEM = 1
+LONGINT_IMPL = NONE
+
+MCU_SERIES = m4
+MCU_VARIANT = stm32f4
+MCU_SUB_VARIANT = stm32f411xe
+MCU_PACKAGE = 48
+CMSIS_MCU = STM32F411xE
+LD_FILE = boards/STM32F411VETx_FLASH.ld
+TEXT0_ADDR = 0x08000000
+TEXT1_ADDR = 0x08020000
diff --git a/ports/stm32f4/boards/stm32f411ce_blackpill/pins.c b/ports/stm32f4/boards/stm32f411ce_blackpill/pins.c
new file mode 100644
index 000000000..5797a9762
--- /dev/null
+++ b/ports/stm32f4/boards/stm32f411ce_blackpill/pins.c
@@ -0,0 +1,40 @@
+#include "shared-bindings/board/__init__.h"
+
+STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
+ { MP_ROM_QSTR(MP_QSTR_B12), MP_ROM_PTR(&pin_PB12) },
+ { MP_ROM_QSTR(MP_QSTR_B13), MP_ROM_PTR(&pin_PB13) },
+ { MP_ROM_QSTR(MP_QSTR_B14), MP_ROM_PTR(&pin_PB14) },
+ { MP_ROM_QSTR(MP_QSTR_B15), MP_ROM_PTR(&pin_PB15) },
+ { MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_PTR(&pin_PA08) },
+ { MP_ROM_QSTR(MP_QSTR_A9), MP_ROM_PTR(&pin_PA09) }, //USB (shouldn't be used)
+ { MP_ROM_QSTR(MP_QSTR_A10), MP_ROM_PTR(&pin_PA10) }, //USB (shouldn't be used)
+ { MP_ROM_QSTR(MP_QSTR_A11), MP_ROM_PTR(&pin_PA11) }, //USB (shouldn't be used)
+ { MP_ROM_QSTR(MP_QSTR_A12), MP_ROM_PTR(&pin_PA12) }, //USB (shouldn't be used)
+ { MP_ROM_QSTR(MP_QSTR_A15), MP_ROM_PTR(&pin_PA15) },
+ { MP_ROM_QSTR(MP_QSTR_B3), MP_ROM_PTR(&pin_PB03) },
+ { MP_ROM_QSTR(MP_QSTR_B4), MP_ROM_PTR(&pin_PB04) },
+ { MP_ROM_QSTR(MP_QSTR_B5), MP_ROM_PTR(&pin_PB05) },
+ { MP_ROM_QSTR(MP_QSTR_B6), MP_ROM_PTR(&pin_PB06) },
+ { MP_ROM_QSTR(MP_QSTR_B7), MP_ROM_PTR(&pin_PB07) },
+ { MP_ROM_QSTR(MP_QSTR_B8), MP_ROM_PTR(&pin_PB08) },
+ { MP_ROM_QSTR(MP_QSTR_B9), MP_ROM_PTR(&pin_PB09) },
+
+ { MP_ROM_QSTR(MP_QSTR_B10), MP_ROM_PTR(&pin_PB10) },
+ { MP_ROM_QSTR(MP_QSTR_B2), MP_ROM_PTR(&pin_PB02) },
+ { MP_ROM_QSTR(MP_QSTR_B1), MP_ROM_PTR(&pin_PB01) },
+ { MP_ROM_QSTR(MP_QSTR_B0), MP_ROM_PTR(&pin_PB00) },
+ { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_PA07) },
+ { MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_PA06) },
+ { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PA05) },
+ { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA04) },
+ { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA03) },
+ { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PA02) },
+ { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA01) },
+ { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA00) },
+ { MP_ROM_QSTR(MP_QSTR_C15), MP_ROM_PTR(&pin_PC15) },
+ { MP_ROM_QSTR(MP_QSTR_C14), MP_ROM_PTR(&pin_PC14) },
+ { MP_ROM_QSTR(MP_QSTR_C13), MP_ROM_PTR(&pin_PC13) },
+
+ { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PC13) },
+};
+MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
diff --git a/ports/stm32f4/boards/stm32f411ce_blackpill/stm32f4xx_hal_conf.h b/ports/stm32f4/boards/stm32f411ce_blackpill/stm32f4xx_hal_conf.h
new file mode 100644
index 000000000..81d29f242
--- /dev/null
+++ b/ports/stm32f4/boards/stm32f411ce_blackpill/stm32f4xx_hal_conf.h
@@ -0,0 +1,440 @@
+/**
+ ******************************************************************************
+ * @file stm32f4xx_hal_conf_template.h
+ * @author MCD Application Team
+ * @brief HAL configuration template file.
+ * This file should be copied to the application folder and renamed
+ * to stm32f4xx_hal_conf.h.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32F4xx_HAL_CONF_H
+#define __STM32F4xx_HAL_CONF_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+
+/* ########################## Module Selection ############################## */
+/**
+ * @brief This is the list of modules to be used in the HAL driver
+ */
+#define HAL_MODULE_ENABLED
+
+#define HAL_ADC_MODULE_ENABLED
+/* #define HAL_CRYP_MODULE_ENABLED */
+/* #define HAL_CAN_MODULE_ENABLED */
+/* #define HAL_CRC_MODULE_ENABLED */
+/* #define HAL_CRYP_MODULE_ENABLED */
+#define HAL_DAC_MODULE_ENABLED
+/* #define HAL_DCMI_MODULE_ENABLED */
+/* #define HAL_DMA2D_MODULE_ENABLED */
+/* #define HAL_ETH_MODULE_ENABLED */
+/* #define HAL_NAND_MODULE_ENABLED */
+/* #define HAL_NOR_MODULE_ENABLED */
+/* #define HAL_PCCARD_MODULE_ENABLED */
+/* #define HAL_SRAM_MODULE_ENABLED */
+/* #define HAL_SDRAM_MODULE_ENABLED */
+/* #define HAL_HASH_MODULE_ENABLED */
+#define HAL_I2C_MODULE_ENABLED
+#define HAL_I2S_MODULE_ENABLED
+/* #define HAL_IWDG_MODULE_ENABLED */
+/* #define HAL_LTDC_MODULE_ENABLED */
+/* #define HAL_RNG_MODULE_ENABLED */
+/* #define HAL_RTC_MODULE_ENABLED */
+/* #define HAL_SAI_MODULE_ENABLED */
+/* #define HAL_SD_MODULE_ENABLED */
+/* #define HAL_MMC_MODULE_ENABLED */
+#define HAL_SPI_MODULE_ENABLED
+#define HAL_TIM_MODULE_ENABLED
+#define HAL_UART_MODULE_ENABLED
+#define HAL_USART_MODULE_ENABLED
+/* #define HAL_IRDA_MODULE_ENABLED */
+/* #define HAL_SMARTCARD_MODULE_ENABLED */
+/* #define HAL_WWDG_MODULE_ENABLED */
+/* #define HAL_PCD_MODULE_ENABLED */
+/* #define HAL_HCD_MODULE_ENABLED */
+/* #define HAL_DSI_MODULE_ENABLED */
+/* #define HAL_QSPI_MODULE_ENABLED */
+/* #define HAL_QSPI_MODULE_ENABLED */
+/* #define HAL_CEC_MODULE_ENABLED */
+/* #define HAL_FMPI2C_MODULE_ENABLED */
+/* #define HAL_SPDIFRX_MODULE_ENABLED */
+/* #define HAL_DFSDM_MODULE_ENABLED */
+/* #define HAL_LPTIM_MODULE_ENABLED */
+/* #define HAL_EXTI_MODULE_ENABLED */
+#define HAL_GPIO_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED
+#define HAL_DMA_MODULE_ENABLED
+#define HAL_RCC_MODULE_ENABLED
+#define HAL_FLASH_MODULE_ENABLED
+#define HAL_PWR_MODULE_ENABLED
+#define HAL_CORTEX_MODULE_ENABLED
+
+/* ########################## HSE/HSI Values adaptation ##################### */
+/**
+ * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
+ * This value is used by the RCC HAL module to compute the system frequency
+ * (when HSE is used as system clock source, directly or through the PLL).
+ */
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSE_STARTUP_TIMEOUT)
+ #define HSE_STARTUP_TIMEOUT ((uint32_t)100U) /*!< Time out for HSE start up, in ms */
+#endif /* HSE_STARTUP_TIMEOUT */
+
+/**
+ * @brief Internal High Speed oscillator (HSI) value.
+ * This value is used by the RCC HAL module to compute the system frequency
+ * (when HSI is used as system clock source, directly or through the PLL).
+ */
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @brief Internal Low Speed oscillator (LSI) value.
+ */
+#if !defined (LSI_VALUE)
+ #define LSI_VALUE ((uint32_t)40000)
+#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+ The real value may vary depending on the variations
+ in voltage and temperature. */
+/**
+ * @brief External Low Speed oscillator (LSE) value.
+ */
+#if !defined (LSE_VALUE)
+ #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External Low Speed oscillator in Hz */
+#endif /* LSE_VALUE */
+
+#if !defined (LSE_STARTUP_TIMEOUT)
+ #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */
+#endif /* LSE_STARTUP_TIMEOUT */
+
+
+/**
+ * @brief External clock source for I2S peripheral
+ * This value is used by the I2S HAL module to compute the I2S clock source
+ * frequency, this source is inserted directly through I2S_CKIN pad.
+ */
+#if !defined (EXTERNAL_CLOCK_VALUE)
+ #define EXTERNAL_CLOCK_VALUE ((uint32_t)12288000U) /*!< Value of the External audio frequency in Hz*/
+#endif /* EXTERNAL_CLOCK_VALUE */
+
+/* Tip: To avoid modifying this file each time you need to use different HSE,
+ === you can define the HSE value in your toolchain compiler preprocessor. */
+
+/* ########################### System Configuration ######################### */
+/**
+ * @brief This is the HAL system configuration section
+ */
+#define VDD_VALUE ((uint32_t)3300U) /*!< Value of VDD in mv */
+#define TICK_INT_PRIORITY ((uint32_t)0U) /*!< tick interrupt priority */
+#define USE_RTOS 0U
+#define PREFETCH_ENABLE 1U
+#define INSTRUCTION_CACHE_ENABLE 1U
+#define DATA_CACHE_ENABLE 1U
+
+/* ########################## Assert Selection ############################## */
+/**
+ * @brief Uncomment the line below to expanse the "assert_param" macro in the
+ * HAL drivers code
+ */
+/* #define USE_FULL_ASSERT 1U */
+
+/* ################## Ethernet peripheral configuration ##################### */
+
+/* Section 1 : Ethernet peripheral configuration */
+
+/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */
+#define MAC_ADDR0 2U
+#define MAC_ADDR1 0U
+#define MAC_ADDR2 0U
+#define MAC_ADDR3 0U
+#define MAC_ADDR4 0U
+#define MAC_ADDR5 0U
+
+/* Definition of the Ethernet driver buffers size and count */
+#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */
+#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */
+#define ETH_RXBUFNB ((uint32_t)4U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */
+#define ETH_TXBUFNB ((uint32_t)4U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */
+
+/* Section 2: PHY configuration section */
+
+/* DP83848_PHY_ADDRESS Address*/
+#define DP83848_PHY_ADDRESS 0x01U
+/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/
+#define PHY_RESET_DELAY ((uint32_t)0x000000FFU)
+/* PHY Configuration delay */
+#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFFU)
+
+#define PHY_READ_TO ((uint32_t)0x0000FFFFU)
+#define PHY_WRITE_TO ((uint32_t)0x0000FFFFU)
+
+/* Section 3: Common PHY Registers */
+
+#define PHY_BCR ((uint16_t)0x0000U) /*!< Transceiver Basic Control Register */
+#define PHY_BSR ((uint16_t)0x0001U) /*!< Transceiver Basic Status Register */
+
+#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */
+#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */
+#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */
+#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */
+#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */
+#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */
+#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */
+#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */
+#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */
+#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */
+
+#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */
+#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */
+#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */
+
+/* Section 4: Extended PHY Registers */
+#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */
+
+#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */
+#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */
+
+/* ################## SPI peripheral configuration ########################## */
+
+/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
+* Activated: CRC code is present inside driver
+* Deactivated: CRC code cleaned from driver
+*/
+
+#define USE_SPI_CRC 0U
+
+/* Includes ------------------------------------------------------------------*/
+/**
+ * @brief Include module's header file
+ */
+
+#ifdef HAL_RCC_MODULE_ENABLED
+ #include "stm32f4xx_hal_rcc.h"
+#endif /* HAL_RCC_MODULE_ENABLED */
+
+#ifdef HAL_EXTI_MODULE_ENABLED
+ #include "stm32f4xx_hal_exti.h"
+#endif /* HAL_EXTI_MODULE_ENABLED */
+
+#ifdef HAL_GPIO_MODULE_ENABLED
+ #include "stm32f4xx_hal_gpio.h"
+#endif /* HAL_GPIO_MODULE_ENABLED */
+
+#ifdef HAL_DMA_MODULE_ENABLED
+ #include "stm32f4xx_hal_dma.h"
+#endif /* HAL_DMA_MODULE_ENABLED */
+
+#ifdef HAL_CORTEX_MODULE_ENABLED
+ #include "stm32f4xx_hal_cortex.h"
+#endif /* HAL_CORTEX_MODULE_ENABLED */
+
+#ifdef HAL_ADC_MODULE_ENABLED
+ #include "stm32f4xx_hal_adc.h"
+#endif /* HAL_ADC_MODULE_ENABLED */
+
+#ifdef HAL_CAN_MODULE_ENABLED
+ #include "stm32f4xx_hal_can.h"
+#endif /* HAL_CAN_MODULE_ENABLED */
+
+#ifdef HAL_CRC_MODULE_ENABLED
+ #include "stm32f4xx_hal_crc.h"
+#endif /* HAL_CRC_MODULE_ENABLED */
+
+#ifdef HAL_CRYP_MODULE_ENABLED
+ #include "stm32f4xx_hal_cryp.h"
+#endif /* HAL_CRYP_MODULE_ENABLED */
+
+#ifdef HAL_DMA2D_MODULE_ENABLED
+ #include "stm32f4xx_hal_dma2d.h"
+#endif /* HAL_DMA2D_MODULE_ENABLED */
+
+#ifdef HAL_DAC_MODULE_ENABLED
+ #include "stm32f4xx_hal_dac.h"
+#endif /* HAL_DAC_MODULE_ENABLED */
+
+#ifdef HAL_DCMI_MODULE_ENABLED
+ #include "stm32f4xx_hal_dcmi.h"
+#endif /* HAL_DCMI_MODULE_ENABLED */
+
+#ifdef HAL_ETH_MODULE_ENABLED
+ #include "stm32f4xx_hal_eth.h"
+#endif /* HAL_ETH_MODULE_ENABLED */
+
+#ifdef HAL_FLASH_MODULE_ENABLED
+ #include "stm32f4xx_hal_flash.h"
+#endif /* HAL_FLASH_MODULE_ENABLED */
+
+#ifdef HAL_SRAM_MODULE_ENABLED
+ #include "stm32f4xx_hal_sram.h"
+#endif /* HAL_SRAM_MODULE_ENABLED */
+
+#ifdef HAL_NOR_MODULE_ENABLED
+ #include "stm32f4xx_hal_nor.h"
+#endif /* HAL_NOR_MODULE_ENABLED */
+
+#ifdef HAL_NAND_MODULE_ENABLED
+ #include "stm32f4xx_hal_nand.h"
+#endif /* HAL_NAND_MODULE_ENABLED */
+
+#ifdef HAL_PCCARD_MODULE_ENABLED
+ #include "stm32f4xx_hal_pccard.h"
+#endif /* HAL_PCCARD_MODULE_ENABLED */
+
+#ifdef HAL_SDRAM_MODULE_ENABLED
+ #include "stm32f4xx_hal_sdram.h"
+#endif /* HAL_SDRAM_MODULE_ENABLED */
+
+#ifdef HAL_HASH_MODULE_ENABLED
+ #include "stm32f4xx_hal_hash.h"
+#endif /* HAL_HASH_MODULE_ENABLED */
+
+#ifdef HAL_I2C_MODULE_ENABLED
+ #include "stm32f4xx_hal_i2c.h"
+#endif /* HAL_I2C_MODULE_ENABLED */
+
+#ifdef HAL_I2S_MODULE_ENABLED
+ #include "stm32f4xx_hal_i2s.h"
+#endif /* HAL_I2S_MODULE_ENABLED */
+
+#ifdef HAL_IWDG_MODULE_ENABLED
+ #include "stm32f4xx_hal_iwdg.h"
+#endif /* HAL_IWDG_MODULE_ENABLED */
+
+#ifdef HAL_LTDC_MODULE_ENABLED
+ #include "stm32f4xx_hal_ltdc.h"
+#endif /* HAL_LTDC_MODULE_ENABLED */
+
+#ifdef HAL_PWR_MODULE_ENABLED
+ #include "stm32f4xx_hal_pwr.h"
+#endif /* HAL_PWR_MODULE_ENABLED */
+
+#ifdef HAL_RNG_MODULE_ENABLED
+ #include "stm32f4xx_hal_rng.h"
+#endif /* HAL_RNG_MODULE_ENABLED */
+
+#ifdef HAL_RTC_MODULE_ENABLED
+ #include "stm32f4xx_hal_rtc.h"
+#endif /* HAL_RTC_MODULE_ENABLED */
+
+#ifdef HAL_SAI_MODULE_ENABLED
+ #include "stm32f4xx_hal_sai.h"
+#endif /* HAL_SAI_MODULE_ENABLED */
+
+#ifdef HAL_SD_MODULE_ENABLED
+ #include "stm32f4xx_hal_sd.h"
+#endif /* HAL_SD_MODULE_ENABLED */
+
+#ifdef HAL_MMC_MODULE_ENABLED
+ #include "stm32f4xx_hal_mmc.h"
+#endif /* HAL_MMC_MODULE_ENABLED */
+
+#ifdef HAL_SPI_MODULE_ENABLED
+ #include "stm32f4xx_hal_spi.h"
+#endif /* HAL_SPI_MODULE_ENABLED */
+
+#ifdef HAL_TIM_MODULE_ENABLED
+ #include "stm32f4xx_hal_tim.h"
+#endif /* HAL_TIM_MODULE_ENABLED */
+
+#ifdef HAL_UART_MODULE_ENABLED
+ #include "stm32f4xx_hal_uart.h"
+#endif /* HAL_UART_MODULE_ENABLED */
+
+#ifdef HAL_USART_MODULE_ENABLED
+ #include "stm32f4xx_hal_usart.h"
+#endif /* HAL_USART_MODULE_ENABLED */
+
+#ifdef HAL_IRDA_MODULE_ENABLED
+ #include "stm32f4xx_hal_irda.h"
+#endif /* HAL_IRDA_MODULE_ENABLED */
+
+#ifdef HAL_SMARTCARD_MODULE_ENABLED
+ #include "stm32f4xx_hal_smartcard.h"
+#endif /* HAL_SMARTCARD_MODULE_ENABLED */
+
+#ifdef HAL_WWDG_MODULE_ENABLED
+ #include "stm32f4xx_hal_wwdg.h"
+#endif /* HAL_WWDG_MODULE_ENABLED */
+
+#ifdef HAL_PCD_MODULE_ENABLED
+ #include "stm32f4xx_hal_pcd.h"
+#endif /* HAL_PCD_MODULE_ENABLED */
+
+#ifdef HAL_HCD_MODULE_ENABLED
+ #include "stm32f4xx_hal_hcd.h"
+#endif /* HAL_HCD_MODULE_ENABLED */
+
+#ifdef HAL_DSI_MODULE_ENABLED
+ #include "stm32f4xx_hal_dsi.h"
+#endif /* HAL_DSI_MODULE_ENABLED */
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+ #include "stm32f4xx_hal_qspi.h"
+#endif /* HAL_QSPI_MODULE_ENABLED */
+
+#ifdef HAL_CEC_MODULE_ENABLED
+ #include "stm32f4xx_hal_cec.h"
+#endif /* HAL_CEC_MODULE_ENABLED */
+
+#ifdef HAL_FMPI2C_MODULE_ENABLED
+ #include "stm32f4xx_hal_fmpi2c.h"
+#endif /* HAL_FMPI2C_MODULE_ENABLED */
+
+#ifdef HAL_SPDIFRX_MODULE_ENABLED
+ #include "stm32f4xx_hal_spdifrx.h"
+#endif /* HAL_SPDIFRX_MODULE_ENABLED */
+
+#ifdef HAL_DFSDM_MODULE_ENABLED
+ #include "stm32f4xx_hal_dfsdm.h"
+#endif /* HAL_DFSDM_MODULE_ENABLED */
+
+#ifdef HAL_LPTIM_MODULE_ENABLED
+ #include "stm32f4xx_hal_lptim.h"
+#endif /* HAL_LPTIM_MODULE_ENABLED */
+
+/* Exported macro ------------------------------------------------------------*/
+#ifdef USE_FULL_ASSERT
+/**
+ * @brief The assert_param macro is used for function's parameters check.
+ * @param expr: If expr is false, it calls assert_failed function
+ * which reports the name of the source file and the source
+ * line number of the call that failed.
+ * If expr is true, it returns no value.
+ * @retval None
+ */
+ #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
+/* Exported functions ------------------------------------------------------- */
+ void assert_failed(uint8_t* file, uint32_t line);
+#else
+ #define assert_param(expr) ((void)0U)
+#endif /* USE_FULL_ASSERT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32F4xx_HAL_CONF_H */
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/ports/stm32f4/boards/stm32f411ve_discovery/mpconfigboard.h b/ports/stm32f4/boards/stm32f411ve_discovery/mpconfigboard.h
index 0c6f537f8..7a5335407 100644
--- a/ports/stm32f4/boards/stm32f411ve_discovery/mpconfigboard.h
+++ b/ports/stm32f4/boards/stm32f411ve_discovery/mpconfigboard.h
@@ -33,9 +33,3 @@
#define FLASH_PAGE_SIZE (0x4000) //16K
#define BOARD_OSC_DIV 8
-
-#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
-
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x2000 - 0xC000)
-
-#define AUTORESET_DELAY_MS 500
diff --git a/ports/stm32f4/boards/stm32f412zg_discovery/mpconfigboard.h b/ports/stm32f4/boards/stm32f412zg_discovery/mpconfigboard.h
index 45505dee2..3ab9a5585 100644
--- a/ports/stm32f4/boards/stm32f412zg_discovery/mpconfigboard.h
+++ b/ports/stm32f4/boards/stm32f412zg_discovery/mpconfigboard.h
@@ -32,8 +32,5 @@
#define FLASH_SIZE (0x100000)
#define FLASH_PAGE_SIZE (0x4000)
-#define AUTORESET_DELAY_MS 500
-#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000)
-
#define DEFAULT_I2C_BUS_SCL (&pin_PB10)
#define DEFAULT_I2C_BUS_SDA (&pin_PB09)
diff --git a/ports/stm32f4/peripherals/stm32f4/stm32f411xe/gpio.c b/ports/stm32f4/peripherals/stm32f4/stm32f411xe/gpio.c
index 2b0e2b288..651aea269 100644
--- a/ports/stm32f4/peripherals/stm32f4/stm32f411xe/gpio.c
+++ b/ports/stm32f4/peripherals/stm32f4/stm32f411xe/gpio.c
@@ -38,7 +38,6 @@ void stm32f4_peripherals_gpio_init(void) {
__HAL_RCC_GPIOD_CLK_ENABLE();
//Never reset pins
- never_reset_pin_number(2,13); //PC13 anti tamp
never_reset_pin_number(2,14); //PC14 OSC32_IN
never_reset_pin_number(2,15); //PC15 OSC32_OUT
never_reset_pin_number(0,13); //PA13 SWDIO
diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk
index 446620d27..8dd4fc6b1 100644
--- a/py/circuitpy_defns.mk
+++ b/py/circuitpy_defns.mk
@@ -297,7 +297,6 @@ $(filter $(SRC_PATTERNS), \
fontio/Glyph.c \
microcontroller/RunMode.c \
math/__init__.c \
- supervisor/__init__.c \
)
SRC_BINDINGS_ENUMS += \
@@ -428,6 +427,18 @@ $(addprefix lib/,\
)
endif
+ifdef LD_TEMPLATE_FILE
+# Generate a linker script (.ld file) from a template, for those builds that use it.
+GENERATED_LD_FILE = $(BUILD)/$(notdir $(patsubst %.template.ld,%.ld,$(LD_TEMPLATE_FILE)))
+#
+# ld_defines.pp is generated from ld_defines.c. See py/mkrules.mk.
+# Run gen_ld_files.py over ALL *.template.ld files, not just LD_TEMPLATE_FILE,
+# because it may include other template files.
+$(GENERATED_LD_FILE): $(BUILD)/ld_defines.pp boards/*.template.ld
+ $(STEPECHO) "GEN $@"
+ $(Q)$(PYTHON3) $(TOP)/tools/gen_ld_files.py --defines $< --out_dir $(BUILD) boards/*.template.ld
+endif
+
.PHONY: check-release-needs-clean-build
check-release-needs-clean-build:
diff --git a/py/circuitpy_mpconfig.h b/py/circuitpy_mpconfig.h
index 5ee5d52c0..3161938c4 100644
--- a/py/circuitpy_mpconfig.h
+++ b/py/circuitpy_mpconfig.h
@@ -140,7 +140,6 @@
#define MICROPY_VFS_FAT (MICROPY_VFS)
#define MICROPY_READER_VFS (MICROPY_VFS)
-
// type definitions for the specific machine
#define BYTES_PER_WORD (4)
@@ -168,13 +167,15 @@ typedef long mp_off_t;
#define mp_import_stat mp_vfs_import_stat
#define mp_builtin_open_obj mp_vfs_open_obj
+
// extra built in names to add to the global namespace
#define MICROPY_PORT_BUILTINS \
{ MP_OBJ_NEW_QSTR(MP_QSTR_help), (mp_obj_t)&mp_builtin_help_obj }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },
-// board specific definitions
+//////////////////////////////////////////////////////////////////////////////////////////////////
+// board-specific definitions, which control and may override definitions below.
#include "mpconfigboard.h"
// CIRCUITPY_FULL_BUILD is defined in a *.mk file.
@@ -213,6 +214,9 @@ typedef long mp_off_t;
#define MP_SSIZE_MAX (0x7fffffff)
#endif
+#if INTERNAL_FLASH_FILESYSTEM == 0 && QSPI_FLASH_FILESYSTEM == 0 && SPI_FLASH_FILESYSTEM == 0 && !CIRCUITPY_MINIMAL_BUILD
+#error No *_FLASH_FILESYSTEM set!
+#endif
// These CIRCUITPY_xxx values should all be defined in the *.mk files as being on or off.
// So if any are not defined in *.mk, they'll throw an error here.
@@ -670,8 +674,15 @@ void supervisor_run_background_tasks_if_tick(void);
#define MICROPY_VM_HOOK_LOOP RUN_BACKGROUND_TASKS;
#define MICROPY_VM_HOOK_RETURN RUN_BACKGROUND_TASKS;
+// CIRCUITPY_AUTORELOAD_DELAY_MS = 0 will completely disable autoreload.
+#ifndef CIRCUITPY_AUTORELOAD_DELAY_MS
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500
+#endif
+
+#ifndef CIRCUITPY_FILESYSTEM_FLUSH_INTERVAL_MS
#define CIRCUITPY_FILESYSTEM_FLUSH_INTERVAL_MS 1000
+#endif
+
#define CIRCUITPY_BOOT_OUTPUT_FILE "/boot_out.txt"
#define CIRCUITPY_VERBOSE_BLE 0
diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk
index c614ea06a..a464583f3 100644
--- a/py/circuitpy_mpconfig.mk
+++ b/py/circuitpy_mpconfig.mk
@@ -23,7 +23,6 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-
# mpconfigboard.mk files can specify:
# CIRCUITPY_FULL_BUILD = 1 (which is the default)
# or
@@ -34,15 +33,19 @@
ifndef CIRCUITPY_FULL_BUILD
ifeq ($(CIRCUITPY_SMALL_BUILD),1)
CIRCUITPY_FULL_BUILD = 0
- CFLAGS += -DCIRCUITPY_FULL_BUILD=0
else
CIRCUITPY_FULL_BUILD = 1
- CFLAGS += -DCIRCUITPY_FULL_BUILD=1
endif
endif
+CFLAGS += -DCIRCUITPY_FULL_BUILD=$(CIRCUITPY_FULL_BUILD)
# Setting CIRCUITPY_MINIMAL_BUILD = 1 will disable all features
# Use for for early stage or highly restricted ports
+ifndef CIRCUITPY_MINIMAL_BUILD
+CIRCUITPY_MINIMAL_BUILD = 0
+endif
+CFLAGS += -DCIRCUITPY_MINIMAL_BUILD=$(CIRCUITPY_MINIMAL_BUILD)
+
ifndef CIRCUITPY_DEFAULT_BUILD
ifeq ($(CIRCUITPY_MINIMAL_BUILD),1)
CIRCUITPY_FULL_BUILD = 0
@@ -51,12 +54,14 @@ ifndef CIRCUITPY_DEFAULT_BUILD
CIRCUITPY_DEFAULT_BUILD = 1
endif
endif
+CFLAGS += -DCIRCUITPY_DEFAULT_BUILD=$(CIRCUITPY_DEFAULT_BUILD)
# Some features have no unique HAL component, and thus there's never
# a reason to not include them.
ifndef CIRCUITPY_ALWAYS_BUILD
CIRCUITPY_ALWAYS_BUILD = 1
endif
+CFLAGS += -DCIRCUITPY_ALWAYS_BUILD=$(CIRCUITPY_ALWAYS_BUILD)
# All builtin modules are listed below, with default values (0 for off, 1 for on)
@@ -298,12 +303,24 @@ CIRCUITPY_USTACK = 0
endif
CFLAGS += -DCIRCUITPY_USTACK=$(CIRCUITPY_USTACK)
+# Non-module conditionals
ifndef CIRCUITPY_BITBANG_APA102
CIRCUITPY_BITBANG_APA102 = 0
endif
CFLAGS += -DCIRCUITPY_BITBANG_APA102=$(CIRCUITPY_BITBANG_APA102)
+# REPL over BLE
+ifndef CIRCUITPY_SERIAL_BLE
+CIRCUITPY_SERIAL_BLE = 0
+endif
+CFLAGS += -DCIRCUITPY_SERIAL_BLE=$(CIRCUITPY_SERIAL_BLE)
+
+# REPL over UART
+ifndef CIRCUITPY_SERIAL_UART
+CIRCUITPY_SERIAL_UART = 0
+endif
+CFLAGS += -DCIRCUITPY_SERIAL_UART=$(CIRCUITPY_SERIAL_UART)
# Enabled micropython.native decorator (experimental)
ifndef CIRCUITPY_ENABLE_MPY_NATIVE
diff --git a/py/gc.c b/py/gc.c
index a8a5fde12..5e631f5ed 100755
--- a/py/gc.c
+++ b/py/gc.c
@@ -667,6 +667,9 @@ void gc_free(void *ptr) {
if (ptr == NULL) {
GC_EXIT();
} else {
+ if (MP_STATE_MEM(gc_pool_start) == 0) {
+ reset_into_safe_mode(GC_ALLOC_OUTSIDE_VM);
+ }
// get the GC block number corresponding to this pointer
assert(VERIFY_PTR(ptr));
size_t block = BLOCK_FROM_PTR(ptr);
diff --git a/py/mpconfig.h b/py/mpconfig.h
index 3ec383817..a0d211bfa 100755
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -1440,6 +1440,15 @@ typedef double mp_float_t;
#define MP_UNLIKELY(x) __builtin_expect((x), 0)
#endif
+// To annotate that code is unreachable
+#ifndef MP_UNREACHABLE
+#if defined(__GNUC__)
+#define MP_UNREACHABLE __builtin_unreachable();
+#else
+#define MP_UNREACHABLE for (;;);
+#endif
+#endif
+
#ifndef MP_HTOBE16
#if MP_ENDIANNESS_LITTLE
# define MP_HTOBE16(x) ((uint16_t)( (((x) & 0xff) << 8) | (((x) >> 8) & 0xff) ))
diff --git a/py/nlr.h b/py/nlr.h
index b442aaf8a..1b95002d3 100644
--- a/py/nlr.h
+++ b/py/nlr.h
@@ -54,7 +54,14 @@
#endif
#elif defined(__thumb2__) || defined(__thumb__) || defined(__arm__)
#define MICROPY_NLR_THUMB (1)
- #define MICROPY_NLR_NUM_REGS (10)
+ #if defined(__SOFTFP__)
+ #define MICROPY_NLR_NUM_REGS (10)
+ #else
+ // With hardware FP registers s16-s31 are callee save so in principle
+ // should be saved and restored by the NLR code. gcc only uses s16-s21
+ // so only save/restore those as an optimisation.
+ #define MICROPY_NLR_NUM_REGS (10 + 6)
+ #endif
#elif defined(__xtensa__)
#define MICROPY_NLR_XTENSA (1)
#define MICROPY_NLR_NUM_REGS (10)
diff --git a/py/nlrthumb.c b/py/nlrthumb.c
index 69d3f868a..056aa358e 100644
--- a/py/nlrthumb.c
+++ b/py/nlrthumb.c
@@ -63,6 +63,11 @@ __attribute__((naked)) unsigned int nlr_push(nlr_buf_t *nlr) {
"str r10, [r0, #36] \n" // store r10 into nlr_buf
"str r11, [r0, #40] \n" // store r11 into nlr_buf
"str r13, [r0, #44] \n" // store r13=sp into nlr_buf
+ #if MICROPY_NLR_NUM_REGS == 16
+ "vstr d8, [r0, #48] \n" // store s16-s17 into nlr_buf
+ "vstr d9, [r0, #56] \n" // store s18-s19 into nlr_buf
+ "vstr d10, [r0, #64] \n" // store s20-s21 into nlr_buf
+ #endif
"str lr, [r0, #8] \n" // store lr into nlr_buf
#endif
@@ -118,6 +123,11 @@ NORETURN void nlr_jump(void *val) {
"ldr r10, [r0, #36] \n" // load r10 from nlr_buf
"ldr r11, [r0, #40] \n" // load r11 from nlr_buf
"ldr r13, [r0, #44] \n" // load r13=sp from nlr_buf
+ #if MICROPY_NLR_NUM_REGS == 16
+ "vldr d8, [r0, #48] \n" // load s16-s17 from nlr_buf
+ "vldr d9, [r0, #56] \n" // load s18-s19 from nlr_buf
+ "vldr d10, [r0, #64] \n" // load s20-s21 from nlr_buf
+ #endif
"ldr lr, [r0, #8] \n" // load lr from nlr_buf
#endif
"movs r0, #1 \n" // return 1, non-local return
@@ -127,11 +137,7 @@ NORETURN void nlr_jump(void *val) {
: // clobbered registers
);
- #if defined(__GNUC__)
- __builtin_unreachable();
- #else
- for (;;); // needed to silence compiler warning
- #endif
+ MP_UNREACHABLE
}
#endif // MICROPY_NLR_THUMB
diff --git a/py/nlrx64.c b/py/nlrx64.c
index 9b2b22c22..569ad84fb 100644
--- a/py/nlrx64.c
+++ b/py/nlrx64.c
@@ -108,7 +108,7 @@ NORETURN void nlr_jump(void *val) {
: // clobbered registers
);
- for (;;); // needed to silence compiler warning
+ MP_UNREACHABLE
}
#endif // MICROPY_NLR_X64
diff --git a/py/nlrx86.c b/py/nlrx86.c
index 4900a4c0d..6fbbe4432 100644
--- a/py/nlrx86.c
+++ b/py/nlrx86.c
@@ -100,7 +100,7 @@ NORETURN void nlr_jump(void *val) {
: // clobbered registers
);
- for (;;); // needed to silence compiler warning
+ MP_UNREACHABLE
}
#endif // MICROPY_NLR_X86
diff --git a/py/nlrxtensa.c b/py/nlrxtensa.c
index d66c7a9a7..564035004 100644
--- a/py/nlrxtensa.c
+++ b/py/nlrxtensa.c
@@ -77,7 +77,7 @@ NORETURN void nlr_jump(void *val) {
: // clobbered registers
);
- for (;;); // needed to silence compiler warning
+ MP_UNREACHABLE
}
#endif // MICROPY_NLR_XTENSA
diff --git a/py/py.mk b/py/py.mk
index ae9b005b6..0c68e9af1 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -308,7 +308,7 @@ $(HEADER_BUILD)/mpversion.h: FORCE | $(HEADER_BUILD)
# build a list of registered modules for py/objmodule.c.
$(HEADER_BUILD)/moduledefs.h: $(SRC_QSTR) $(QSTR_GLOBAL_DEPENDENCIES) | $(HEADER_BUILD)/mpversion.h
- @$(ECHO) "GEN $@"
+ @$(STEPECHO) "GEN $@"
$(Q)$(PYTHON) $(PY_SRC)/makemoduledefs.py --vpath="., $(TOP), $(USER_C_MODULES)" $(SRC_QSTR) > $@
SRC_QSTR += $(HEADER_BUILD)/moduledefs.h
diff --git a/shared-bindings/_bleio/Adapter.c b/shared-bindings/_bleio/Adapter.c
index 9772fa830..5d3211b0c 100644
--- a/shared-bindings/_bleio/Adapter.c
+++ b/shared-bindings/_bleio/Adapter.c
@@ -29,6 +29,7 @@
#include "py/objproperty.h"
#include "py/runtime.h"
+#include "shared-bindings/_bleio/__init__.h"
#include "shared-bindings/_bleio/Address.h"
#include "shared-bindings/_bleio/Adapter.h"
@@ -185,7 +186,12 @@ STATIC mp_obj_t bleio_adapter_start_advertising(mp_uint_t n_args, const mp_obj_t
ADV_INTERVAL_MIN_STRING, ADV_INTERVAL_MAX_STRING);
}
- common_hal_bleio_adapter_start_advertising(self, args[ARG_connectable].u_bool, interval,
+ bool connectable = args[ARG_connectable].u_bool;
+ if (data_bufinfo.len > 31 && connectable && scan_response_bufinfo.len > 0) {
+ mp_raise_bleio_BluetoothError(translate("Cannot have scan responses for extended, connectable advertisements."));
+ }
+
+ common_hal_bleio_adapter_start_advertising(self, connectable, interval,
&data_bufinfo, &scan_response_bufinfo);
return mp_const_none;
diff --git a/shared-module/audiomp3/MP3File.c b/shared-module/audiomp3/MP3File.c
index cabb46105..f4861da36 100644
--- a/shared-module/audiomp3/MP3File.c
+++ b/shared-module/audiomp3/MP3File.c
@@ -151,10 +151,13 @@ void common_hal_audiomp3_mp3file_construct(audiomp3_mp3file_obj_t* self,
self->channel_count = fi.nChans;
self->frame_buffer_size = fi.outputSamps*sizeof(int16_t);
+ if ((intptr_t)buffer & 1) {
+ buffer += 1; buffer_size -= 1;
+ }
if (buffer_size >= 2 * self->frame_buffer_size) {
self->len = buffer_size / 2 / self->frame_buffer_size * self->frame_buffer_size;
- self->buffers[0] = buffer;
- self->buffers[1] = buffer + self->len;
+ self->buffers[0] = (int16_t*)(void*)buffer;
+ self->buffers[1] = (int16_t*)(void*)buffer + self->len;
} else {
self->len = 2 * self->frame_buffer_size;
self->buffers[0] = m_malloc(self->len, false);
@@ -218,6 +221,7 @@ void audiomp3_mp3file_reset_buffer(audiomp3_mp3file_obj_t* self,
f_lseek(&self->file->fp, 0);
self->inbuf_offset = self->inbuf_length;
self->eof = 0;
+ self->other_channel = -1;
mp3file_update_inbuf(self);
mp3file_find_sync_word(self);
}
@@ -227,30 +231,37 @@ audioio_get_buffer_result_t audiomp3_mp3file_get_buffer(audiomp3_mp3file_obj_t*
uint8_t channel,
uint8_t** bufptr,
uint32_t* buffer_length) {
+ if (!self->inbuf) {
+ return GET_BUFFER_ERROR;
+ }
if (!single_channel) {
channel = 0;
}
- uint16_t channel_read_count = self->channel_read_count[channel]++;
- bool need_more_data = self->read_count++ == channel_read_count;
-
- *bufptr = self->buffers[self->buffer_index] + channel;
+ *bufptr = (uint8_t*)(self->buffers[self->buffer_index] + channel);
*buffer_length = self->frame_buffer_size;
- if (need_more_data) {
- self->buffer_index = !self->buffer_index;
- int16_t *buffer = (int16_t *)(void *)self->buffers[self->buffer_index];
+ if (channel == self->other_channel) {
+ *bufptr = (uint8_t*)(self->buffers[self->other_buffer_index] + channel);
+ self->other_channel = -1;
+ return GET_BUFFER_MORE_DATA;
+ }
- if (!mp3file_find_sync_word(self)) {
- return self->eof ? GET_BUFFER_DONE : GET_BUFFER_ERROR;
- }
- int bytes_left = BYTES_LEFT(self);
- uint8_t *inbuf = READ_PTR(self);
- int err = MP3Decode(self->decoder, &inbuf, &bytes_left, buffer, 0);
- CONSUME(self, BYTES_LEFT(self) - bytes_left);
- if (err) {
- return GET_BUFFER_DONE;
- }
+ self->other_channel = 1-channel;
+ self->other_buffer_index = self->buffer_index;
+
+ self->buffer_index = !self->buffer_index;
+ int16_t *buffer = (int16_t *)(void *)self->buffers[self->buffer_index];
+
+ if (!mp3file_find_sync_word(self)) {
+ return self->eof ? GET_BUFFER_DONE : GET_BUFFER_ERROR;
+ }
+ int bytes_left = BYTES_LEFT(self);
+ uint8_t *inbuf = READ_PTR(self);
+ int err = MP3Decode(self->decoder, &inbuf, &bytes_left, buffer, 0);
+ CONSUME(self, BYTES_LEFT(self) - bytes_left);
+ if (err) {
+ return GET_BUFFER_DONE;
}
return GET_BUFFER_MORE_DATA;
diff --git a/shared-module/audiomp3/MP3File.h b/shared-module/audiomp3/MP3File.h
index 12649ac1a..9d99e8d1f 100644
--- a/shared-module/audiomp3/MP3File.h
+++ b/shared-module/audiomp3/MP3File.h
@@ -39,7 +39,7 @@ typedef struct {
uint8_t* inbuf;
uint32_t inbuf_length;
uint32_t inbuf_offset;
- uint8_t* buffers[2];
+ int16_t* buffers[2];
uint32_t len;
uint32_t frame_buffer_size;
@@ -50,8 +50,8 @@ typedef struct {
uint8_t channel_count;
bool eof;
- uint16_t read_count;
- uint16_t channel_read_count[2];
+ int8_t other_channel;
+ int8_t other_buffer_index;
} audiomp3_mp3file_obj_t;
// These are not available from Python because it may be called in an interrupt.
diff --git a/supervisor/shared/external_flash/external_flash.c b/supervisor/shared/external_flash/external_flash.c
index 99df553e1..9d38c07d8 100644
--- a/supervisor/shared/external_flash/external_flash.c
+++ b/supervisor/shared/external_flash/external_flash.c
@@ -324,6 +324,10 @@ static bool allocate_ram_cache(void) {
return true;
}
+ if (MP_STATE_MEM(gc_pool_start) == 0) {
+ return false;
+ }
+
MP_STATE_VM(flash_ram_cache) = m_malloc_maybe(blocks_per_sector * pages_per_block * sizeof(uint32_t), false);
if (MP_STATE_VM(flash_ram_cache) == NULL) {
return false;
@@ -367,7 +371,7 @@ static void release_ram_cache(void) {
if (supervisor_cache != NULL) {
free_memory(supervisor_cache);
supervisor_cache = NULL;
- } else {
+ } else if (MP_STATE_MEM(gc_pool_start)) {
m_free(MP_STATE_VM(flash_ram_cache));
}
MP_STATE_VM(flash_ram_cache) = NULL;
@@ -415,7 +419,7 @@ static bool flush_ram_cache(bool keep_cache) {
write_flash(current_sector + (i * pages_per_block + j) * SPI_FLASH_PAGE_SIZE,
MP_STATE_VM(flash_ram_cache)[i * pages_per_block + j],
SPI_FLASH_PAGE_SIZE);
- if (!keep_cache && supervisor_cache == NULL) {
+ if (!keep_cache && supervisor_cache == NULL && MP_STATE_MEM(gc_pool_start)) {
m_free(MP_STATE_VM(flash_ram_cache)[i * pages_per_block + j]);
}
}
diff --git a/supervisor/shared/safe_mode.c b/supervisor/shared/safe_mode.c
index 363181da0..aba31e9c9 100644
--- a/supervisor/shared/safe_mode.c
+++ b/supervisor/shared/safe_mode.c
@@ -94,44 +94,72 @@ void __attribute__((noinline,)) reset_into_safe_mode(safe_mode_t reason) {
reset_cpu();
}
+
+
+#define FILE_AN_ISSUE translate("\nPlease file an issue with the contents of your CIRCUITPY drive at \nhttps://github.com/adafruit/circuitpython/issues\n")
+
void print_safe_mode_message(safe_mode_t reason) {
if (reason == NO_SAFE_MODE) {
return;
}
- serial_write("\r\n");
- // Output a user safe mode string if its set.
+ serial_write("\n");
+ // Output a user safe mode string if it's set.
#ifdef BOARD_USER_SAFE_MODE
if (reason == USER_SAFE_MODE) {
serial_write_compressed(translate("You requested starting safe mode by "));
serial_write(BOARD_USER_SAFE_MODE_ACTION);
- serial_write("\r\n");
- serial_write_compressed(translate("To exit, please reset the board without "));
+ serial_write_compressed(translate("\nTo exit, please reset the board without "));
serial_write(BOARD_USER_SAFE_MODE_ACTION);
- serial_write("\r\n");
+ serial_write("\n");
} else
#endif
- if (reason == MANUAL_SAFE_MODE) {
- serial_write_compressed(translate("The reset button was pressed while booting CircuitPython. Press again to exit safe mode.\n"));
- } else if (reason == PROGRAMMATIC_SAFE_MODE) {
- serial_write_compressed(translate("The `microcontroller` module was used to boot into safe mode. Press reset to exit safe mode.\n"));
- } else {
- serial_write_compressed(translate("You are running in safe mode which means something unanticipated happened.\n"));
- if (reason == HARD_CRASH || reason == MICROPY_NLR_JUMP_FAIL || reason == MICROPY_FATAL_ERROR || reason == GC_ALLOC_OUTSIDE_VM) {
- serial_write_compressed(translate("Looks like our core CircuitPython code crashed hard. Whoops!\nPlease file an issue at https://github.com/adafruit/circuitpython/issues\n with the contents of your CIRCUITPY drive and this message:\n"));
- if (reason == HARD_CRASH) {
- serial_write_compressed(translate("Crash into the HardFault_Handler.\n"));
- } else if (reason == MICROPY_NLR_JUMP_FAIL) {
- serial_write_compressed(translate("MicroPython NLR jump failed. Likely memory corruption.\n"));
- } else if (reason == MICROPY_FATAL_ERROR) {
- serial_write_compressed(translate("MicroPython fatal error.\n"));
- } else if (reason == GC_ALLOC_OUTSIDE_VM) {
- serial_write_compressed(translate("Attempted heap allocation when MicroPython VM not running.\n"));
- }
- } else if (reason == BROWNOUT) {
- serial_write_compressed(translate("The microcontroller's power dipped. Please make sure your power supply provides\nenough power for the whole circuit and press reset (after ejecting CIRCUITPY).\n"));
- } else if (reason == HEAP_OVERWRITTEN) {
- serial_write_compressed(translate("The CircuitPython heap was corrupted because the stack was too small.\nPlease increase stack size limits and press reset (after ejecting CIRCUITPY).\nIf you didn't change the stack, then file an issue here with the contents of your CIRCUITPY drive:\n"));
- serial_write("https://github.com/adafruit/circuitpython/issues\r\n");
+ switch (reason) {
+ case MANUAL_SAFE_MODE:
+ serial_write_compressed(translate("CircuitPython is in safe mode because you pressed the reset button during boot. Press again to exit safe mode.\n"));
+ return;
+ case PROGRAMMATIC_SAFE_MODE:
+ serial_write_compressed(translate("The `microcontroller` module was used to boot into safe mode. Press reset to exit safe mode.\n"));
+ return;
+ default:
+ break;
}
- }
+
+ serial_write_compressed(translate("You are in safe mode: something unanticipated happened.\n"));
+ switch (reason) {
+ case BROWNOUT:
+ serial_write_compressed(translate("The microcontroller's power dipped. Make sure your power supply provides\nenough power for the whole circuit and press reset (after ejecting CIRCUITPY).\n"));
+ return;
+ case HEAP_OVERWRITTEN:
+ serial_write_compressed(translate("The CircuitPython heap was corrupted because the stack was too small.\nPlease increase the stack size if you know how, or if not:"));
+ serial_write_compressed(FILE_AN_ISSUE);
+ return;
+ default:
+ break;
+ }
+
+ serial_write_compressed(translate("CircuitPython core code crashed hard. Whoops!\n"));
+ switch (reason) {
+ case HARD_CRASH:
+ serial_write_compressed(translate("Crash into the HardFault_Handler."));
+ return;
+ case MICROPY_NLR_JUMP_FAIL:
+ serial_write_compressed(translate("MicroPython NLR jump failed. Likely memory corruption."));
+ return;
+ case MICROPY_FATAL_ERROR:
+ serial_write_compressed(translate("MicroPython fatal error."));
+ break;
+ case GC_ALLOC_OUTSIDE_VM:
+ serial_write_compressed(translate("Attempted heap allocation when MicroPython VM not running."));
+ break;
+ case NORDIC_SOFT_DEVICE_ASSERT:
+ serial_write_compressed(translate("Nordic Soft Device failure assertion."));
+ break;
+ case FLASH_WRITE_FAIL:
+ serial_write_compressed(translate("Failed to write internal flash."));
+ break;
+ default:
+ serial_write_compressed(translate("Unknown reason."));
+ break;
+ }
+ serial_write_compressed(FILE_AN_ISSUE);
}
diff --git a/supervisor/shared/safe_mode.h b/supervisor/shared/safe_mode.h
index 8c5dcd9c5..e05fca0e4 100644
--- a/supervisor/shared/safe_mode.h
+++ b/supervisor/shared/safe_mode.h
@@ -38,7 +38,8 @@ typedef enum {
MICROPY_FATAL_ERROR,
GC_ALLOC_OUTSIDE_VM,
PROGRAMMATIC_SAFE_MODE,
- NORDIC_SOFT_DEVICE_ASSERT
+ NORDIC_SOFT_DEVICE_ASSERT,
+ FLASH_WRITE_FAIL,
} safe_mode_t;
safe_mode_t wait_for_safe_mode_reset(void);
diff --git a/supervisor/supervisor.mk b/supervisor/supervisor.mk
index 5e997ee78..96a14c25b 100644
--- a/supervisor/supervisor.mk
+++ b/supervisor/supervisor.mk
@@ -17,25 +17,27 @@ ifndef $(NO_USB)
NO_USB = $(wildcard supervisor/usb.c)
endif
-ifneq ($(INTERNAL_FLASH_FILESYSTEM),)
- CFLAGS += -DINTERNAL_FLASH_FILESYSTEM=$(INTERNAL_FLASH_FILESYSTEM)
+ifndef INTERNAL_FLASH_FILESYSTEM
+INTERNAL_FLASH_FILESYSTEM = 0
endif
-ifneq ($(QSPI_FLASH_FILESYSTEM),)
-# EXPRESS_BOARD is obsolete and should be removed when samd-peripherals is updated.
- CFLAGS += -DQSPI_FLASH_FILESYSTEM=$(QSPI_FLASH_FILESYSTEM) -DEXPRESS_BOARD
-endif
-ifneq ($(SPI_FLASH_FILESYSTEM),)
-# EXPRESS_BOARD is obsolete and should be removed when samd-peripherals is updated.
- CFLAGS += -DSPI_FLASH_FILESYSTEM=$(SPI_FLASH_FILESYSTEM) -DEXPRESS_BOARD
+CFLAGS += -DINTERNAL_FLASH_FILESYSTEM=$(INTERNAL_FLASH_FILESYSTEM)
+
+ifndef QSPI_FLASH_FILESYSTEM
+QSPI_FLASH_FILESYSTEM = 0
endif
+CFLAGS += -DQSPI_FLASH_FILESYSTEM=$(QSPI_FLASH_FILESYSTEM)
+ifndef SPI_FLASH_FILESYSTEM
+SPI_FLASH_FILESYSTEM = 0
+endif
+CFLAGS += -DSPI_FLASH_FILESYSTEM=$(SPI_FLASH_FILESYSTEM)
ifeq ($(CIRCUITPY_BLEIO),1)
SRC_SUPERVISOR += supervisor/shared/bluetooth.c
endif
# Choose which flash filesystem impl to use.
-# (Right now INTERNAL_FLASH_FILESYSTEM and SPI_FLASH_FILESYSTEM are mutually exclusive.
+# (Right now INTERNAL_FLASH_FILESYSTEM and (Q)SPI_FLASH_FILESYSTEM are mutually exclusive.
# But that might not be true in the future.)
ifdef EXTERNAL_FLASH_DEVICES
CFLAGS += -DEXTERNAL_FLASH_DEVICES=$(EXTERNAL_FLASH_DEVICES) \
@@ -52,7 +54,7 @@ ifdef EXTERNAL_FLASH_DEVICES
else
ifeq ($(DISABLE_FILESYSTEM),1)
SRC_SUPERVISOR += supervisor/stub/internal_flash.c
- else
+ else
SRC_SUPERVISOR += supervisor/internal_flash.c
endif
endif
@@ -64,30 +66,31 @@ ifeq ($(USB),FALSE)
SRC_SUPERVISOR += supervisor/serial.c
endif
else
- SRC_SUPERVISOR += lib/tinyusb/src/common/tusb_fifo.c \
- lib/tinyusb/src/device/usbd.c \
- lib/tinyusb/src/device/usbd_control.c \
- lib/tinyusb/src/class/msc/msc_device.c \
- lib/tinyusb/src/class/cdc/cdc_device.c \
- lib/tinyusb/src/class/hid/hid_device.c \
- lib/tinyusb/src/class/midi/midi_device.c \
- lib/tinyusb/src/tusb.c \
- supervisor/shared/serial.c \
- supervisor/usb.c \
- supervisor/shared/usb/usb_desc.c \
- supervisor/shared/usb/usb.c \
- supervisor/shared/usb/usb_msc_flash.c \
- shared-bindings/usb_hid/__init__.c \
- shared-bindings/usb_hid/Device.c \
- shared-bindings/usb_midi/__init__.c \
- shared-bindings/usb_midi/PortIn.c \
- shared-bindings/usb_midi/PortOut.c \
- shared-module/usb_hid/__init__.c \
- shared-module/usb_hid/Device.c \
- shared-module/usb_midi/__init__.c \
- shared-module/usb_midi/PortIn.c \
- shared-module/usb_midi/PortOut.c \
- $(BUILD)/autogen_usb_descriptor.c
+ SRC_SUPERVISOR += \
+ lib/tinyusb/src/common/tusb_fifo.c \
+ lib/tinyusb/src/device/usbd.c \
+ lib/tinyusb/src/device/usbd_control.c \
+ lib/tinyusb/src/class/msc/msc_device.c \
+ lib/tinyusb/src/class/cdc/cdc_device.c \
+ lib/tinyusb/src/class/hid/hid_device.c \
+ lib/tinyusb/src/class/midi/midi_device.c \
+ lib/tinyusb/src/tusb.c \
+ supervisor/shared/serial.c \
+ supervisor/usb.c \
+ supervisor/shared/usb/usb_desc.c \
+ supervisor/shared/usb/usb.c \
+ supervisor/shared/usb/usb_msc_flash.c \
+ shared-bindings/usb_hid/__init__.c \
+ shared-bindings/usb_hid/Device.c \
+ shared-bindings/usb_midi/__init__.c \
+ shared-bindings/usb_midi/PortIn.c \
+ shared-bindings/usb_midi/PortOut.c \
+ shared-module/usb_hid/__init__.c \
+ shared-module/usb_hid/Device.c \
+ shared-module/usb_midi/__init__.c \
+ shared-module/usb_midi/PortIn.c \
+ shared-module/usb_midi/PortOut.c \
+ $(BUILD)/autogen_usb_descriptor.c
CFLAGS += -DUSB_AVAILABLE
endif
diff --git a/tools/build_board_info.py b/tools/build_board_info.py
index 710cdb0c2..7c4484a65 100644
--- a/tools/build_board_info.py
+++ b/tools/build_board_info.py
@@ -49,6 +49,7 @@ extension_by_board = {
aliases_by_board = {
"circuitplayground_express": ["circuitplayground_express_4h", "circuitplayground_express_digikey_pycon2019"],
"pybadge": ["edgebadge"],
+ "pyportal": ["pyportal_pynt"],
"gemma_m0": ["gemma_m0_pycon2018"],
"pewpew10": ["pewpew13"]
}
diff --git a/tools/build_memory_info.py b/tools/build_memory_info.py
index a8f84bbb6..f61b843ce 100644
--- a/tools/build_memory_info.py
+++ b/tools/build_memory_info.py
@@ -41,6 +41,8 @@ data = 0
bss = 0
# stdin is the linker output.
for line in sys.stdin:
+ # Uncomment to see linker output.
+ # print(line)
line = line.strip()
if not line.startswith("text"):
text, data, bss = map(int, line.split()[:3])
@@ -50,7 +52,7 @@ regions = {}
with open(sys.argv[1], "r") as f:
for line in f:
line = line.strip()
- if line.startswith(("FLASH", "RAM")):
+ if line.startswith(("FLASH_FIRMWARE", "FLASH", "RAM")):
regions[line.split()[0]] = line.split("=")[-1]
for region in regions:
@@ -59,12 +61,19 @@ for region in regions:
space = space.split("/*")[0]
space = K_PATTERN.sub(K_REPLACE, space)
space = M_PATTERN.sub(M_REPLACE, space)
- regions[region] = eval(space)
+ regions[region] = int(eval(space))
-free_flash = regions["FLASH"] - text - data
-free_ram = regions["RAM"] - data - bss
-print(free_flash, "bytes free in flash out of", regions["FLASH"], "bytes (", regions["FLASH"] / 1024, "kb ).")
-print(free_ram, "bytes free in ram for stack out of", regions["RAM"], "bytes (", regions["RAM"] / 1024, "kb ).")
+# TODO Remove check for both FLASH_FIRMWARE and FLASH after all ports are converted to use FLASH_FIRMWARE.
+try:
+ firmware_region = regions["FLASH_FIRMWARE"]
+except KeyError:
+ firmware_region = regions["FLASH"]
+ram_region = regions["RAM"]
+
+free_flash = firmware_region - text - data
+free_ram = ram_region - data - bss
+print("{} bytes free in flash firmware space out of {} bytes ({}kB).".format(free_flash, firmware_region, firmware_region / 1024))
+print("{} bytes free in ram for heap out of {} bytes ({}kB).".format(free_ram, ram_region, ram_region / 1024))
print()
# Check that we have free flash space. GCC doesn't fail when the text + data
diff --git a/tools/gen_ld_files.py b/tools/gen_ld_files.py
new file mode 100755
index 000000000..c2ac812bc
--- /dev/null
+++ b/tools/gen_ld_files.py
@@ -0,0 +1,60 @@
+#! /usr/bin/env python3
+import argparse
+
+import os
+import os.path
+import sys
+import re
+from string import Template
+
+parser = argparse.ArgumentParser(description='Apply #define values to .template.ld file.')
+parser.add_argument('template_files', metavar='TEMPLATE_FILE', type=argparse.FileType('r'),
+ nargs='+', help="template filename: <something>.template.ld")
+parser.add_argument('--defines', type=argparse.FileType('r'), required=True)
+parser.add_argument('--out_dir', required=True)
+
+args = parser.parse_args()
+
+defines = {}
+
+#
+REMOVE_UL_RE = re.compile('([0-9]+)UL')
+def remove_UL(s):
+ return REMOVE_UL_RE.sub(r'\1', s)
+
+# We skip all lines before
+# // START_LD_DEFINES
+# Then we look for lines like this:
+# /*NAME_OF_VALUE=*/ NAME_OF_VALUE;
+VALUE_LINE_RE = re.compile(r'^/\*\s*(\w+)\s*=\*/\s*(.*);\s*$')
+
+start_processing = False
+for line in args.defines:
+ line = line.strip()
+ if line == '// START_LD_DEFINES':
+ start_processing = True
+ continue
+ if start_processing:
+ match = VALUE_LINE_RE.match(line)
+ if match:
+ name = match.group(1)
+ value = match.group(2).strip()
+ defines[name] = remove_UL(value)
+
+fail = False
+
+for template_file in args.template_files:
+ ld_template_basename = os.path.basename(template_file.name)
+ ld_pathname = os.path.join(args.out_dir, ld_template_basename.replace('.template.ld', '.ld'))
+ with open(ld_pathname, 'w') as output:
+ for k,v in defines.items():
+ print('/*', k, '=', v, '*/', file=output)
+ print(file=output)
+ try:
+ output.write(Template(template_file.read()).substitute(defines))
+ except KeyError as e:
+ print("ERROR: {}: No #define for '{}'".format(ld_pathname, e.args[0]), file=sys.stderr)
+ fail = True
+
+if fail:
+ sys.exit(1)