How to I program a specific firmware version?

I recently had a problem whose root cause was that two OpenMV boards contained different firmware versions. So I need to ensure that we can freeze firmware at a named version before deploying devices, and not risk different devices having different firmware.

AFAIK the IDE prompts me to update the devices to the “latest” version, which of course will change from time to time.

I can see each version is in Github, but I don’t see the facility to select a specific version to program within the IDE.

Q1 Where are the tools and instructions for programming a specific firmware release into OpenMV devices?

Q2 I am using what I know as “OpenMV H7”. The firmware releases unzip folders named “OPENMV2”, “OPENMV3”, “OPENMV4” etc. Which files do I use for an “H7” device?

Suggestion: if the feature is missing from the IDE, could I suggest a tool that permots programming named firmware images, and not just the “latest”.

Thx - Charles

You just need to download the firmware zip from github releases and upload OPENMV*/firmware.bin for you camera, in this case it’s OPENMV4. I don’t think this feature will be added because we will have to include all the previous firmware releases and that will make the IDE much bigger, but feel free to post a feature request here: GitHub - openmv/openmv-ide: QtCreator based OpenMV IDE

I have to keep the IDE size under 200 MB. Otherwise, CloudFlare starts having issues. Carrying around all the firmware releases will blow the IDE size up.

Hi, I have successfully loaded the v3.9.3 from the release for the openmv h7 plus, and the software works. My issue is how do you build it and get it working. I have installed all the necessary toolchains and git clone openmv. I checkout the v3.9.3 and modified the makefile to include the extra CFLAGS but I don;t seem to be able to build it.

CFLAGS += -std=gnu99 -Wall -Werror -Warray-bounds -mthumb -nostartfiles -mabi=aapcs-linux -fdata-sections -ffunction-sections -Wno-error=strict-aliasing

The error message when I type

make TARGET=OPENMV4P

is

/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: warning: /usr/lib/gcc/arm-none-eabi/6.3.1/thumb/v7e-m/fpv4-sp/hard/libgcc.a(_fixdfdi.o) uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: warning: /usr/lib/gcc/arm-none-eabi/6.3.1/thumb/v7e-m/fpv4-sp/hard/libgcc.a(_fixunsdfdi.o) uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: warning: /usr/lib/gcc/arm-none-eabi/6.3.1/thumb/v7e-m/fpv4-sp/hard/libgcc.a(_udivmoddi4.o) uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: /home/paul/Documents/projects/camera_module/openmv/openmv/src/build/bin/firmware.elf section `._heap' will not fit in region `SRAM1'
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: region `SRAM1' overflowed by 152 bytes
collect2: error: ld returned 1 exit status
omv/ports/stm32/omv_portconfig.mk:558: recipe for target 'firmware' failed
make: *** [firmware] Error 1

I got it working now.

Just removed all the other flags and added only this one.

CFLAGS += -Wno-error=strict-aliasing