ePenguin Software Framework (WIP) is a cross-platform, cross-manufacturer software framework for working with many different 32-bit and 8-bit microcontrollers. It is in its early stages of development.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Penguin e4f5ca0a30 changed make-manifest to use default arm-none-eabi toolchain and arm-none-eabi-gdb instead of arm-none-eabi-gdb-py for maximum compatibility 1 week ago
arch working on core module for same54 11 months ago
manifest changed make-manifest to use default arm-none-eabi toolchain and arm-none-eabi-gdb instead of arm-none-eabi-gdb-py for maximum compatibility 1 week ago
scripts working on core module for same54 11 months ago
test updating docs again 11 months ago
toolchains @ 50e0006b9b . 11 months ago
.gdb_history adding documentation 1 week ago
.gitignore restructuring again 1 year ago
.gitmodules added stuff 1 year ago
README.md adding documentation 1 week ago
env.sh adding documentation 1 week ago
epenguin.hpp fucking printing on linux 1 year ago
epenguin_hal.hpp fucking printing on linux 1 year ago

README.md

ePenguin Software Framework

Warning: This only works for x86_64 linux machines atm. Windows development is in progress. I have no idea how to go about testing for mac so... yeah.

As of right now, only the new command works. Everything else is not implemented yet. However, new does most of the heavy lifting so the other commands will come quickly once it is finished and polished.

Prerequisites

You need the following things installed for igloo+eSF to work properly:

  • openocd
  • rust (nightly preferred becuase it’s just better)
  • toolchains (more below)

In the future, these things will just be bundled with eSF. The problem with some toolchains is dependency matching for various distros.

Toolchains

Loose naming convention for toolchains: ----

  • arm-none-eabi:

    • Toolchain targetting the embedded ABI for arm
    • Debian/Ubuntu:
    sudo apt-get install gcc-arm-none-eabi binutils-arm-none-eabi gdb-arm-none-eabi
    
    • Arch
    sudo pacman -S arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-gdb arm-none-eabi-newlib
    

NOTE: If you run into an issue when running arm-none-eabi-gdb where it needs libncurses.so.5 on Ubuntu/Debian, install this package:

sudo apt-get install libncurses5
  • avr-*
Debian:
(To be added)

Arch:
sudo pacman -S avr-binutils avr-gcc avr-gdb avr-libc avrdude

OpenOCD

It is recommended that you download the zip here: https://github.com/xpack-dev-tools/openocd-xpack/releases

Otherwise, you can install it from your package manager:

Arch

sudo pacman -S openocd

Debian/Ubuntu

sudo apt install openocd

Rustlang

Doesn’t get any easier than this: https://www.rust-lang.org/tools/install

Instructions for testing

WARNING: DO NOT COPY AND PASTE THESE INSTRUCTIONS. READ THROUGH THEM.

cd ~

# NOTE: If you plan on using the toolchain packaged with ESF, which may or may not work right now, clone recursively:
git clone --recursive https://git.epenguin.net/ePenguin/ePenguin-Software-Framework.git
# Otherwise
git clone https://git.epenguin.net/ePenguin/ePenguin-Software-Framework.git

git clone https://git.epenguin.net/ePenguin/ePenguin-Igloo.git
sudo chmod -R u+x ~/ePenguin-Software-Framework/
sudo chmod -R u+x ~/ePenguin-Igloo/
export ESF_DIR=~/ePenguin-Software-Framework
alias igloo_rls=~/ePenguin-Igloo/target/release/igloo
alias igloo_dbg=~/ePenguin-Igloo/target/debug/igloo
alias igloo=igloo_dbg

# Building
cd ~/ePenguin-Igloo

# Debug build is default
cargo build

# For release build
# cargo build --release

igloo

You should see a help menu thrown at you for more instruction.

I’ve aliased igloo_dbg for igloo, but you can use the release version if you want better performance and faster compile times. It is highly recommended to use the debug version right now, though.

Generating a new project

igloo new <project_name> --target=<mcu>
# Example
igloo new testproject --target=samd21j18a

Instructions for building

The framework comes with compilers so no external dependencies are needed. There are unfortunately no libraries yet because I want to nail igloo, the project manager, with certainty first.

cd <project_name>/.igloo/target/
make

Instructions for running

I’m not including these steps because openocd releases vary with target configs. I recommend you download a release from https://openocd.org and unzip it there. Downloading via a package manager almost guarantees you’re going to be missing target scripts.

At some point in the future, I’m going to fork openocd just so I can make sure default board config scripts are 100% available because right now it’s really hit or miss on various distros.

for the e54 xplained

openocd -f board/atmel_same54_xplained_pro.cfg

for the d21 xplained

openocd -f board/atmel_samd21_xplained_pro.cfg

If the E54 xplained cfg isn’t found for some reason, try this:

echo "
#
# Atmel SAME54 Xplained Pro evaluation kit.
#

source [find interface/cmsis-dap.cfg]
transport select swd
# chip name
set CHIPNAME same54p20a
source [find target/atsame5x.cfg]
" > same54.cfg

openocd -f same54.cfg

Now in another terminal:

cd <project_dir>/target/same54p20a/
make
${ESF_DIR}/toolchains/arm/bin/arm-none-eabi-gdb -iex "target extended-remote localhost:3333" testdir.elf
load
monitor reset

If you’re using gdb with python extensions then use this instead

${ESF_DIR}/toolchains/arm/bin/arm-none-eabi-gdb-py -iex "target extended-remote localhost:3333" testdir.elf

Supported Targets

The framework allows me to add support for mcus pretty rapidly. I can add entire families of mcus with a few lines in the manifests. For now I’ve added support for mcus I use, but I’ll be adding support for every Microchip SAM mcu shortly, as well as SiFive MCUs and STM32 MCUs.

Status Guide

Icon Description
In Development
Unstable
Experimental
Stable

ARM32

MCU Status
samd21e15a
samd21e16a
samd21e17a
samd21e18a
samd21g15a
samd21g16a
samd21g17a
samd21g17au
samd21g18a
samd21g18au
samd21j15a
samd21j16a
samd21j17a
samd21j18a
samd51g18a
samd51g19a
samd51j18a
samd51j19a
samd51j20a
samd51n19a
samd51n20a
samd51p19a
samd51p20a
same54n19a
same54n20a
same54p19a
same54p20a
same70j19a
same70j20a
same70j21a
same70n19a
same70n20a
same70n21a
same70q19a
same70q20a
same70q21a

RISC-V

MCU Status
fe310g000
fe310g002