Skip to content

Commit fd9d3de

Browse files
authored
Merge pull request adafruit#631 from tannewt/metro_revb
Add a new board for Metro M4 Express Rev B.
2 parents 06d3c5a + d02251f commit fd9d3de

6 files changed

Lines changed: 170 additions & 34 deletions

File tree

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

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,20 @@
33

44
#define CIRCUITPY_MCU_FAMILY samd51
55

6+
// This is for Rev D which is light blue
7+
68
#define MICROPY_HW_LED_TX PIN_PA27
79
#define MICROPY_HW_LED_RX PIN_PB06
810

911
#define MICROPY_HW_NEOPIXEL (&pin_PB17)
1012

11-
#define SPI_FLASH_BAUDRATE (8000000)
12-
13-
// Rev B: single channel SPI
14-
// Rev C will be QSPI
15-
#define SPI_FLASH_MOSI_PIN PIN_PB08
16-
#define SPI_FLASH_MISO_PIN PIN_PB11
17-
#define SPI_FLASH_SCK_PIN PIN_PB09
18-
#define SPI_FLASH_CS_PIN PIN_PB10
19-
#define SPI_FLASH_MOSI_PIN_FUNCTION PINMUX_PB08D_SERCOM4_PAD0
20-
#define SPI_FLASH_MISO_PIN_FUNCTION PINMUX_PB11D_SERCOM4_PAD3
21-
#define SPI_FLASH_SCK_PIN_FUNCTION PINMUX_PB09D_SERCOM4_PAD1
22-
#define SPI_FLASH_SERCOM SERCOM4
23-
#define SPI_FLASH_SERCOM_INDEX 4
24-
#define SPI_FLASH_MOSI_PAD 0
25-
#define SPI_FLASH_MISO_PAD 3
26-
#define SPI_FLASH_SCK_PAD 1
27-
// <o> Transmit Data Pinout
28-
// <0x0=>PAD[0,1]_DO_SCK
29-
// <0x1=>PAD[2,3]_DO_SCK
30-
// <0x2=>PAD[3,1]_DO_SCK
31-
// <0x3=>PAD[0,3]_DO_SCK
32-
#define SPI_FLASH_DOPO 0
33-
#define SPI_FLASH_DIPO 3 // same as MISO pad
34-
3513
// These are pins not to reset.
36-
#define MICROPY_PORT_A (PORT_PA08 | PORT_PA09 | PORT_PA10 | PORT_PA11 | PORT_PA27)
37-
#define MICROPY_PORT_B (PORT_PB10 | PORT_PB11 | PORT_PB17)
38-
#define MICROPY_PORT_C (0)
39-
#define MICROPY_PORT_D (0)
14+
// QSPI Data pins and TX LED
15+
#define MICROPY_PORT_A (PORT_PA08 | PORT_PA09 | PORT_PA10 | PORT_PA11 | PORT_PA27)
16+
// RX LED, QSPI CS, QSPI SCK and NeoPixel pin
17+
#define MICROPY_PORT_B ( PORT_PB06 | PORT_PB10 | PORT_PB11 | PORT_PB17)
18+
#define MICROPY_PORT_C (0)
19+
#define MICROPY_PORT_D (0)
4020

4121
#define AUTORESET_DELAY_MS 500
4222

@@ -49,5 +29,5 @@
4929

5030
#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
5131

52-
#include "external_flash/devices/S25FL216K.h"
32+
#include "external_flash/devices/S25FL116K.h"
5333
#include "external_flash/devices/GD25Q16C.h"

