Skip to content

Add new port to Alif Ensemble MCUs #17050

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 77 commits into from
Apr 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
0ee160e
extmod/extmod.mk: Add cyw43_spi.c to list of sources.
dpgeorge Dec 18, 2024
a9384c7
extmod/extmod.mk: Switch from drivers/cyw43/cywbt to lib/cyw43-drivers.
dpgeorge Feb 28, 2025
7268034
top: Add "ser" to codespell exclusion list.
dpgeorge Feb 20, 2025
c5102a7
lib/alif_ensemble-cmsis-dfp: Add new submodule for Alif SDK v1.3.2.
dpgeorge Dec 11, 2023
1356860
lib/alif-security-toolkit: Add new submodule for Alif Security Toolkit.
dpgeorge Mar 11, 2025
092d855
alif/tinyusb_port: Add Alif TinyUSB DCD driver.
dpgeorge Dec 11, 2023
ebecd6d
alif/tinyusb_port: Disable USB IRQ on deinit.
iabdalkader Oct 22, 2024
b8a9cdf
alif/tinyusb_port: Implement SOF event.
dpgeorge Mar 27, 2025
ccc5935
alif: Add initial port to Alif Ensemble MCUs.
dpgeorge Dec 11, 2023
40ff0c2
alif/system_tick: Use a UTIMER for system ticks and timing.
dpgeorge Jan 10, 2024
975f84f
alif/mphalport: Enable efficient events and implement quiet timing.
dpgeorge Jan 10, 2024
ada0939
alif/system_tick: Integrate soft timer.
dpgeorge Jan 10, 2024
53b7c14
alif/modmachine: Enable machine.Timer.
dpgeorge Jan 10, 2024
4e62ade
alif/se_services: Add SE services interface.
dpgeorge Jan 26, 2024
c6cb082
alif/mpconfigport: Enable os.urandom().
dpgeorge Jan 26, 2024
64af93e
alif/mpconfigport: Enable MICROPY_PY_RANDOM_SEED_INIT_FUNC.
dpgeorge Jan 26, 2024
2a580b0
alif/modalif: Add alif.info() function.
dpgeorge Feb 2, 2024
2f85a19
alif/modmachine: Implement machine.unique_id(), fix machine.reset().
dpgeorge Feb 2, 2024
31d18c5
alif/usbd: Implement proper USB serial number.
dpgeorge Feb 2, 2024
62beb54
alif/machine_adc: Add basic ADC support.
dpgeorge Feb 13, 2024
b7df5aa
alif/mcu: Add ToC config for dual images.
iabdalkader Jul 10, 2024
8f82089
alif: Support building the port for HE or HP or both cores.
iabdalkader Jul 10, 2024
6b4d465
alif: Support running the port on the HE core.
iabdalkader Jul 17, 2024
4f6f283
alif: Implement Open-AMP port backend.
iabdalkader Jul 17, 2024
cee8e11
alif/irq: Define more IRQ priorities.
iabdalkader Jul 28, 2024
bbb8fd7
alif/system_tick: Implement optional LPTIMER support for systick.
dpgeorge Aug 14, 2024
c6ebecc
alif/system_tick: Implement optional ARM SysTick support for systick.
dpgeorge Aug 28, 2024
58d6fe2
alif/mpconfigport: Select SysTick on HE core.
dpgeorge Sep 3, 2024
4c4b484
alif/mpu: Add custom MPU_Load_Regions function.
dpgeorge Oct 10, 2024
84effb3
alif/ospi_flash: Generalise flash driver to support MX chips.
dpgeorge Oct 7, 2024
41e1688
alif/ospi_flash: Enter XIP mode when flash is idle.
dpgeorge Oct 31, 2024
3d17f63
alif/mpu: Define constants for MPU regions.
iabdalkader Nov 21, 2024
5152a1f
alif/mpmetalport: Add Open-AMP MPU region.
iabdalkader Nov 21, 2024
1585080
alif/ospi_flash: Fix XIP for 8-bit instructions (ISSI).
iabdalkader Dec 14, 2024
aec0300
alif/ospi_flash: Support flash device auto-detection in runtime.
iabdalkader Dec 16, 2024
8807f8d
alif/ospi_flash: Configure dummy cycles.
iabdalkader Dec 16, 2024
872f3d7
alif/ospi_flash: Add negative clock pin.
iabdalkader Dec 14, 2024
0709936
alif/ospi_flash: Enable pull-up IO2/WP.
iabdalkader Dec 19, 2024
df06bf9
alif/ospi_ext: Optimize XIP speed.
iabdalkader Dec 20, 2024
602bc86
alif/ospi_flash: Use OSPI in XIP mode only.
iabdalkader Jan 8, 2025
92f056d
alif/ospi_flash: Add 16-bit words swap flash setting.
iabdalkader Feb 6, 2025
ff6ed73
alif/se_services: Use EUI extension for unique id.
iabdalkader Feb 5, 2025
039df0c
alif/modmachine: Implement proper low-power modes.
iabdalkader Feb 3, 2025
82bae65
alif: Add support for pin alternate function selection.
iabdalkader Jan 9, 2025
9073270
alif/machine_i2c: Add machine.I2C peripheral support.
iabdalkader Jan 2, 2025
280e6e2
alif/machine_spi: Add machine.SPI peripheral support.
iabdalkader Jan 19, 2025
ec92bcf
alif/machine_rtc: Add basic machine.RTC support.
iabdalkader Jan 31, 2025
facd0b7
alif/ospi_flash: Use mp_hal_pin_config to configure OSPI pins.
iabdalkader Feb 7, 2025
b9e5f1f
alif/se_services: Add a secondary MHU channel.
iabdalkader Feb 15, 2025
182b5f3
alif/mpmetalport: Use MHU to notify remote cores.
iabdalkader Feb 15, 2025
68b1dae
alif: Link with libnosys.
iabdalkader Feb 19, 2025
7e32c23
alif/mpmetalport: Only notify after metal subsystem is init'd.
dpgeorge Mar 6, 2025
ca3d50a
alif/mpuart: Use mp_hal_pin_config for TX/RX configuration.
dpgeorge Mar 6, 2025
af574a8
alif/alif_flash: Distinguish between total flash size and FS size.
dpgeorge Dec 23, 2024
d895a62
alif/alif_flash: Make flash respond to the buffer protocol.
dpgeorge Dec 23, 2024
f83f6e7
alif/mpu: Add function to set read-only bit on MRAM MPU region.
dpgeorge Mar 6, 2025
8297c95
alif/vfs_rom_ioctl: Add vfs_rom_ioctl with support for OSPI and MRAM.
dpgeorge Mar 6, 2025
d1b12cb
alif/modules: Make HE core set /rom as current dir.
dpgeorge Mar 8, 2025
4f2a8bd
alif/mphalport: Add mp_hal_pin_config_irq_falling helper.
dpgeorge Oct 23, 2024
411146b
alif/mpuart: Generalise UART driver to suppot all UART instances.
dpgeorge Oct 14, 2024
526c7ea
alif: Integrate lwIP and mbedTLS.
dpgeorge Oct 14, 2024
d6e3342
alif: Integrate cyw43 WLAN driver.
dpgeorge Mar 10, 2025
30dfbe5
alif: Integrate cyw43 Bluetooth with NimBLE.
dpgeorge Mar 10, 2025
da46b4d
alif/mcu: Remove json config files.
iabdalkader Mar 13, 2025
19a4689
alif/mcu: Pre-process Alif ToC config file.
iabdalkader Mar 13, 2025
293e8db
alif/mpuart: Enhance UART to support bits/parity/stop and more IRQs.
dpgeorge Mar 17, 2025
29a873e
alif/machine_uart: Add machine.UART peripheral support.
dpgeorge Mar 14, 2025
737acef
alif: Support more fine-grained pin alternate function selection.
dpgeorge Mar 20, 2025
3564ce5
alif/ospi_flash: Don't invalidate cache after erasing/writing.
dpgeorge Mar 31, 2025
df5e4ce
alif/ospi_flash_settings: Use 8-bit DFS for XIP.
dpgeorge Mar 31, 2025
c395f5e
alif/ospi_flash: Restore XIP settings after erase and write.
dpgeorge Apr 1, 2025
b79b64a
alif/mpu: Add MPU region for OSPI1 XIP memory range.
dpgeorge Mar 31, 2025
7c216d1
alif/boards/ALIF_ENSEMBLE: Add Alif Ensemble board config.
iabdalkader Dec 17, 2023
704d2f2
alif/boards/OPENMV_AE3: Add OpenMV AE3 board definition.
dpgeorge Sep 2, 2024
547207d
github/workflows: Add Alif port to CI.
iabdalkader Feb 20, 2025
2ad5925
tests/ports/alif_hardware: Add flash testing script.
dpgeorge Oct 21, 2024
037f2da
tests: Update UART and SPI tests to work on Alif boards.
dpgeorge Mar 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/workflows/ports_alif.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: alif port

