Change MCUboot image versioning to meet requirements below:
1. Major.Minor.Revision must be non-decremental when used to derive security counter (-s 'auto').
2. Make Major.Minor.Revision+Build incremental to identify the firmware itself through psa_fwu_query().
3. Get around MCUboot failure with TF-M underestimated MAX_BOOT_RECORD_SZ
Import mcu partition header (renamed to partition_M2354_im.h) for resolving peripheral base with security.
Though Mbed is non-secure only and needn't secure peripheral base, some BSP driver code still rely on it.
`HAL_SPI_Receive_IT` HAL function causes dummy reads in 3-wire mode,
that causes data corruption in RX FIFO/register. It isn't possible
to fix it without signification refactoring, but we may prevent data
corruption with the following fixes:
- RX buffer/register cleanup after asynchronous transfer in 3-wire mode
- Explicit RX buffer/register cleanup after SPI initialization
(for cases if we re-create SPI object).
All STM32 families except STM32H7 has the following 3-wire SPI peculiarity in master receive mode:
SPI continuously generates clock signal till it's disabled by a software. It causes that a software
must disable SPI in time. Otherwise, "dummy" reads will be generated.
Current STM32 synchronous SPI 3-wire implementation relies on HAL library functions HAL_SPI_Receive/HAL_SPI_Transmit.
It performs some SPI state checks to detect errors, but unfortunately it isn't fast enough to disable SPI in time.
Additionally, a multithreading environment or interrupt events may cause extra delays.
This commit contains the custom transmit/receive function for SPI 3-wire mode. It uses critical sections to
prevents accidental interrupt event delays, disables SPI after each frame receiving and disables SPI during
frame generation. It adds some delay between SPI frames (~700 ns), but gives reliable 3-wire SPI communications.
- move a code that waits readable SPI state from `spi_master_write`
function to inline functions `msp_writable` and `msp_wait_writable`
- move a code that waits writeable SPI state from `spi_master_write`
function to inline functions `msp_readable` and `msp_wait_readable`
- move a code that writes data to SPI from `spi_master_write`
function to inline function `msp_write_data`
- move a code that reads data from SPI from `spi_master_write`
function to inline function `msp_read_data`
This commit enables the Overriding of HAL callbacks and IRQHandler
in stm32xx_emac.cpp. Hence the user can have their own
implementations of callbacks and IRQHandler functions.
Signed-off-by: Kather Rafi Ibrahim <katherrafi.i@hcl.com>
As per STM32H7-series reference manuals:
"Up to 64 filter elements can be configured for 29-bit extended IDs."
This commit fixes a bug which prevented receiving CAN-messages
with extended IDs.
We weren't setting the "supported_application_profiles" correctly for
some baremetal supported targets. This didn't cause build failures with
mbed-cli 1 as it just seems to ignore this config parameter. In our CMake
build system we have added a hard dependency on the
supported_application_profiles; we fail the build if the profile we're
trying to build isn't in the list.
We were previously relying on the global MBED_PATH variable to provide
the root for the include path to the post build hooks. We can't
guarantee that MBED_PATH will be set by any application building us, so
use CMAKE_MODULE_PATH (which we always set) like we do for the other
post-build hooks.
This commit adds internal pullup on DP line for usb enumeration
in nucleo_l152re platform. This platform as such does not have
usb connector (device).
This has been tested with example in https://github.com/ARMmbed/
mbed-os/blob/master/drivers/usb/include/usb/USBMouse.h#L58-L76
and mbed_app.json file
"target_overrides": {
"*": {
"platform.stdio-baud-rate": 115200,
"platform.all-stats-enabled": true,
"mbed-trace.enable": "0"
},
"NUCLEO_L152RE": {
"target.device_has_add": ["USBDEVICE"]
}
}
}
Signed-off-by: Krishna Mohan Dani <krishnamohan.d@hcl.com>
1. Change from single image boot to multiple image boot
2. SDH is configured to Secure for placing update firmware. It becomes inaccessible to Mbed.
3. Post-build script supports both multiple image boot and single image boot
4. Update readme to reflect above change
5. Increase forced_reset_timeout due to longer booting time for Greentea test
The CMake macro `mbed_post_build_psoc6_merge_hex()` takes the name of
a Cypress target and an optional Cortex-M0 hex image as arguments. The
proper way to define and parse optional arguments of a function or
macro is `cmake_parse_arguments()`, which allows the caller to
indicate what they are passing rather than rely on an argument's
relative position within `${ARGN}` which is not rigorous.
Also, avoid duplicating the common part of the post build command
when the optional argument is passed/not passed.
When building greentea tests, each test is an executable with its
own output binary path. This is also the case when a user project
produces multiple executables. But the current implementation of
post-build operations always assumes there's only one executable,
at the root of the build directory.
The post-build command depends on Mbed target, and it always takes
the the executable we build as an input file. To achieve this, we
let each Mbed target (that has a post-build command) define a function
function(mbed_post_build_function target)
which takes a CMake executable target as an argument from which it can
get its binary path using generator expressions. It generates and adds
to the passed executable target a post-build custom command.
Notes:
* The function name needs to be exact, because CMake only supports
literal function calls - CMake can't dereference a function name from
a variable. To avoid multiple definitions of this function, each Mbed
target needs to guard it with a macro to check if the user is
building this Mbed target.
* `mbed_post_build_function()` is a function, but it is usually
defined by another macro rather than a parent function, because
nesting functions would make many variables inaccessible inside the
innermost `mbed_post_build_function()`.
* There's no more need to force regenerate images. Previously, post-
build commands were custom *targets* which always got to run, so we
force regenerated images on every build to avoid patching an image
that's already been patched once on previous build. Now post-build
commands are custom *commands* of the same executable target, and they
are only run if the executable target itself is rebuilt.
This commit modifies readme file. Descption for using
I2C timing algorithm and how to enable and disable
included.
Signed-off-by: Affrin Pinhero <affrin.pinhero@hcl.com>
This commit solves issue related to i2c driver performance.
With this commit delay in read write when using i2c timing
algorithm is solved. Used flag mechanism which will check
tim reg value and hz passed.
Signed-off-by: Affrin Pinhero <affrin.pinhero@hcl.com>
The multiple InterruptIn object with same pin_index sharing same IRQ line.
So the second object will overwrite the first one. To catch this as error,
implemented an error catching functionality.
This commit updates the documentation on how to use
mbed_otp_mac_address() to modify the default MAC address to custom
Mac address.
Signed-off-by: Kather Rafi Ibrahim <katherrafi.i@hcl.com>
Fix pin names of K64F with the following from the latest guidelines:
* LEDs and buttons are defined as macros, digital and analog pins as
enums.
* No duplicated pin names with the same value.
* The Arduino form factor is deprecated in favour of Arduino Uno.
Note: The pins `SPI_xxx` are for SD card only, but the names are kept
for backward compatibility (i.e. no breaking change until the next
Mbed OS major version). The general purpose Arduino Uno SPI pins
(`ARDUINO_UNO_SPI_xxx`) are different and also available.
This commit solves excess usage of RAM. User can now enable/disable
I2C timing algorithm. Disabling of I2C timing algorithm would
reduce RAM usage.
Signed-off-by: Affrin Pinhero <affrin.pinhero@hcl.com>
For `MCU_M2354`, the use of `device_has` in `targets.json` overrides the devices
present in the base target: `PSA_V8_M`. In particular, `DEVICE_TRNG` is missing
in `NU_M2354` builds as `TRNG` is a member of the `PSA_V8_M` `device_has` list.
As suggested by @ccli8, to ensure that `PSA_V8_M` devices are inherited by
derived targets, such as `MCU_M2354`, the correct syntax to use is
`device_has_add`.
Modified i2c_device.h file. This will solve I2C read
write long time issue. Updated default I2C peripheral clock
value to 160MHz.
fix:
ARMmbed/mbed-os#14732
Signed-off-by: Affrin Pinhero <affrin.pinhero@hcl.com>
1. Build TF-M v1.3 with GNUARM and HXT not present.
2. Support configurability of HXT presence (targets.json).
3. Default HXT to not present (targets.json). This must align with built TF-M secure code above.
Modified print_adc function to update adc pin_map.
This patch will update python script that generate
'peripheralPin.c'. Which will give functionality to
gernerate ADC pin definition for BANK_B.
This script update is related to
https://github.com/ARMmbed/mbed-os/pull/14669
Signed-off-by: Affrin Pinhero <affrin.pinhero@hcl.com>
LXT/HXT are external crystl oscillator and can be absent on custom board.
This enables configuring LXT/HXT presence:
1. By default, LXT/HXT are configured to be present, except M252 which has no HXT.
2. When LXT is configured to not present, lp_ticker/watchdog will clock by LIRC instead.
3. Limitations:
(1) On all targets, LIRC-clocked lp_ticker gets inaccurate and fails to pass tests.
(2) On NUC472/M453, HIRC-clocked PLL doesn't output 1MHz-aligned frequency. us_ticker gets slight inaccurate.
(3) On all targets, LIRC-clocked RTC is not supported due to no H/W path/RTC clock source reset to LXT on reset/RTC not trimmed for other clock rates.
4. On M263, TRNG's clock source defaults to LXT and needs special handling without LXT.
5. On M252, replace target.hxt-enable with target.hxt-present for consistency.
Modified HAL_I2C_ErrorCallback function to solve bug reported in I2C Driver.
This commit solves compilation error occured when DEVICE_I2CSLAVE is not defined.
fix#14696
Signed-off-by: Affrin Pinhero <affrin.pinhero@hcl.com>
1. Update TF-M Secure bin enabling TRNG as entropy source
2. Replaced with above, remove TRNG HAL stuff on Mbed, including platform extra secure functions, cmake, etc.
1. Configure non-secure target name to NU_M2354 (targets/targets.json). No NU_M2354_NS alias
2. Following template target, enable image signing and concatenating in post-build process
(1) Add post-build script (tools/targets).
(2) Enable TF-M custom build by centralize relevant stuff imported from TF-M (COMPONENT_TFM_S_FW).
3. Add M2354Code.merge_secure into whitelist of uvision6 (tools/export/uvision/__init__.py).
4. Add M2354 CMSIS pack database (tools/arm_pack_manager/index.json).
5. Configure stdio baudrate to 115200 to match TF-M port (platform/mbed_lib.json).
6. Define CMSIS_NVIC_VIRTUAL to override NVIC_SystemReset with TF-M version (cmsis_nvic_virtual.h).
7. Override tfm_ns_interface_xxx(...) to enable NS secure call:
(1) At pre-rtos stage
(2) In SVC context
8. Implement secure function call with tfm_platform_ioctl(...).
9. Combine stddriver_secure.h/c and hal_secure.h/c into platform_extra_secure.h/c.
10. Fix peripheral base to non-secure (PeripheralNames.h) (TrustZone-unaware since Mbed OS 6.0).
11. Fix NU_PORT_BASE/NU_GET_GPIO_PIN_DATA/NU_SET_GPIO_PIN_DATA to non-secure (PinNamesCommon.h) (TrustZone-unaware since Mbed OS 6.0).
12. NSC convention for StdDriver sys/clk (both TF-M and Mbed must follow)
(1) SYS_ResetModule
Usage: Replaced with SYS_ResetModule_S on Mbed OS
Action: Make it inaccessible from Mbed (neither source nor NSC). Provide SYS_ResetModule_S on Mbed via platform ioctl instead.
(2) CLK_GetXxx
Usage: Called in bpwm/i2s/qspi/sc/sdh and system_M2354 on Mbed OS
Action: Make them inaccessible from Mbed (neither source nor NSC). Re-provide them on Mbed via platform ioctl instead.
13. Remove DISABLE/ENABLE macro definitions in BSP to avoid name conflict with other modules
14. Change to TMR4/5 from TMR2/3 for implementing us_ticker/lp_ticker because TMR2 is used for TF-M NSPE test
15. Support cmake
NOTE: Export(uvision6) doesn't support TF-M target. To enable it for partial compile on Keil, force below function to return true.
is_target_supported(tools/export/uvision/__init__.py)
Modified analogin_init function to take correct value for ChannelsBank depends on ADC pin.
This commit adds ADC Bank_B usablity to STm32L152RE. With this commit PB_2 can also woak as ADC_IN.
Default BLE FW in ST boards is stm32wb5x_BLE_Stack_full_fw.bin
and gives 808K available FLASH to application
stm32wb5x_BLE_HCILayer_fw.bin
gives 896K available FLASH to application
This commit adds I2C timing value automatic calculation algorithm
for all supported families added. This patch improves I2C timing calculation
according to I2C input clock and I2C bus speed.
This commit also allows user to change the system clock and I2C input clock.
Related issue: #12907
Pull request type:
[x] Patch update (Bug fix / Target update / Docs update / Test update / Refactor)
[] Feature update (New feature / Functionality change / New API)
[] Major update (Breaking change E.g. Return code change / API behaviour change)
Test results:
[] No Tests required for this change (E.g docs only update)
[x] Covered by existing mbed-os tests (Greentea or Unittest)
[] Tests / results supplied as part of this PR
Signed-off-by: Affrin Pinhero <affrin.pinhero@hcl.com>
This commit fixes the i2c driver issue reported in the below link:
https://github.com/ARMmbed/mbed-os/issues/13967 on STM32F4xx platform.
The data type of XferOperation has been changed from uint8_t to uint32_t
so that it can hold a 32bit value (for example: I2C_OTHER_FRAME or
I2C_OTHER_AND_LAST_FRAME).
Signed-off-by: Krishna Mohan Dani <krishnamohan.d@hcl.com>
The NRF52832 MCU supports flash which is declared in `targets.json`
but the declaration of FlashIAP was missing. Applications were unable
to access the MCU's internal flash.
For example, with Mbed OS PSA enabled for NRF52_DK, Mbed CLI 1's
configuration check fails:
[ERROR] library 'psa-services' requires 'flashiap-block-device' which is not present
because Mbed OS PSA requires internal flash.
Summary of changes:
Impact of changes
Migration actions required
Pull request type
[x] Patch update (Bug fix / Target update / Docs update / Test update / Refactor)
[] Feature update (New feature / Functionality change / New API)
[] Major update (Breaking change E.g. Return code change / API behaviour change)
Test results
[] No Tests required for this change (E.g docs only update)
[x] Covered by existing mbed-os tests (Greentea or Unittest)
[] Tests / results supplied as part of this PR
Signed-off-by: Affrin Pinhero <affrin.pinhero@hcl.com>
Renamed D0..D15 and A0..A5 to ARDUINO_UNO_D0 etc.
This allows user to use ARDUINO_UNO as the supported_form_factors in targets.json for MIMXRT1050_EVK.
Wtihout the detect_code, `mbed-tools detect` will fail to detect any
connected ARM_MUSCA_B1 boards with the error:
ERROR: Could not identify a board with the product code: '5007'.
No connected Mbed devices found.
Add the detect_code for MUSCA B1 to targets.json so the board can be
reliably detected.
FixesARMmbed/mbed-tools#272
The mbed-os-tf-m-regression-tests build scripts gets a mapping of
Mbed OS target names to TF-M target names from `targets.json`. TF-M
v1.3 has renamed musca_b1 to musca_b1/sse_200, this commit updates
that accordingly to ensure successful build of TF-M and tests for
ARM_MUSCA_B1.
mbed-usb (which provides `USBDevice_Types.h`) is a higher-level USB
library in Mbed-OS that sits on top of the HAL. Targets should not
implement the HAL and use higher-level libraries, hence, the dependency
should be removed. This dependency also causes errors when building with
the bare-metal profile.
C++ files were excluded from target_sources, this meant that those files
were being missed entirely during the build process. This adds any files
that may have missed in the first commit.
If GPIO_PINMAP_READY is defined for the target,
- PinMap_GPIO table is expected in PeripheralPins.c
- weak gpio_get_capabilities function is implemented
Update CMAKE_MODULE_PATH at once place.
Note, we update also CMAKE_MODULE_PATH in app.cmake. This is temporary until we get a proper way to include
Mbed Os (removing app.cmake need to be included by an application).
To avoid conflicts as we expose our CMake list files via CMAKE_MODULE_PATH. Some files already include it, this
aligns the rest of files.
I leave app.cmake as it is - it's user facing and it would be breaking change. We can clean this one for the next major version.
CMAKE_CURRENT_LIST_DIR behaves differently in functions. We store it in the CMakeLists itself, so anyone
calling a function would get the actual list dir where the scripts are.
To illustrate: if I call a function from src/CMakelists.txt, function located in src/scripts, `CMAKE_CURRENT_LIST_DIR` in the function would point
to the src/ folder but not to src/scripts.
- list files included via module path
- <project-name>_SOURCE_DIR for sources that are out of the current processed CMake
- CMAKE_CURRENT_LIST_DIR for listfiles