ports/atmel-samd/boards/metro_m4_express/pins.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ STATIC const mp_map_elem_t board_global_dict_table[] = {
77
{ MP_OBJ_NEW_QSTR(MP_QSTR_A0), (mp_obj_t)&pin_PA02 },
88
{ MP_OBJ_NEW_QSTR(MP_QSTR_A1), (mp_obj_t)&pin_PA05 },
99
{ MP_OBJ_NEW_QSTR(MP_QSTR_A2), (mp_obj_t)&pin_PA06 },
10-
{ MP_OBJ_NEW_QSTR(MP_QSTR_A3), (mp_obj_t)&pin_PA04 },
11-
{ MP_OBJ_NEW_QSTR(MP_QSTR_A4), (mp_obj_t)&pin_PA11 },
10+
{ MP_OBJ_NEW_QSTR(MP_QSTR_A3), (mp_obj_t)&pin_PB09 },
11+
{ MP_OBJ_NEW_QSTR(MP_QSTR_A4), (mp_obj_t)&pin_PB08 },
1212
{ MP_OBJ_NEW_QSTR(MP_QSTR_A5), (mp_obj_t)&pin_PA07 },
1313

1414

1515
{ MP_OBJ_NEW_QSTR(MP_QSTR_D0), (mp_obj_t)&pin_PA23 },
1616
{ MP_OBJ_NEW_QSTR(MP_QSTR_D1), (mp_obj_t)&pin_PA22 },
17-
{ MP_OBJ_NEW_QSTR(MP_QSTR_D2), (mp_obj_t)&pin_PA08 },
18-
{ MP_OBJ_NEW_QSTR(MP_QSTR_D3), (mp_obj_t)&pin_PA10 },
19-
{ MP_OBJ_NEW_QSTR(MP_QSTR_D4), (mp_obj_t)&pin_PB12 },
17+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D2), (mp_obj_t)&pin_PA04 },
18+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D3), (mp_obj_t)&pin_PB16 },
19+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D4), (mp_obj_t)&pin_PB13 },
2020
{ MP_OBJ_NEW_QSTR(MP_QSTR_D5), (mp_obj_t)&pin_PB14 },
2121
{ MP_OBJ_NEW_QSTR(MP_QSTR_D6), (mp_obj_t)&pin_PB15 },
2222
{ MP_OBJ_NEW_QSTR(MP_QSTR_D7), (mp_obj_t)&pin_PA14 },
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* This file is part of the MicroPython project, http://micropython.org/
3+
*
4+
* The MIT License (MIT)
5+
*
6+
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
7+
*
8+
* Permission is hereby granted, free of charge, to any person obtaining a copy
9+
* of this software and associated documentation files (the "Software"), to deal
10+
* in the Software without restriction, including without limitation the rights
11+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12+
* copies of the Software, and to permit persons to whom the Software is
13+
* furnished to do so, subject to the following conditions:
14+
*
15+
* The above copyright notice and this permission notice shall be included in
16+
* all copies or substantial portions of the Software.
17+
*
18+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24+
* THE SOFTWARE.
25+
*/
26+
27+
#include "boards/board.h"
28+
#include "mpconfigboard.h"
29+
#include "hal/include/hal_gpio.h"
30+
31+
void board_init(void) {
32+
gpio_set_pin_function(MICROPY_HW_LED_TX, GPIO_PIN_FUNCTION_OFF);
33+
gpio_set_pin_direction(MICROPY_HW_LED_TX, GPIO_DIRECTION_OUT);
34+
gpio_set_pin_level(MICROPY_HW_LED_TX, true);
35+
36+
gpio_set_pin_function(MICROPY_HW_LED_RX, GPIO_PIN_FUNCTION_OFF);
37+
gpio_set_pin_direction(MICROPY_HW_LED_RX, GPIO_DIRECTION_OUT);
38+
gpio_set_pin_level(MICROPY_HW_LED_RX, true);
39+
}
40+
41+
bool board_requests_safe_mode(void) {
42+
return false;
43+
}
44+
45+
void reset_board(void) {
46+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// This is for Rev B which a larger run was done and sent to Adafruit community
2+
// members.
3+
4+
#define MICROPY_HW_BOARD_NAME "Metro M4 Express Rev B (Black)"
5+
#define MICROPY_HW_MCU_NAME "samd51j19"
6+
7+
#define CIRCUITPY_MCU_FAMILY samd51
8+
9+
#define MICROPY_HW_LED_TX PIN_PA27
10+
#define MICROPY_HW_LED_RX PIN_PB06
11+
12+
#define MICROPY_HW_NEOPIXEL (&pin_PB17)
13+
14+
#define SPI_FLASH_BAUDRATE (8000000)
15+
16+
// Rev B: single channel SPI
17+
// Rev C will be QSPI
18+
#define SPI_FLASH_MOSI_PIN PIN_PB08
19+
#define SPI_FLASH_MISO_PIN PIN_PB11
20+
#define SPI_FLASH_SCK_PIN PIN_PB09
21+
#define SPI_FLASH_CS_PIN PIN_PB10
22+
#define SPI_FLASH_MOSI_PIN_FUNCTION PINMUX_PB08D_SERCOM4_PAD0
23+
#define SPI_FLASH_MISO_PIN_FUNCTION PINMUX_PB11D_SERCOM4_PAD3
24+
#define SPI_FLASH_SCK_PIN_FUNCTION PINMUX_PB09D_SERCOM4_PAD1
25+
#define SPI_FLASH_SERCOM SERCOM4
26+
#define SPI_FLASH_SERCOM_INDEX 4
27+
#define SPI_FLASH_MOSI_PAD 0
28+
#define SPI_FLASH_MISO_PAD 3
29+
#define SPI_FLASH_SCK_PAD 1
30+
// <o> Transmit Data Pinout
31+
// <0x0=>PAD[0,1]_DO_SCK
32+
// <0x1=>PAD[2,3]_DO_SCK
33+
// <0x2=>PAD[3,1]_DO_SCK
34+
// <0x3=>PAD[0,3]_DO_SCK
35+
#define SPI_FLASH_DOPO 0
36+
#define SPI_FLASH_DIPO 3 // same as MISO pad
37+
38+
// These are pins not to reset.
39+
// Pin for TX LED
40+
#define MICROPY_PORT_A (PORT_PA27)
41+
// Pins for RX LED, SPI flash and neopixel
42+
#define MICROPY_PORT_B (PORT_PB06 | PORT_PB08 | PORT_PB09 | PORT_PB10 | PORT_PB11 | PORT_PB17)
43+
#define MICROPY_PORT_C (0)
44+
#define MICROPY_PORT_D (0)
45+
46+
#define AUTORESET_DELAY_MS 500
47+
48+
#include "external_flash/external_flash.h"
49+
50+
// If you change this, then make sure to update the linker scripts as well to
51+
// make sure you don't overwrite code
52+
// #define CIRCUITPY_INTERNAL_NVM_SIZE 256
53+
#define CIRCUITPY_INTERNAL_NVM_SIZE 0
54+
55+
#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE)
56+
57+
#include "external_flash/devices/S25FL216K.h"
58+
#include "external_flash/devices/GD25Q16C.h"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
LD_FILE = boards/samd51x19-bootloader-external-flash.ld
2+
USB_VID = 0x239A
3+
USB_PID = 0x8021
4+
USB_PRODUCT = "Metro M4 Express Rev B (Black)"
5+
USB_MANUFACTURER = "Adafruit Industries LLC"
6+
7+
SPI_FLASH_FILESYSTEM = 1
8+
9+
CHIP_VARIANT = SAMD51J19A
10+
CHIP_FAMILY = samd51
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include "samd51_pins.h"
2+
3+
// This mapping only includes functional names because pins broken
4+
// out on connectors are labeled with their MCU name available from
5+
// microcontroller.pin.
6+
STATIC const mp_map_elem_t board_global_dict_table[] = {
7+
{ MP_OBJ_NEW_QSTR(MP_QSTR_A0), (mp_obj_t)&pin_PA02 },
8+
{ MP_OBJ_NEW_QSTR(MP_QSTR_A1), (mp_obj_t)&pin_PA05 },
9+
{ MP_OBJ_NEW_QSTR(MP_QSTR_A2), (mp_obj_t)&pin_PA06 },
10+
{ MP_OBJ_NEW_QSTR(MP_QSTR_A3), (mp_obj_t)&pin_PA04 },
11+
{ MP_OBJ_NEW_QSTR(MP_QSTR_A4), (mp_obj_t)&pin_PA11 },
12+
{ MP_OBJ_NEW_QSTR(MP_QSTR_A5), (mp_obj_t)&pin_PA07 },
13+
14+
15+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D0), (mp_obj_t)&pin_PA23 },
16+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D1), (mp_obj_t)&pin_PA22 },
17+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D2), (mp_obj_t)&pin_PA08 },
18+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D3), (mp_obj_t)&pin_PA10 },
19+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D4), (mp_obj_t)&pin_PB12 },
20+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D5), (mp_obj_t)&pin_PB14 },
21+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D6), (mp_obj_t)&pin_PB15 },
22+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D7), (mp_obj_t)&pin_PA14 },
23+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D8), (mp_obj_t)&pin_PA16 },
24+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D9), (mp_obj_t)&pin_PA17 },
25+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D10), (mp_obj_t)&pin_PA18 },
26+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D11), (mp_obj_t)&pin_PA19 },
27+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D12), (mp_obj_t)&pin_PA20 },
28+
{ MP_OBJ_NEW_QSTR(MP_QSTR_D13), (mp_obj_t)&pin_PA21 },
29+
30+
{ MP_OBJ_NEW_QSTR(MP_QSTR_SDA), (mp_obj_t)&pin_PB02 },
31+
{ MP_OBJ_NEW_QSTR(MP_QSTR_SCL), (mp_obj_t)&pin_PB03 },
32+
33+
{ MP_OBJ_NEW_QSTR(MP_QSTR_NEOPIXEL), (mp_obj_t)&pin_PB17 },
34+
35+
{ MP_OBJ_NEW_QSTR(MP_QSTR_SCK), (mp_obj_t)&pin_PA13 },
36+
{ MP_OBJ_NEW_QSTR(MP_QSTR_MOSI), (mp_obj_t)&pin_PA12 },
37+
{ MP_OBJ_NEW_QSTR(MP_QSTR_MISO), (mp_obj_t)&pin_PA15 },
38+
39+
{ MP_OBJ_NEW_QSTR(MP_QSTR_LED_RX), (mp_obj_t)&pin_PB06 },
40+
{ MP_OBJ_NEW_QSTR(MP_QSTR_LED_TX), (mp_obj_t)&pin_PA27 },
41+
};
42+
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

0 commit comments

Comments
 (0)