Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BHI260AB firmware SHA hash mismatch

    BHI260AB firmware SHA hash mismatch

    mra
    Member

    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:

    int8_t user_i2c_read(uint8_t reg_addruint8_t *reg_datauint32_t lenvoid *ptr) {
        uint16_t ndone = 0;
        uint8_t nread;
        uint8_t stop = 0;

        Wire.beginTransmission(BHI_I2C_address);
        Wire.write(reg_addr);
        Wire.endTransmission();
        while (ndone < len) {
          nread = min(255,len-ndone);
          ndone += nread;
          if (ndone == len) {
            stop = 1;
          }
          Wire.requestFrom(BHI_I2C_address,nread,stop);
          for (uint8_t i = 0; i < nread; i++) {
            *reg_data = Wire.read();
            reg_data++;
          }
        }
        
        return 0;
    }

    int8_t user_i2c_write(uint8_t reg_addrconst uint8_t *reg_datauint32_t lenvoid *ptr) {
        Wire.beginTransmission(BHI_I2C_address);
        Wire.write(reg_addr);
        while (len--) {
          Wire.write(*reg_data);
          reg_data++;
        }
        
        Wire.endTransmission();
        
        return 0;
    }
    5 REPLIES 5

    The problem has been solved. I obviously needed to use the level shifter board that came with the shuttle board, so I could simply power the level shifter board at 3V3. Somehow I assumed that the level shifter board was only needed to interface with the application board.

    Uploading to the flash memory now works like a charm. Thanks again for your assistance, your replies have led me to the solution.

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist