Follow Rust's installation guide.
Install tooling of the embedded Rust target for Cortex-M7F. It is necessary to use an older version of Rust, since newer version bloat the firmware:
rustup install 1.77.0
rustup +1.77.0 target add thumbv7em-none-eabihfThis project utilizes cargo make:
cargo +1.77.0 install cargo-makeFurthermore, the embedded part of the project uses flip link:
cargo +1.77.0 install flip-linkRun formatting, linter and unit tests:
cargo +1.77.0 makeRun the benchmark:
cd dsp
cargo +1.77.0 bench --bench benchUse a profiler to analyze the results:
cd dsp
rm -f target/release/deps/bench-*
rm -f callgrind.out.*
RUSTFLAGS="-g" cargo +1.77.0 bench --bench bench --no-run
BENCH=$(find target/release/deps -type f -executable -name 'bench-*')
valgrind \
--tool=callgrind \
--dump-instr=yes \
--collect-jumps=yes \
--simulate-cache=yes \
${BENCH} --bench --profile-time 10
kcachegrind callgrind.out.*This requires external probe, such as the ST LINK-V3 MINI. The benefit of this approach is that it allows to stay connected to the module, read logs, run a debugger, or execute tests on the module. Note that the module needs to be powered while the probe is connected.
This project uses probe-rs to deal with flashing. Start by installing its dependencies. For Fedora, it can be done by running the following:
sudo dnf install libusbx-devel libftdi-devel libudev-develYou may then install needed udev rules. See the probe-rs getting started to learn how.
Then install Rust dependencies of probe-rs:
cargo +1.77.0 install probe-run
cargo +1.77.0 install flip-linkTo flash the project, call this make target:
cargo +1.77.0 make flashLogging level can be set using an environment variable:
DEFMT_LOG=info cargo +1.77.0 make flashUnlike ST-Link, DFU flashing does not require any external probe. Just connect the module to your computer via a USB cable.
First, install dfu-util and cargo-binutils. On Fedora, this can be done by calling:
sudo dnf install dfu-util
cargo +1.77.0 install cargo-binutils
rustup +1.77.0 component add llvm-tools-previewClick the RESET button while holding the BOOT button of the Daisy Patch SM to enter the bootloader. Then call this make target:
cargo +1.77.0 make flash-dfuFirmware integration tests are executed directly on the module.
Before running an embedded test, first make sure to go through the guidance given in Flash via ST-Link.
To run one of the integration tests kept under firmware/tests:
cargo +1.77.0 make test-embedded buttonFor the most accurate results, benchmarks of control and dsp modules are executed directly against the hardware.
Before running a benchmark, first make sure to go through the guidance given in Flash via ST-Link.
To run one of the benchmarks kept under benches/src/bin:
cargo +1.77.0 make bench oversamplingDaisy Patch SM can fit up to 128 kB of firmware. It is important to make sure that the firmware size stays slim and no bloat gets in.
Install needed tooling:
cargo +1.77.0 install cargo-bloat
cargo +1.77.0 install cargo-binutils
rustup +1.77.0 component add llvm-tools-previewRun the following command often to make sure no unnecessary heavy dependencies are brought in:
cargo +1.77.0 make bloatThe user manual is defined in latex under manual/user. To build it, first
install needed pre-requisites. On Fedora it can be done by running the
following:
sudo dnf install inkscape texlive-latex texlive-ec texlive-microtype texlive-pagecolor texlive-parskip texlive-titling texlive-hardwrap texlive-mdwtoolsTo build the manual:
cargo +1.77.0 make manualThe built PDF is then available in manual/user/manual.pdf.
I extensivelly use https://github.com/Bouni/kicad-jlcpcb-tools to deal with the matters listed in the title, and to prepare project for manufacture.