Firmware for the Sinara 1550 Kirdy laser diode driver
Go to file
linuswck bad21806f8 gui: Add new form for temp adc filter cfg and settable polling rate
List of Changes:
1. Get report via polling instead of active report mode
2. Allow user to set a custom report polling rate while settings polling rate is fixed to 10Hz
- it is necessary for pid autotune to function correctly
3. Add a form for configuring temperature adc filter
4. Use two different timer for polling report and settings to optimize performance

Known Issue:
1. CPU utilization increases with the report polling rate as for each report recv-ed, gui renders and plots one frame of the 4 graphs
2024-10-10 17:25:33 +08:00
.cargo cargo fmt 2024-04-23 17:09:26 +08:00
pykirdy gui: Add new form for temp adc filter cfg and settable polling rate 2024-10-10 17:25:33 +08:00
src cmd_handler: Add cmd to get temp adc polling interval 2024-10-10 13:41:15 +08:00
.gitignore gitignore: ignore python .pyc files 2024-04-23 15:52:32 +08:00
BSD.md add BSD build instructions 2024-02-12 18:33:06 +08:00
Cargo.lock firmware: do not display smoltcp log 2024-08-27 18:49:43 +08:00
Cargo.toml firmware: do not display smoltcp log 2024-08-27 18:49:43 +08:00
LICENSE project init 2022-10-20 15:17:43 +08:00
README.md Update README 2024-03-20 11:55:21 +08:00
build.rs cargo fmt 2024-04-23 17:09:26 +08:00
erase_flash_settings.bin Add instructions to erase flash settings with DFU 2024-03-12 11:26:45 +08:00
flake.lock cargo fmt 2024-04-23 17:09:26 +08:00
flake.nix Update pid autotuner code 2024-09-04 15:39:27 +08:00
memory.x memory.x: Add comment on the reserved flash sector 2024-01-16 15:27:43 +08:00
openocd.gdb project init 2022-10-20 15:17:43 +08:00
rustfmt.toml cargo fmt 2024-04-23 17:09:26 +08:00

README.md

Testing Firmware for the Sinara 1550 Kirdy

  • This repo is for testing only. Not intended for production use.

Building

Reproducible build with Nix

kirdy firmware is packaged using the Nix Flakes system. Install Nix 2.4+ and enable flakes by adding experimental-features = nix-command flakes to nix.conf (e.g. ~/.config/nix/nix.conf).

Once you have Flakes enabled, you can use nix build to build the firmware.

Development environment

Clone this repository and with Nix Flakes enabled, use the following commands:

nix develop
cargo build

The resulting ELF file will be located under target/thumbv7em-none-eabihf/release/kirdy.

Alternatively, you can install the Rust toolchain without Nix using rustup; see the Rust manifest file pulled in flake.nix to determine which Rust version to use.

For building on FreeBSD or OpenBSD, see BSD.md.

Debugging

Connect SWDIO/SWCLK/RST/GND to a programmer such as ST-Link v2.1. Run OpenOCD:

openocd -f interface/stlink.cfg -f target/stm32f4x.cfg

You may need to power up the programmer before powering the device. Leave OpenOCD running. Run the GNU debugger:

gdb target/thumbv7em-none-eabihf/release/kirdy

(gdb) source openocd.gdb

Flashing

If the firmware to be flashed involves an update on the flash settings, it is required to erase the flash settings before flashing the new firmware to avoid unexpected hardware behavior. There are several options for flashing kirdy. DFU requires only a USB-C cable or RJ45 cable, whereas OpenOCD needs a JTAG/SWD adapter.

dfu-util on Linux

  • Install the DFU USB tool (dfu-util).
  • Convert firmware from ELF to BIN: arm-none-eabi-objcopy -O binary kirdy kirdy.bin (you can skip this step if using the BIN from Hydra)
  • Put STM32 into DFU Mode. You can either
    • Connect to the USB Type C cable to kirdy next to the RJ45 Jack. After that, add BOOT0 jumper to kirdy near programming headers and then cycle board power to put it in DFU mode. OR
    • Plug in RJ45 cable, which connect to a network that is accessible by your computer and send the corresponding dfu json command via TCP Socket to kirdy. Please see the python test script for the command.
  • Push firmware to flash: dfu-util -a 0 -s 0x08000000:leave -D kirdy.bin
  • If you plugged in the BOOT0 jumper, you will need to
    1. Remove BOOT0 jumper
    2. Cycle power to leave DFU update mode
  • If you plugged in the RJ45 cable, the MCU would start its application code automatically. No power cycle is needed.

st.com DfuSe tool on Windows

On a Windows machine install st.com DfuSe USB device firmware upgrade (DFU) software. link.

  • add jumper to kirdy across 2-pin jumper adjacent to JTAG connector
  • cycle board power to put it in DFU update mode
  • connect USB Type C to PC
  • use st.com software to upload firmware
  • remove jumper
  • cycle power to leave DFU update mode

OpenOCD

openocd -f interface/stlink.cfg -f target/stm32f4x.cfg -c "program target/thumbv7em-none-eabihf/debug/kirdy verify reset; exit"

Erasing Flash Settings

The flash settings are stored in the last flash sector(ID: 11) of bank 0 of stm32f405. You can erase it with JTAG/SWD adapter or by putting the device in Dfu mode. You may find it useful if you have set network settings incorrectly.

With JTAG/SWD adapter connected, issue the following command:

openocd -f interface/stlink.cfg -f target/stm32f4x.cfg -c "flash init; init; halt; flash erase_sector 0 11 last; reset; exit"

With STM32 in DFU Mode, connect the USB Type C cable and then issue the following command:

dfu-util -a 0 -s 0x080E0000:leave -D erase_flash_settings.bin