mimxrt/boards/ADAFRUIT_METRO_M7: Add Adafruit Metro M7 board definition.
Support for WiFi and BLE is in progress. Signed-off-by: robert-hh <robert@hammelrath.com>
This commit is contained in:
parent
8d446b2ad5
commit
5707fd74e5
26
ports/mimxrt/boards/ADAFRUIT_METRO_M7/board.json
Normal file
26
ports/mimxrt/boards/ADAFRUIT_METRO_M7/board.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"deploy": [
|
||||
"deploy_metro_m7.md"
|
||||
],
|
||||
"docs": "",
|
||||
"features": [
|
||||
"USB-C",
|
||||
"SPI",
|
||||
"I2C",
|
||||
"UART",
|
||||
"RGB LED",
|
||||
"QSPI Flash",
|
||||
"QWIIC",
|
||||
"JLink",
|
||||
"WiFi",
|
||||
"BLE"
|
||||
],
|
||||
"images": [
|
||||
"Metro_M7.jpg"
|
||||
],
|
||||
"mcu": "mimxrt",
|
||||
"product": "Adafruit Metro M7",
|
||||
"thumbnail": "",
|
||||
"url": "https://www.adafruit.com/product/4950",
|
||||
"vendor": "Adafruit"
|
||||
}
|
141
ports/mimxrt/boards/ADAFRUIT_METRO_M7/deploy_metro_m7.md
Normal file
141
ports/mimxrt/boards/ADAFRUIT_METRO_M7/deploy_metro_m7.md
Normal file
@ -0,0 +1,141 @@
|
||||
## 1. Deploy the MicroPython firmware to the Metro M7 board.
|
||||
|
||||
### 1.1 Deploy the firmware using the serial bootloader.
|
||||
|
||||
For initial deployment of the firmware a few preparation steps are required, which
|
||||
have to be done once.
|
||||
|
||||
1. Get the files ufconv.py and uf2families.json from the micropython/tools directory,
|
||||
e.g. at https://github.com/micropython/micropython/tree/master/tools.
|
||||
|
||||
2. Get the NXP program sdphost for your operating system, e.g. from
|
||||
https://github.com/adafruit/tinyuf2/tree/master/ports/mimxrt10xx/sdphost.
|
||||
You can also get them from the NXP web sites.
|
||||
|
||||
3. Get the UF2 boot-loader package https://github.com/adafruit/tinyuf2/releases/download/0.9.0/tinyuf2-imxrt1010_evk-0.9.0.zip
|
||||
and extract the file tinyuf2-imxrt1010_evk-0.9.0.bin.
|
||||
|
||||
Now you have all files at hand that you will need for updating.
|
||||
|
||||
1. Get the firmware you want to upload from the MicroPython download page.
|
||||
|
||||
2. Set the two BOOTSEL DIP switches to the 1/0 position, which is the opposite position of the normal use mode.
|
||||
|
||||
3. Push the reset button.
|
||||
|
||||
4. Run the commands:
|
||||
|
||||
```
|
||||
sudo ./sdphost -u 0x1fc9,0x0145 -- write-file 0x20206400 tinyuf2-imxrt1010_evk-0.9.0.bin
|
||||
sudo ./sdphost -u 0x1fc9,0x0145 -- jump-address 0x20207000
|
||||
```
|
||||
Wait until a drive icon appears on the computer (or mount it explicitly), and then run:
|
||||
```
|
||||
python3 uf2conv.py <firmware_xx.yy.zz.hex> --base 0x60000400 -f 0x4fb2d5bd
|
||||
```
|
||||
You can put all of that in a script. Just add a short wait before the 3rd command to let the drive connect.
|
||||
|
||||
5. Once the upload is finished, set the BOOTSEL DIP switches back to the 0/1 position and push reset.
|
||||
|
||||
Using sudo is Linux specific. You may not need it at all, if the access rights are set properly,
|
||||
and you will not need it for Windows.
|
||||
|
||||
### 1.2 Deploy the firmware using a JTAG adapter.
|
||||
|
||||
With a JTAG adapter the firmware can be easily installed. Appropriate tools are Segger JFlash Lite and
|
||||
the Segger Edu Mini adapter. Just use the firmware.hex file for loading, which will be loaded at the
|
||||
proper address.
|
||||
|
||||
|
||||
## 2. Deploy the WiFi firmware.
|
||||
|
||||
The NINA firmware in the NINA module has to be updated for use with MicroPython. That can be done
|
||||
using MicroPython and two small Python scripts.
|
||||
|
||||
The firmware binaries are available at
|
||||
https://github.com/micropython/micropython-lib/tree/master/micropython/espflash
|
||||
or https://github.com/robert-hh/Shared-Stuff. For the Metro M7 board, the
|
||||
NINA_FW_v1.5.0_Airlift.bin file is needed.
|
||||
|
||||
For firmware upload, the following connections to the WiFi module are required:
|
||||
|
||||
- Pin Reset (as above)
|
||||
- Pin GPIO0
|
||||
- UART RX
|
||||
- UART TX
|
||||
|
||||
The GPIO pins and UART device id varies between boards. At the Adafruit Metro M7 board,
|
||||
the UART is UART(1), and the Pin names for reset and GPIO0 are ESP_RESET and ESP_GPIO0.
|
||||
The firmware can be uploaded, using the espflash.py module, a short script
|
||||
using espflash.py and mpremote. espflash.py is available at
|
||||
https://github.com/micropython/micropython-lib/tree/master/micropython/espflash.
|
||||
This place also holds the example script.
|
||||
|
||||
```
|
||||
import espflash
|
||||
from machine import Pin
|
||||
from machine import UART
|
||||
import sys
|
||||
sys.path.append("/flash")
|
||||
|
||||
reset = Pin("ESP_RESET", Pin.OUT)
|
||||
gpio0 = Pin("ESP_GPIO0", Pin.OUT)
|
||||
uart = UART(0, 115200, timeout=350)
|
||||
|
||||
md5sum = b"b0b9ab23da820a469e597c41364acb3a"
|
||||
path = "/remote/NINA_FW_v1.5.0_Airlift.bin"
|
||||
|
||||
esp = espflash.ESPFlash(reset, gpio0, uart)
|
||||
# Enter bootloader download mode, at 115200
|
||||
esp.bootloader()
|
||||
# Can now change to higher/lower baud rate
|
||||
esp.set_baudrate(921600)
|
||||
# Must call this first before any flash functions.
|
||||
esp.flash_attach()
|
||||
# Read flash size
|
||||
size = esp.flash_read_size()
|
||||
# Configure flash parameters.
|
||||
esp.flash_config(size)
|
||||
# Write firmware image from internal storage.
|
||||
esp.flash_write_file(path)
|
||||
# Compares file and flash MD5 checksum.
|
||||
esp.flash_verify_file(path, md5sum)
|
||||
# Resets the ESP32 chip.
|
||||
esp.reboot()
|
||||
```
|
||||
|
||||
The script shows the set-up for the Metro M7 board.
|
||||
The md5sum is the one of the WiFi firmware. It may change and
|
||||
can be recalculated using e.g. the Linux `md5sum` command. It is used to
|
||||
verify the firmware upload. To upload the firmware, place the firmware
|
||||
and the above script (let's call it ninaflash.py) into the same directory
|
||||
on your PC, and run the command:
|
||||
```
|
||||
mpremote connect <port> mount . run ninaflash.py
|
||||
```
|
||||
After a while, the upload will start. A typical start sequence looks like:
|
||||
```
|
||||
Local directory . is mounted at /remote
|
||||
Failed to read response to command 8.
|
||||
Failed to read response to command 8.
|
||||
Changing baudrate => 921600
|
||||
Flash attached
|
||||
Flash size 2.0 MBytes
|
||||
Flash write size: 1310720 total_blocks: 320 block size: 4096
|
||||
Writing sequence number 0/320...
|
||||
Writing sequence number 1/320...
|
||||
Writing sequence number 2/320...
|
||||
Writing sequence number 3/320...
|
||||
Writing sequence number 4/320...
|
||||
....
|
||||
....
|
||||
Writing sequence number 317/320...
|
||||
Writing sequence number 318/320...
|
||||
Writing sequence number 319/320...
|
||||
Flash write finished
|
||||
Flash verify: File MD5 b'b0b9ab23da820a469e597c41364acb3a'
|
||||
Flash verify: Flash MD5 b'b0b9ab23da820a469e597c41364acb3a'
|
||||
Firmware verified.
|
||||
```
|
||||
The initial messages `Failed to read response to command 8.`
|
||||
can be ignored.
|
65
ports/mimxrt/boards/ADAFRUIT_METRO_M7/mpconfigboard.h
Normal file
65
ports/mimxrt/boards/ADAFRUIT_METRO_M7/mpconfigboard.h
Normal file
@ -0,0 +1,65 @@
|
||||
#define MICROPY_HW_BOARD_NAME "Adafruit Metro M7"
|
||||
#define MICROPY_HW_MCU_NAME "MIMXRT1011DAE5A"
|
||||
|
||||
// i.MX RT1010 EVK has 1 board LED
|
||||
#define MICROPY_HW_LED1_PIN (pin_GPIO_03)
|
||||
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
|
||||
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
|
||||
|
||||
#define MICROPY_HW_NUM_PIN_IRQS (2 * 32)
|
||||
|
||||
// Define mapping logical UART # to hardware UART #
|
||||
// LPUART1 on USB_DBG -> 0
|
||||
// LPUART1 on D0/D1 -> 1
|
||||
// LPUART3 on A0/D4 -> 3
|
||||
// LPUART4 on D6/D7 -> 2
|
||||
|
||||
#define MICROPY_HW_UART_NUM (sizeof(uart_index_table) / sizeof(uart_index_table)[0])
|
||||
#define MICROPY_HW_UART_INDEX { 1, 1, 2, 4 }
|
||||
|
||||
#define IOMUX_TABLE_UART \
|
||||
{ IOMUXC_GPIO_10_LPUART1_TXD }, { IOMUXC_GPIO_09_LPUART1_RXD }, \
|
||||
{ IOMUXC_GPIO_12_LPUART3_TXD }, { IOMUXC_GPIO_11_LPUART3_RXD }, \
|
||||
{ 0 }, { 0 }, \
|
||||
{ IOMUXC_GPIO_AD_02_LPUART4_TXD }, { IOMUXC_GPIO_AD_01_LPUART4_RXD },
|
||||
|
||||
#define MICROPY_HW_SPI_INDEX { 1 }
|
||||
|
||||
#define IOMUX_TABLE_SPI \
|
||||
{ IOMUXC_GPIO_AD_06_LPSPI1_SCK }, { IOMUXC_GPIO_AD_05_LPSPI1_PCS0 }, \
|
||||
{ IOMUXC_GPIO_AD_04_LPSPI1_SDO }, { IOMUXC_GPIO_AD_03_LPSPI1_SDI }, \
|
||||
{ IOMUXC_GPIO_AD_02_LPSPI1_PCS1 }
|
||||
|
||||
#define DMA_REQ_SRC_RX { 0, kDmaRequestMuxLPSPI1Rx, kDmaRequestMuxLPSPI2Rx }
|
||||
#define DMA_REQ_SRC_TX { 0, kDmaRequestMuxLPSPI1Tx, kDmaRequestMuxLPSPI2Tx }
|
||||
|
||||
// Define mapping hardware I2C # to logical I2C #
|
||||
// SDA/SCL HW-I2C Logical I2C
|
||||
// D14/D15 LPI2C1 -> 0
|
||||
// D0/D1 LPI2C2 -> 1
|
||||
// D6/D7 LPI2C2 -> 1 Alternatively possible GPIO_AD_01, GPIO_AD_02
|
||||
|
||||
#define MICROPY_HW_I2C_INDEX { 1, 2 }
|
||||
|
||||
#define IOMUX_TABLE_I2C \
|
||||
{ IOMUXC_GPIO_02_LPI2C1_SCL }, { IOMUXC_GPIO_01_LPI2C1_SDA }, \
|
||||
{ IOMUXC_GPIO_10_LPI2C2_SCL }, { IOMUXC_GPIO_09_LPI2C2_SDA },
|
||||
|
||||
// Wifi Deinitions
|
||||
#define MICROPY_PY_NETWORK_HOSTNAME_DEFAULT "mpy-metro-m7"
|
||||
|
||||
#define MICROPY_HW_WIFI_SPI_ID (0)
|
||||
#define MICROPY_HW_WIFI_SPI_BAUDRATE (8000000)
|
||||
|
||||
#define MICROPY_HW_NINA_ACK pin_find(MP_OBJ_NEW_QSTR(MP_QSTR_ESP_BUSY))
|
||||
#define MICROPY_HW_NINA_CS pin_find(MP_OBJ_NEW_QSTR(MP_QSTR_ESP_CS))
|
||||
#define MICROPY_HW_NINA_RESET pin_find(MP_OBJ_NEW_QSTR(MP_QSTR_ESP_RESET))
|
||||
|
||||
// BLE definitions
|
||||
#define MICROPY_PY_BLUETOOTH_NINAW10 (1)
|
||||
|
||||
#define MICROPY_HW_BLE_UART_ID (1)
|
||||
#define MICROPY_HW_BLE_UART_BAUDRATE (115200)
|
||||
|
||||
#define MICROPY_HW_NINA_RTS pin_find(MP_OBJ_NEW_QSTR(MP_QSTR_MOSI))
|
||||
#define MICROPY_HW_NINA_CTS MICROPY_HW_NINA_ACK
|
11
ports/mimxrt/boards/ADAFRUIT_METRO_M7/mpconfigboard.mk
Normal file
11
ports/mimxrt/boards/ADAFRUIT_METRO_M7/mpconfigboard.mk
Normal file
@ -0,0 +1,11 @@
|
||||
MCU_SERIES = MIMXRT1011
|
||||
MCU_VARIANT = MIMXRT1011DAE5A
|
||||
|
||||
MICROPY_FLOAT_IMPL = single
|
||||
MICROPY_PY_MACHINE_SDCARD = 0
|
||||
MICROPY_HW_FLASH_TYPE ?= qspi_nor_flash
|
||||
MICROPY_HW_FLASH_SIZE ?= 0x800000 # 8MB
|
||||
|
||||
MICROPY_PY_NETWORK_NINAW10 ?= 1
|
||||
MICROPY_PY_USSL ?= 1
|
||||
MICROPY_SSL_MBEDTLS ?= 1
|
31
ports/mimxrt/boards/ADAFRUIT_METRO_M7/pins.csv
Normal file
31
ports/mimxrt/boards/ADAFRUIT_METRO_M7/pins.csv
Normal file
@ -0,0 +1,31 @@
|
||||
D0,GPIO_09
|
||||
D1,GPIO_10
|
||||
D2,GPIO_13
|
||||
D3,GPIO_12
|
||||
D4,GPIO_SD_00
|
||||
D5,GPIO_SD_01
|
||||
D6,GPIO_SD_02
|
||||
D7,GPIO_11
|
||||
D8,GPIO_08
|
||||
D9,GPIO_07
|
||||
D10,GPIO_06
|
||||
D11,GPIO_05
|
||||
D12,GPIO_04
|
||||
D13,GPIO_03
|
||||
D14,GPIO_01
|
||||
D15,GPIO_02
|
||||
A0,GPIO_AD_02
|
||||
A1,GPIO_AD_01
|
||||
A2,GPIO_AD_00
|
||||
A3,GPIO_AD_05
|
||||
A4,GPIO_AD_10
|
||||
A5,GPIO_AD_08
|
||||
LED,GPIO_03
|
||||
NEOPIXEL,GPIO_00
|
||||
ESP_RESET,GPIO_AD_07
|
||||
ESP_BUSY,GPIO_AD_11
|
||||
ESP_CS,GPIO_AD_14
|
||||
ESP_GPIO0,GPIO_SD_05
|
||||
SCK,GPIO_AD_06
|
||||
MISO,GPIO_AD_03
|
||||
MOSI,GPIO_AD_04
|
|
Loading…
Reference in New Issue
Block a user