Fix some issues with building on K64F, add K64F upload methods (#267)

* Fix some issues with building on K64F, add K64F upload methods

* Add Mbed upload method

* Fix pin validate test

* Also install json5

* Fix incorrect COMPONENT_SD config
pull/15510/head
Jamie Smith 2024-04-16 21:44:02 -05:00 committed by GitHub
parent acfd341a16
commit 3fcfbbdb57
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 86 additions and 43 deletions

View File

@ -193,6 +193,7 @@ jobs:
name: validate pins name: validate pins
run: | run: |
set -x set -x
python3 -m pip install json5
git config --global --add safe.directory "$GITHUB_WORKSPACE" git config --global --add safe.directory "$GITHUB_WORKSPACE"
git diff --name-only --diff-filter=d origin/${GITHUB_BASE_REF} \ git diff --name-only --diff-filter=d origin/${GITHUB_BASE_REF} \
| ( grep '.*[\\|\/]PinNames.h$' || true ) \ | ( grep '.*[\\|\/]PinNames.h$' || true ) \

View File

@ -18,10 +18,8 @@ endmacro(create_mbed_802_15_4_target)
if("Freescale" IN_LIST MBED_TARGET_LABELS) if("Freescale" IN_LIST MBED_TARGET_LABELS)
create_mbed_802_15_4_target()
add_subdirectory(TARGET_Freescale) add_subdirectory(TARGET_Freescale)
elseif("Silicon_Labs" IN_LIST MBED_TARGET_LABELS) elseif("Silicon_Labs" IN_LIST MBED_TARGET_LABELS)
create_mbed_802_15_4_target()
add_subdirectory(TARGET_Silicon_Labs) add_subdirectory(TARGET_Silicon_Labs)
endif() endif()

View File

@ -2,5 +2,6 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
if("KW41Z" IN_LIST MBED_TARGET_LABELS) if("KW41Z" IN_LIST MBED_TARGET_LABELS)
create_mbed_802_15_4_target()
add_subdirectory(TARGET_KW41Z) add_subdirectory(TARGET_KW41Z)
endif() endif()

View File

@ -2,5 +2,6 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
if("SL_RAIL" IN_LIST MBED_TARGET_LABELS) if("SL_RAIL" IN_LIST MBED_TARGET_LABELS)
create_mbed_802_15_4_target()
add_subdirectory(TARGET_SL_RAIL) add_subdirectory(TARGET_SL_RAIL)
endif() endif()

View File

@ -17,7 +17,7 @@ limitations under the License.
""" """
import argparse import argparse
import json import json5
import pathlib import pathlib
import hashlib import hashlib
import re import re
@ -26,6 +26,12 @@ from tabulate import tabulate
from itertools import chain from itertools import chain
from enum import Enum from enum import Enum
# Load targets data from JSON
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]
with (
mbed_os_root.joinpath("targets", "targets.json5")
).open() as targets_json_file:
target_data = json5.load(targets_json_file)
class ReturnCode(Enum): class ReturnCode(Enum):
"""Return codes.""" """Return codes."""
@ -76,11 +82,6 @@ def find_target_by_path(target_path):
print("WARNING: MBED TARGET LIST marker invalid or not found in file " + target_path) print("WARNING: MBED TARGET LIST marker invalid or not found in file " + target_path)
print("Target could not be determined. Only the generic test suite will run. You can manually specify additional suites.") print("Target could not be determined. Only the generic test suite will run. You can manually specify additional suites.")
with (
mbed_os_root.joinpath("targets", "targets.json")
).open() as targets_json_file:
target_data = json.load(targets_json_file)
# find target in targets.json # find target in targets.json
for target in target_data: for target in target_data:
if "public" in target_data[target]: if "public" in target_data[target]:
@ -97,7 +98,6 @@ def find_target_by_path(target_path):
def find_target_by_name(target_name=""): def find_target_by_name(target_name=""):
"""Find a target by name.""" """Find a target by name."""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]
targets = dict() targets = dict()
@ -133,15 +133,10 @@ def find_target_by_name(target_name=""):
def check_markers(test_mode=False): def check_markers(test_mode=False):
"""Validate markers in PinNames.h files""" """Validate markers in PinNames.h files"""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]
errors = [] errors = []
with (
mbed_os_root.joinpath("targets", "targets.json")
).open() as targets_json_file:
targets_json = json.load(targets_json_file)
if test_mode: if test_mode:
search_dir = pathlib.Path(__file__).parent.joinpath('test_files').absolute() search_dir = pathlib.Path(__file__).parent.joinpath('test_files').absolute()
else: else:
@ -187,8 +182,6 @@ def check_markers(test_mode=False):
def check_duplicate_pinnames_files(test_mode=False): def check_duplicate_pinnames_files(test_mode=False):
"""Check for duplicate PinNames.h files""" """Check for duplicate PinNames.h files"""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]
errors = [] errors = []
file_hash_dict = dict() file_hash_dict = dict()
@ -220,8 +213,6 @@ def check_duplicate_pinnames_files(test_mode=False):
def check_duplicate_markers(test_mode=False): def check_duplicate_markers(test_mode=False):
"""Check target markers in PinNames.h files for duplicates.""" """Check target markers in PinNames.h files for duplicates."""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]
errors = [] errors = []
markers = dict() markers = dict()
@ -262,13 +253,6 @@ def check_duplicate_markers(test_mode=False):
def target_has_form_factor(target_name, form_factor): def target_has_form_factor(target_name, form_factor):
"""Check if the target has the Arduino form factor.""" """Check if the target has the Arduino form factor."""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]
with (
mbed_os_root.joinpath("targets", "targets.json")
).open() as targets_json_file:
target_data = json.load(targets_json_file)
if target_name in target_data: if target_name in target_data:
if "supported_form_factors" in target_data[target_name]: if "supported_form_factors" in target_data[target_name]:
form_factors = target_data[target_name]["supported_form_factors"] form_factors = target_data[target_name]["supported_form_factors"]

