Skip to content

Commit

Permalink
Fix some issues with building on K64F, add K64F upload methods (#267)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
multiplemonomials authored Apr 17, 2024
1 parent acfd341 commit 3fcfbbd
Show file tree
Hide file tree
Showing 13 changed files with 86 additions and 43 deletions.
1 change: 1 addition & 0 deletions .github/workflows/basic_checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ jobs:
name: validate pins
run: |
set -x
python3 -m pip install json5
git config --global --add safe.directory "$GITHUB_WORKSPACE"
git diff --name-only --diff-filter=d origin/${GITHUB_BASE_REF} \
| ( grep '.*[\\|\/]PinNames.h$' || true ) \
Expand Down
2 changes: 0 additions & 2 deletions connectivity/drivers/802.15.4_RF/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,8 @@ endmacro(create_mbed_802_15_4_target)


if("Freescale" IN_LIST MBED_TARGET_LABELS)
create_mbed_802_15_4_target()
add_subdirectory(TARGET_Freescale)
elseif("Silicon_Labs" IN_LIST MBED_TARGET_LABELS)
create_mbed_802_15_4_target()
add_subdirectory(TARGET_Silicon_Labs)
endif()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
# SPDX-License-Identifier: Apache-2.0

if("KW41Z" IN_LIST MBED_TARGET_LABELS)
create_mbed_802_15_4_target()
add_subdirectory(TARGET_KW41Z)
endif()
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
# SPDX-License-Identifier: Apache-2.0

if("SL_RAIL" IN_LIST MBED_TARGET_LABELS)
create_mbed_802_15_4_target()
add_subdirectory(TARGET_SL_RAIL)
endif()
32 changes: 8 additions & 24 deletions hal/tests/pinvalidate/pinvalidate.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"""

import argparse
import json
import json5
import pathlib
import hashlib
import re
Expand All @@ -26,6 +26,12 @@
from itertools import chain
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):
"""Return codes."""
Expand Down Expand Up @@ -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("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
for target in target_data:
if "public" in target_data[target]:
Expand All @@ -97,7 +98,6 @@ def find_target_by_path(target_path):

def find_target_by_name(target_name=""):
"""Find a target by name."""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]

targets = dict()

Expand Down Expand Up @@ -133,15 +133,10 @@ def find_target_by_name(target_name=""):

def check_markers(test_mode=False):
"""Validate markers in PinNames.h files"""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]


errors = []

with (
mbed_os_root.joinpath("targets", "targets.json")
).open() as targets_json_file:
targets_json = json.load(targets_json_file)

if test_mode:
search_dir = pathlib.Path(__file__).parent.joinpath('test_files').absolute()
else:
Expand Down Expand Up @@ -187,8 +182,6 @@ def check_markers(test_mode=False):

def check_duplicate_pinnames_files(test_mode=False):
"""Check for duplicate PinNames.h files"""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]

errors = []

file_hash_dict = dict()
Expand Down Expand Up @@ -220,8 +213,6 @@ def check_duplicate_pinnames_files(test_mode=False):

def check_duplicate_markers(test_mode=False):
"""Check target markers in PinNames.h files for duplicates."""
mbed_os_root = pathlib.Path(__file__).absolute().parents[3]

errors = []

markers = dict()
Expand Down Expand Up @@ -262,13 +253,6 @@ def check_duplicate_markers(test_mode=False):

def target_has_form_factor(target_name, 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 "supported_form_factors" in target_data[target_name]:
form_factors = target_data[target_name]["supported_form_factors"]
Expand Down
8 changes: 4 additions & 4 deletions storage/blockdevice/COMPONENT_SD/mbed_lib.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@
"SPI_CS": "PTD4"
},
"K64F": {
"SPI_CS": "SPI_CS",
"SPI_MOSI": "SPI_MOSI",
"SPI_MISO": "SPI_MISO",
"SPI_CLK": "SPI_SCK"
"SPI_CS": "PTE4",
"SPI_MOSI": "PTE3",
"SPI_MISO": "PTE1",
"SPI_CLK": "PTE2"
},
"K66F": {
"SPI_MOSI": "PTE3",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,17 +262,6 @@ typedef enum {
#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
}
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,21 @@ extern uint32_t __VECTOR_RAM[];
#define NVIC_NUM_VECTORS (16 + 86) // CORE + MCU Peripherals
#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
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
if (spi_active(obj)) {
return;
return false;
}

/* check corner case */
Expand Down
35 changes: 35 additions & 0 deletions targets/upload_method_cfg/K64F.cmake
Original file line number Diff line number Diff line change
@@ -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)
8 changes: 8 additions & 0 deletions targets/upload_method_cfg/LPC1768.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
# 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. 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
# -------------------------------------------------------------
set(UPLOAD_METHOD_DEFAULT MBED)
Expand Down Expand Up @@ -33,3 +36,8 @@ set(MBED_RESET_BAUDRATE 115200)
set(OPENOCD_UPLOAD_ENABLED TRUE)
set(OPENOCD_CHIP_CONFIG_COMMANDS
-f ${CMAKE_CURRENT_LIST_DIR}/openocd_cfgs/lpc1768.cfg)

# Config options for LINKSERVER
# -------------------------------------------------------------
set(LINKSERVER_UPLOAD_ENABLED TRUE)
set(LINKSERVER_DEVICE LPC1768)
9 changes: 9 additions & 0 deletions targets/upload_method_cfg/openocd_cfgs/mk64f.cfg
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion tools/cmake/upload_methods/UploadMethodPYOCD.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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.")

### Function to generate upload target
set(PYOCD_PROBE_ARGS "")
set(PYOCD_PROBE_ARGS "" CACHE INTERNAL "" FORCE)
if(NOT "${PYOCD_PROBE_UID}" STREQUAL "")
set(PYOCD_PROBE_ARGS --probe ${PYOCD_PROBE_UID} CACHE INTERNAL "" FORCE)
endif()
Expand Down

0 comments on commit 3fcfbbd

Please sign in to comment.