I am interfacing with the BHI260AB shuttle board over I2C using a Cortex M0 as the host MCU (Adafruit Feather M0 board). I use the 'load_firmware.c' example code provided with the BHY2 Sensor API to upload firmware to the external flash chip on the shuttle board. The firmware file I included in my code is the 'Bosch_SHUTTLE_BHI260_BMM150-flash.fw.h' file supplied with the BHY2 Sensor API. After uploading the firmware and booting the BHI260AB from flash, the Error Value register reports a 0x12 error ("SHA hash mismatch") and the Boot Status register activates the 'Flash Verify Error' bit.
I have made the following modifications to the example code:
- Changed to I2C interface
- Included custom functions for I2C read & write operations and a delay function
- Removed lines relating to COINES
- Replaced printf statements with appropriate printing statements for the Arduino framework
- Included a check on the result of the bhy2_upload_firmware_to_flash_partly function to ensure that the firmware is being received
- Decreased the size of the increment in the 'upload_firmware' function to 200, because the default 256 increment leads to a timeout error
I have also created an alternative firmware file using the BHI260 SDK, using the default configuration that comes with the SDK. At 1 point this firmware was uploaded correctly and after booting from flash a valid kernel version was reported, but at the next attempt with the exact same code and firmware it reported the SHA hash mismatch again.
I am suspecting that some bytes are getting lost in data transfer to the flash chip, but I have no clue what could cause that. Any possible clues are appreciated!
For reference, these are my I2C read and write functions: