We are using a custom board with BHI260. HOST_BOOT pin is connected to GND on the board. The 4mB flash is connected to QSPI pins of the sensor. I am using micropython and esp32 for I2C communication. I am trying to upload firmware to flash by using commands which are stated in the API and the datasheet. The firmware which I am uploading is Bosch_SHUTTLE_BHI260-flash.fw.
I followed every step in BHY2-Sensor-API. I imitated the whole operation of bhy2_upload_firmware_to_flash_partly method on my setup. Status code returns STATUS_FLASH_WRITE_COMPLETE, but BHY2_REG_BOOT_STATUS doesn't return BST_HOST_FW_VERIFY_DONE bit as 1 at the end of the upload.
Basically, I am sending every packet as following. Every packet has the same structure and the sector address field is being updated before sending the package.
[i2c_address][register_address][command(2bytes)][length of payload(2 bytes)][flash address (4 bytes)][firmware part]
First packet = [0x28][0x00] [0x05,0x00][0xCC, 0x00][0x84, 0x1F, 0x00, 0x00][200 bytes part of the firmware]
When I use the upload to ram function command, boot status returns 0x31. It includes BST_HOST_FW_VERIFY_DONE.
I attached logicdata to this post.
Can you help me to solve this problem? How can I achieve the upload firmware to flash and boot from flash operations succesfully?
Moreover, after upload, I am sending BHY2_CMD_BOOT_FLASH, BHY2_REG_CHAN_STATUS, and the status code field points to the error which is [Sensor error] Host Download Channel Empty. Can you tell me what it is supposed to mean?
Solved! Go to Solution.
I assume that you already reviewed the logicdata that I uploaded.
Meanwhile, I solved the problem. After sending boot command, I am sending two additional bytes right now. It is solved in this way. The i2c data is as follows.