on:
push:
pull_request:
paths:
- '.github/workflows/*.yml'
- 'tools/**'
- 'py/**'
- 'extmod/**'
- 'shared/**'
- 'lib/**'
- 'drivers/**'
- 'ports/alif/**'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build_alif:
strategy:
fail-fast: false
matrix:
ci_func: # names are functions in ci.sh
- alif_ae3_build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install packages
run: source tools/ci.sh && ci_alif_setup
- name: Build ci_${{matrix.ci_func }}
run: source tools/ci.sh && ci_${{ matrix.ci_func }}
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,9 @@
[submodule "lib/arduino-lib"]
path = lib/arduino-lib
url = https://github.com/arduino/arduino-lib-mpy.git
[submodule "lib/alif_ensemble-cmsis-dfp"]
path = lib/alif_ensemble-cmsis-dfp
url = https://github.com/alifsemi/alif_ensemble-cmsis-dfp.git
[submodule "lib/alif-security-toolkit"]
path = lib/alif-security-toolkit
url = https://github.com/micropython/alif-security-toolkit.git
5 changes: 2 additions & 3 deletions extmod/extmod.mk
Original file line number Diff line number Diff line change
Expand Up @@ -454,15 +454,14 @@ CYW43_DIR = lib/cyw43-driver
GIT_SUBMODULES += $(CYW43_DIR)
CFLAGS_EXTMOD += -DMICROPY_PY_NETWORK_CYW43=1
SRC_THIRDPARTY_C += $(addprefix $(CYW43_DIR)/src/,\
cyw43_bthci_uart.c \
cyw43_ctrl.c \
cyw43_lwip.c \
cyw43_ll.c \
cyw43_sdio.c \
cyw43_spi.c \
cyw43_stats.c \
)
ifeq ($(MICROPY_PY_BLUETOOTH),1)
DRIVERS_SRC_C += drivers/cyw43/cywbt.c
endif

$(BUILD)/$(CYW43_DIR)/src/cyw43_%.o: CFLAGS += -std=c11
endif # MICROPY_PY_NETWORK_CYW43
Expand Down
1 change: 1 addition & 0 deletions lib/alif-security-toolkit
Submodule alif-security-toolkit added at 63698e
1 change: 1 addition & 0 deletions lib/alif_ensemble-cmsis-dfp
125 changes: 125 additions & 0 deletions ports/alif/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
BOARD ?= ALIF_ENSEMBLE
BOARD_DIR ?= boards/$(BOARD)
BUILD ?= build-$(BOARD)
MCU_CORE ?= M55_HP
GIT_SUBMODULES += lib/tinyusb lib/alif_ensemble-cmsis-dfp lib/alif-security-toolkit
PORT ?= /dev/ttyACM0

ALIF_TOOLS ?= ../../lib/alif-security-toolkit/toolkit

JLINK_CMD_PREFIX = \
ExitOnError 1\n\
Device $(JLINK_DEV)\n\
SelectInterface SWD\n\
Speed auto\n\
Connect\n\
Reset\n\
ShowHWStatus\n

JLINK_CMD_SUFFIX = \
Reset\n\
Exit

ALIF_TOC_CONFIG = alif_cfg.json
ALIF_TOC_APPS = $(BUILD)/$(ALIF_TOC_CONFIG)
ALIF_TOC_CFLAGS += -DTOC_CFG_FILE=$(ALIF_TOOLKIT_CFG_FILE)

ifeq ($(MCU_CORE),M55_HP)

ALIF_TOC_CFLAGS += -DTOC_CORE_M55_HP_APP=1
ALIF_TOC_APPS += $(BUILD)/M55_HP/firmware.bin
JLINK_CMD = '\
$(JLINK_CMD_PREFIX)\
LoadFile "$(BUILD)/M55_HP/firmware.bin",0x80020000\n\
$(JLINK_CMD_SUFFIX)'

else ifeq ($(MCU_CORE),M55_HE)