View File

@ -57,10 +57,10 @@
"SPI_CS": "PTD4" "SPI_CS": "PTD4"
}, },
"K64F": { "K64F": {
"SPI_CS": "SPI_CS", "SPI_CS": "PTE4",
"SPI_MOSI": "SPI_MOSI", "SPI_MOSI": "PTE3",
"SPI_MISO": "SPI_MISO", "SPI_MISO": "PTE1",
"SPI_CLK": "SPI_SCK" "SPI_CLK": "PTE2"
}, },
"K66F": { "K66F": {
"SPI_MOSI": "PTE3", "SPI_MOSI": "PTE3",

View File

@ -262,17 +262,6 @@ typedef enum {
#define BUTTON2 SW3 #define BUTTON2 SW3
// SPI Pins for SD card.
// Note: They are different from the Arduino Uno SPI pins
// (ARDUINO_UNO_SPI_xxx) for general purpose uses.
// By default, Mbed OS maps those alias to Arduino Uno pins, but
// for backward compatibility we map them to the SD card SPI.
#define SPI_MOSI PTE3
#define SPI_MISO PTE1
#define SPI_SCK PTE2
#define SPI_CS PTE4
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -42,4 +42,21 @@ extern uint32_t __VECTOR_RAM[];
#define NVIC_NUM_VECTORS (16 + 86) // CORE + MCU Peripherals #define NVIC_NUM_VECTORS (16 + 86) // CORE + MCU Peripherals
#define NVIC_RAM_VECTOR_ADDRESS (__VECTOR_RAM) // Vectors positioned at start of RAM #define NVIC_RAM_VECTOR_ADDRESS (__VECTOR_RAM) // Vectors positioned at start of RAM
#ifndef MBED_RAM_SIZE
#define MBED_RAM_SIZE 0x30000
#endif
#ifndef MBED_RAM_START
#define MBED_RAM_START 0x20000000
#endif
#ifndef MBED_RAM1_SIZE
#define MBED_RAM1_SIZE 0x10000
#endif
#ifndef MBED_RAM1_START
#define MBED_RAM1_START 0x1FFF0000
#endif
#endif #endif

View File

@ -361,7 +361,7 @@ static void spi_buffer_set(spi_t *obj, const void *tx, uint32_t tx_length, void
bool spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint) bool spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint)
{ {
if (spi_active(obj)) { if (spi_active(obj)) {
return; return false;
} }
/* check corner case */ /* check corner case */

View File

@ -0,0 +1,35 @@
# Mbed OS upload method configuration file for target K64F.
# To change any of these parameters from their default values, set them in your build script between where you
# include app.cmake and where you add mbed os as a subdirectory.
#
# Notes:
# 1. PyOCD did not actually work in my testing as of Apr 2024, though this device is supposed to be supported
# 2. Be sure to update the DAPLink firmware on the board via these instructions: https://os.mbed.com/blog/entry/DAPLink-bootloader-update/
# General config parameters
# -------------------------------------------------------------
set(UPLOAD_METHOD_DEFAULT MBED)
# Config options for MBED
# -------------------------------------------------------------
set(MBED_UPLOAD_ENABLED TRUE)
set(MBED_RESET_BAUDRATE 115200)
# Config options for PYOCD
# -------------------------------------------------------------
set(PYOCD_UPLOAD_ENABLED TRUE)
set(PYOCD_TARGET_NAME k64f)
set(PYOCD_CLOCK_SPEED 4000k)
# Config options for OPENOCD
# -------------------------------------------------------------
set(OPENOCD_UPLOAD_ENABLED TRUE)
set(OPENOCD_CHIP_CONFIG_COMMANDS
-f ${CMAKE_CURRENT_LIST_DIR}/openocd_cfgs/mk64f.cfg)
# Config options for LINKSERVER
# -------------------------------------------------------------
set(LINKSERVER_UPLOAD_ENABLED TRUE)
set(LINKSERVER_DEVICE MK64FN1M0xxx12:FRDM-K64F)

View File

@ -2,6 +2,9 @@
# To change any of these parameters from their default values, set them in your build script between where you # To change any of these parameters from their default values, set them in your build script between where you
# include app.cmake and where you add mbed os as a subdirectory. # include app.cmake and where you add mbed os as a subdirectory.
# Notes:
# 1. LPC1768 is supposed to be supported by LinkServer, and I am able to get through flashing it, but it errors out at the end.
# General config parameters # General config parameters
# ------------------------------------------------------------- # -------------------------------------------------------------
set(UPLOAD_METHOD_DEFAULT MBED) set(UPLOAD_METHOD_DEFAULT MBED)
@ -33,3 +36,8 @@ set(MBED_RESET_BAUDRATE 115200)
set(OPENOCD_UPLOAD_ENABLED TRUE) set(OPENOCD_UPLOAD_ENABLED TRUE)
set(OPENOCD_CHIP_CONFIG_COMMANDS set(OPENOCD_CHIP_CONFIG_COMMANDS
-f ${CMAKE_CURRENT_LIST_DIR}/openocd_cfgs/lpc1768.cfg) -f ${CMAKE_CURRENT_LIST_DIR}/openocd_cfgs/lpc1768.cfg)
# Config options for LINKSERVER
# -------------------------------------------------------------
set(LINKSERVER_UPLOAD_ENABLED TRUE)
set(LINKSERVER_DEVICE LPC1768)

View File

@ -0,0 +1,9 @@
# OpenOCD config file for Kinetis K64F chips using DAPLink
source [find interface/cmsis-dap.cfg]
transport select swd
source [find target/k60.cfg]
reset_config srst_only

View File

@ -19,7 +19,7 @@ set(UPLOAD_PYOCD_FOUND ${HAVE_PYOCD})
set(PYOCD_PROBE_UID "" CACHE STRING "Probe UID to pass to pyOCD commands. You can get the UIDs from `python -m pyocd list`. Set to empty to detect any probe.") set(PYOCD_PROBE_UID "" CACHE STRING "Probe UID to pass to pyOCD commands. You can get the UIDs from `python -m pyocd list`. Set to empty to detect any probe.")
### Function to generate upload target ### Function to generate upload target
set(PYOCD_PROBE_ARGS "") set(PYOCD_PROBE_ARGS "" CACHE INTERNAL "" FORCE)
if(NOT "${PYOCD_PROBE_UID}" STREQUAL "") if(NOT "${PYOCD_PROBE_UID}" STREQUAL "")
set(PYOCD_PROBE_ARGS --probe ${PYOCD_PROBE_UID} CACHE INTERNAL "" FORCE) set(PYOCD_PROBE_ARGS --probe ${PYOCD_PROBE_UID} CACHE INTERNAL "" FORCE)
endif() endif()