ALIF_TOC_CFLAGS += -DTOC_CORE_M55_HE_APP=1
ALIF_TOC_APPS += $(BUILD)/M55_HE/firmware.bin
JLINK_CMD = '\
$(JLINK_CMD_PREFIX)\
LoadFile "$(BUILD)/M55_HE/firmware.bin",0x80320000\n\
$(JLINK_CMD_SUFFIX)'

else ifeq ($(MCU_CORE),M55_DUAL)

ALIF_TOC_CFLAGS += -DTOC_CORE_M55_HP_APP=1
ALIF_TOC_CFLAGS += -DTOC_CORE_M55_HE_APP=1
ALIF_TOC_APPS += $(BUILD)/M55_HP/firmware.bin $(BUILD)/M55_HE/firmware.bin
JLINK_CMD = '\
$(JLINK_CMD_PREFIX)\
LoadFile "$(BUILD)/M55_HP/firmware.bin",0x80020000\n\
LoadFile "$(BUILD)/M55_HE/firmware.bin",0x80320000\n\
$(JLINK_CMD_SUFFIX)'

else
$(error Invalid MCU core specified))
endif

include ../../py/mkenv.mk
include mpconfigport.mk
include $(BOARD_DIR)/mpconfigboard.mk

# include py core make definitions
include $(TOP)/py/py.mk
include $(TOP)/extmod/extmod.mk

################################################################################
# Main targets

.PHONY: all
all: $(BUILD)/firmware.toc.bin

# Force make commands to run the targets every time
# regardless of whether firmware.toc.bin already exists
# to detect changes in the source files and rebuild.
.PHONY: $(BUILD)/M55_HE/firmware.bin
.PHONY: $(BUILD)/M55_HP/firmware.bin

$(BUILD):
$(MKDIR) -p $@

$(BUILD)/M55_HP/firmware.bin:
make -f alif.mk MCU_CORE=M55_HP MICROPY_PY_OPENAMP_MODE=0

$(BUILD)/M55_HE/firmware.bin:
make -f alif.mk MCU_CORE=M55_HE MICROPY_PY_OPENAMP_MODE=1

$(BUILD)/$(ALIF_TOC_CONFIG): mcu/$(ALIF_TOC_CONFIG).in | $(BUILD)
$(ECHO) "Preprocess toc config $@"
$(Q)$(CPP) -P -E $(ALIF_TOC_CFLAGS) - < mcu/$(ALIF_TOC_CONFIG).in > $@

$(BUILD)/firmware.toc.bin: $(ALIF_TOC_APPS)
$(Q)python $(ALIF_TOOLS)/app-gen-toc.py \
--filename $(abspath $(BUILD)/$(ALIF_TOC_CONFIG)) \
--output-dir $(BUILD) \
--firmware-dir $(BUILD) \
--output $@

.PHONY: deploy
deploy: $(BUILD)/firmware.toc.bin
$(ECHO) "Writing $< to the board"
$(Q)python $(ALIF_TOOLS)/app-write-mram.py \
--cfg-part $(ALIF_TOOLKIT_CFG_PART) \
--port $(PORT) \
--pad \
--images file:$(BUILD)/application_package.ds

.PHONY: deploy-jlink
deploy-jlink: $(ALIF_TOC_APPS)
$(Q)echo -e $(JLINK_CMD) | $(JLINK_EXE)

.PHONY: maintenance
maintenance:
$(Q)python $(ALIF_TOOLS)/maintenance.py \
--cfg-part $(ALIF_TOOLKIT_CFG_PART) \
--port $(PORT)

.PHONY: update-system-package
update-system-package:
$(Q)python $(ALIF_TOOLS)/updateSystemPackage.py \
--cfg-part $(ALIF_TOOLKIT_CFG_PART) \
--port $(PORT)

include $(TOP)/py/mkrules.mk
21 changes: 21 additions & 0 deletions ports/alif/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MicroPython port to Alif Ensemble MCUs
======================================

This is a port of MicroPython to the Alif Ensemble series of microcontrollers.

Initial development of this Alif port was sponsored by OpenMV LLC.

Features currently supported:
- UART REPL.
- TinyUSB with CDC and MSC device support.
- Octal SPI flash with XIP mode.
- machine.Pin support with named pins.
- machine.UART, machine.SPI, machine.I2C, machine.RTC peripherals.
- WiFi and Bluetooth using cyw43.
- Dual core support of the HE and HP cores using Open-AMP.
- Low power modes.

The following more advanced features will follow later:
- Ethernet support.
- SDRAM support.
- Other machine modules.
Loading
Loading
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy