Hi all
I'm trying to read BNO08x data via UART on a Single Board Computer running Ubuntu 22.04. The problem is that the driver fails during initialization and I think I tracked the error down to a faulty init routine in __init__.py:
def initialize(self) -> None: """Initialize the sensor""" for _ in range(3): self.hard_reset() self.soft_reset() try: if self._check_id(): break except BaseException as e: # pylint:disable=bare-except print(e) time.sleep(0.5) else: raise RuntimeError("Could not read ID")
My test program is bno08x_simpletest_uart.py with some setup changes (baudrate 3000000, adjusted serial port and debug=True):
# SPDX-FileCopyrightText: 2020 Bryan Siepert, written for Adafruit Industries # # SPDX-License-Identifier: Unlicense import time import adafruit_bno08x from adafruit_bno08x.uart import BNO08X_UART import board # pylint:disable=wrong-import-order import busio # pylint:disable=wrong-import-order #uart = busio.UART(board.TX, board.RX, baudrate=3000000, receiver_buffer_size=2048) # uncomment and comment out the above for use with Raspberry Pi import serial uart = serial.Serial("/dev/ttyS4", 3000000) # for a USB Serial cable: # import serial # uart = serial.Serial("/dev/ttyUSB0", baudrate=115200) bno = BNO08X_UART(uart, reset=None, debug=True) bno.enable_feature(adafruit_bno08x.BNO_REPORT_ACCELEROMETER) bno.enable_feature(adafruit_bno08x.BNO_REPORT_GYROSCOPE) bno.enable_feature(adafruit_bno08x.BNO_REPORT_MAGNETOMETER) bno.enable_feature(adafruit_bno08x.BNO_REPORT_ROTATION_VECTOR) ...
Now when I run the program it stops with an error Could not read ID (full debug output below). Note that I have printed out the actual exception coming from self.check_id() as it would not have been visible in the original program (in the above printed initialize method). So I found this exception to be Didn't find packet end thrown in uart.py in the _read_packet method:
| raise RuntimeError("Didn't find packet end") |
What I believe happens is that the soft_reset method in uart.py is sending out a couple of packets which somehow cause the check_id method to fail. Further, when the check_id method sends out the command to read the product id, the response is read by the soft_reset in the next turn of the for loop. So the response will never be available in the check_id method. Thus, this whole init method fails. The simplest way to solve this is to comment out this line:
| self.soft_reset() |
The question is: What is this soft_reset good for? Is it safe to disable?
Thank you for any advice.
DBG:: ********** __init__ *************
Soft resetting...DBG:: channel 0 has 272 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 272
DBG:: Channel: SHTP_COMMAND (0)
DBG:: Sequence number: 1
DBG:: Data:
DBG:: [0x04] 0x00 0x01 0x04 0x00
DBG:: [0x08] 0x00 0x00 0x00 0x80
DBG:: [0x0C] 0x06 0x31 0x2E 0x30
DBG:: [0x10] 0x2E 0x30 0x00 0x02
DBG:: [0x14] 0x02 0x00 0x01 0x03
DBG:: [0x18] 0x02 0xFF 0x7F 0x04
DBG:: [0x1C] 0x02 0x00 0x01 0x05
DBG:: [0x20] 0x02 0xFF 0x7F 0x08
DBG:: [0x24] 0x05 0x53 0x48 0x54
DBG:: [0x28] 0x50 0x00 0x06 0x01
DBG:: [0x2C] 0x00 0x09 0x08 0x63
DBG:: [0x30] 0x6F 0x6E 0x74 0x72
DBG:: [0x34] 0x6F 0x6C 0x00 0x01
DBG:: [0x38] 0x04 0x01 0x00 0x00
DBG:: [0x3C] 0x00 0x08 0x0B 0x65
DBG:: [0x40] 0x78 0x65 0x63 0x75
DBG:: [0x44] 0x74 0x61 0x62 0x6C
DBG:: [0x48] 0x65 0x00 0x06 0x01
DBG:: [0x4C] 0x01 0x09 0x07 0x64
DBG:: [0x50] 0x65 0x76 0x69 0x63
DBG:: [0x54] 0x65 0x00 0x01 0x04
DBG:: [0x58] 0x02 0x00 0x00 0x00
DBG:: [0x5C] 0x08 0x0A 0x73 0x65
DBG:: [0x60] 0x6E 0x73 0x6F 0x72
DBG:: [0x64] 0x68 0x75 0x62 0x00
DBG:: [0x68] 0x06 0x01 0x02 0x09
DBG:: [0x6C] 0x08 0x63 0x6F 0x6E
DBG:: [0x70] 0x74 0x72 0x6F 0x6C
DBG:: [0x74] 0x00 0x06 0x01 0x03
DBG:: [0x78] 0x09 0x0C 0x69 0x6E
DBG:: [0x7C] 0x70 0x75 0x74 0x4E
DBG:: [0x80] 0x6F 0x72 0x6D 0x61
DBG:: [0x84] 0x6C 0x00 0x07 0x01
DBG:: [0x88] 0x04 0x09 0x0A 0x69
DBG:: [0x8C] 0x6E 0x70 0x75 0x74
DBG:: [0x90] 0x57 0x61 0x6B 0x65
DBG:: [0x94] 0x00 0x06 0x01 0x05
DBG:: [0x98] 0x09 0x0C 0x69 0x6E
DBG:: [0x9C] 0x70 0x75 0x74 0x47
DBG:: [0xA0] 0x79 0x72 0x6F 0x52
DBG:: [0xA4] 0x76 0x00 0x80 0x06
DBG:: [0xA8] 0x31 0x2E 0x31 0x2E
DBG:: [0xAC] 0x30 0x00 0x81 0x64
DBG:: [0xB0] 0xF8 0x10 0xF5 0x04
DBG:: [0xB4] 0xF3 0x10 0xF1 0x10
DBG:: [0xB8] 0xFB 0x05 0xFA 0x05
DBG:: [0xBC] 0xFC 0x11 0xEF 0x02
DBG:: [0xC0] 0x01 0x0A 0x02 0x0A
DBG:: [0xC4] 0x03 0x0A 0x04 0x0A
DBG:: [0xC8] 0x05 0x0E 0x06 0x0A
DBG:: [0xCC] 0x07 0x10 0x08 0x0C
DBG:: [0xD0] 0x09 0x0E 0x0A 0x08
DBG:: [0xD4] 0x0B 0x08 0x0C 0x06
DBG:: [0xD8] 0x0D 0x06 0x0E 0x06
DBG:: [0xDC] 0x0F 0x10 0x10 0x05
DBG:: [0xE0] 0x11 0x0C 0x12 0x06
DBG:: [0xE4] 0x13 0x06 0x14 0x10
DBG:: [0xE8] 0x15 0x10 0x16 0x10
DBG:: [0xEC] 0x17 0x00 0x18 0x08
DBG:: [0xF0] 0x19 0x06 0x1A 0x00
DBG:: [0xF4] 0x1B 0x00 0x1C 0x06
DBG:: [0xF8] 0x1D 0x00 0x1E 0x10
DBG:: [0xFC] 0x1F 0x00 0x20 0x00
DBG:: [0x100] 0x21 0x00 0x22 0x00
DBG:: [0x104] 0x23 0x00 0x24 0x00
DBG:: [0x108] 0x25 0x00 0x26 0x00
DBG:: [0x10C] 0x27 0x00 0x28 0x0E
DBG:: [0x110] 0x29 0x0C 0x2A 0x0E
*******************************
OK!
DBG::
********** READ ID **********
DBG::
** Sending ID Request Report **
DBG::
** Waiting for packet **
DBG:: ** Waiting for packet on channel 2 with report id 0xf8
DBG:: timeout=5.0
DBG:: channel 0 has 272 bytes available
Didn't find packet end
Soft resetting...DBG:: channel 2 has 16 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 16
DBG:: Channel: CONTROL (2)
DBG:: Report Type: COMMAND_RESPONSE (0xf1)
DBG:: Sequence number: 0
DBG:: Data:
DBG:: [0x04] 0xF1 0x00 0x84 0x00
DBG:: [0x08] 0x00 0x00 0x01 0x00
DBG:: [0x0C] 0x00 0x00 0x00 0x00
DBG:: [0x10] 0x00 0x00 0x00 0x00
*******************************
DBG:: channel 1 has 1 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 1
DBG:: Channel: EXE (1)
DBG:: Sequence number: 0
DBG:: Data:
DBG:: [0x04] 0x01
*******************************
DBG:: channel 2 has 16 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 16
DBG:: Channel: CONTROL (2)
DBG:: Report Type: PRODUCT_ID_RESPONSE (0xf8)
DBG:: Sequence number: 1
DBG:: Data:
DBG:: [0x04] 0xF8 0x02 0x03 0x02
DBG:: [0x08] 0xB4 0xA6 0x98 0x00
DBG:: [0x0C] 0x06 0x00 0x00 0x00
DBG:: [0x10] 0x0D 0x00 0x00 0x00
*******************************
DBG:: channel 2 has 48 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 48
DBG:: Channel: CONTROL (2)
DBG:: Report Type: PRODUCT_ID_RESPONSE (0xf8)
DBG:: Sequence number: 2
DBG:: Data:
DBG:: [0x04] 0xF8 0x00 0x01 0x02
DBG:: [0x08] 0x96 0xA4 0x98 0x00
DBG:: [0x0C] 0xE6 0x00 0x00 0x00
DBG:: [0x10] 0x04 0x00 0x00 0x00
DBG:: [0x14] 0xF8 0x00 0x04 0x04
DBG:: [0x18] 0x36 0xA3 0x98 0x00
DBG:: [0x1C] 0xE5 0x01 0x00 0x00
DBG:: [0x20] 0x03 0x00 0x00 0x00
DBG:: [0x24] 0xF8 0x00 0x04 0x02
DBG:: [0x28] 0xE3 0xA2 0x98 0x00
DBG:: [0x2C] 0x24 0x02 0x00 0x00
DBG:: [0x30] 0x0A 0x00 0x00 0x00
*******************************
DBG:: channel 0 has 272 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 272
DBG:: Channel: SHTP_COMMAND (0)
DBG:: Sequence number: 1
DBG:: Data:
DBG:: [0x04] 0x00 0x01 0x04 0x00
DBG:: [0x08] 0x00 0x00 0x00 0x80
DBG:: [0x0C] 0x06 0x31 0x2E 0x30
DBG:: [0x10] 0x2E 0x30 0x00 0x02
DBG:: [0x14] 0x02 0x00 0x01 0x03
DBG:: [0x18] 0x02 0xFF 0x7F 0x04
DBG:: [0x1C] 0x02 0x00 0x01 0x05
DBG:: [0x20] 0x02 0xFF 0x7F 0x08
DBG:: [0x24] 0x05 0x53 0x48 0x54
DBG:: [0x28] 0x50 0x00 0x06 0x01
DBG:: [0x2C] 0x00 0x09 0x08 0x63
DBG:: [0x30] 0x6F 0x6E 0x74 0x72
DBG:: [0x34] 0x6F 0x6C 0x00 0x01
DBG:: [0x38] 0x04 0x01 0x00 0x00
DBG:: [0x3C] 0x00 0x08 0x0B 0x65
DBG:: [0x40] 0x78 0x65 0x63 0x75
DBG:: [0x44] 0x74 0x61 0x62 0x6C
DBG:: [0x48] 0x65 0x00 0x06 0x01
DBG:: [0x4C] 0x01 0x09 0x07 0x64
DBG:: [0x50] 0x65 0x76 0x69 0x63
DBG:: [0x54] 0x65 0x00 0x01 0x04
DBG:: [0x58] 0x02 0x00 0x00 0x00
DBG:: [0x5C] 0x08 0x0A 0x73 0x65
DBG:: [0x60] 0x6E 0x73 0x6F 0x72
DBG:: [0x64] 0x68 0x75 0x62 0x00
DBG:: [0x68] 0x06 0x01 0x02 0x09
DBG:: [0x6C] 0x08 0x63 0x6F 0x6E
DBG:: [0x70] 0x74 0x72 0x6F 0x6C
DBG:: [0x74] 0x00 0x06 0x01 0x03
DBG:: [0x78] 0x09 0x0C 0x69 0x6E
DBG:: [0x7C] 0x70 0x75 0x74 0x4E
DBG:: [0x80] 0x6F 0x72 0x6D 0x61
DBG:: [0x84] 0x6C 0x00 0x07 0x01
DBG:: [0x88] 0x04 0x09 0x0A 0x69
DBG:: [0x8C] 0x6E 0x70 0x75 0x74
DBG:: [0x90] 0x57 0x61 0x6B 0x65
DBG:: [0x94] 0x00 0x06 0x01 0x05
DBG:: [0x98] 0x09 0x0C 0x69 0x6E
DBG:: [0x9C] 0x70 0x75 0x74 0x47
DBG:: [0xA0] 0x79 0x72 0x6F 0x52
DBG:: [0xA4] 0x76 0x00 0x80 0x06
DBG:: [0xA8] 0x31 0x2E 0x31 0x2E
DBG:: [0xAC] 0x30 0x00 0x81 0x64
DBG:: [0xB0] 0xF8 0x10 0xF5 0x04
DBG:: [0xB4] 0xF3 0x10 0xF1 0x10
DBG:: [0xB8] 0xFB 0x05 0xFA 0x05
DBG:: [0xBC] 0xFC 0x11 0xEF 0x02
DBG:: [0xC0] 0x01 0x0A 0x02 0x0A
DBG:: [0xC4] 0x03 0x0A 0x04 0x0A
DBG:: [0xC8] 0x05 0x0E 0x06 0x0A
DBG:: [0xCC] 0x07 0x10 0x08 0x0C
DBG:: [0xD0] 0x09 0x0E 0x0A 0x08
DBG:: [0xD4] 0x0B 0x08 0x0C 0x06
DBG:: [0xD8] 0x0D 0x06 0x0E 0x06
DBG:: [0xDC] 0x0F 0x10 0x10 0x05
DBG:: [0xE0] 0x11 0x0C 0x12 0x06
DBG:: [0xE4] 0x13 0x06 0x14 0x10
DBG:: [0xE8] 0x15 0x10 0x16 0x10
DBG:: [0xEC] 0x17 0x00 0x18 0x08
DBG:: [0xF0] 0x19 0x06 0x1A 0x00
DBG:: [0xF4] 0x1B 0x00 0x1C 0x06
DBG:: [0xF8] 0x1D 0x00 0x1E 0x10
DBG:: [0xFC] 0x1F 0x00 0x20 0x00
DBG:: [0x100] 0x21 0x00 0x22 0x00
DBG:: [0x104] 0x23 0x00 0x24 0x00
DBG:: [0x108] 0x25 0x00 0x26 0x00
DBG:: [0x10C] 0x27 0x00 0x28 0x0E
DBG:: [0x110] 0x29 0x0C 0x2A 0x0E
*******************************
OK!
DBG::
********** READ ID **********
DBG::
** Sending ID Request Report **
DBG::
** Waiting for packet **
DBG:: ** Waiting for packet on channel 2 with report id 0xf8
DBG:: timeout=5.0
DBG:: channel 0 has 272 bytes available
Didn't find packet end
Soft resetting...DBG:: channel 2 has 16 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 16
DBG:: Channel: CONTROL (2)
DBG:: Report Type: COMMAND_RESPONSE (0xf1)
DBG:: Sequence number: 0
DBG:: Data:
DBG:: [0x04] 0xF1 0x00 0x84 0x00
DBG:: [0x08] 0x00 0x00 0x01 0x00
DBG:: [0x0C] 0x00 0x00 0x00 0x00
DBG:: [0x10] 0x00 0x00 0x00 0x00
*******************************
DBG:: channel 1 has 1 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 1
DBG:: Channel: EXE (1)
DBG:: Sequence number: 0
DBG:: Data:
DBG:: [0x04] 0x01
*******************************
DBG:: channel 2 has 16 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 16
DBG:: Channel: CONTROL (2)
DBG:: Report Type: PRODUCT_ID_RESPONSE (0xf8)
DBG:: Sequence number: 1
DBG:: Data:
DBG:: [0x04] 0xF8 0x02 0x03 0x02
DBG:: [0x08] 0xB4 0xA6 0x98 0x00
DBG:: [0x0C] 0x06 0x00 0x00 0x00
DBG:: [0x10] 0x0D 0x00 0x00 0x00
*******************************
DBG:: channel 2 has 48 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 48
DBG:: Channel: CONTROL (2)
DBG:: Report Type: PRODUCT_ID_RESPONSE (0xf8)
DBG:: Sequence number: 2
DBG:: Data:
DBG:: [0x04] 0xF8 0x00 0x01 0x02
DBG:: [0x08] 0x96 0xA4 0x98 0x00
DBG:: [0x0C] 0xE6 0x00 0x00 0x00
DBG:: [0x10] 0x04 0x00 0x00 0x00
DBG:: [0x14] 0xF8 0x00 0x04 0x04
DBG:: [0x18] 0x36 0xA3 0x98 0x00
DBG:: [0x1C] 0xE5 0x01 0x00 0x00
DBG:: [0x20] 0x03 0x00 0x00 0x00
DBG:: [0x24] 0xF8 0x00 0x04 0x02
DBG:: [0x28] 0xE3 0xA2 0x98 0x00
DBG:: [0x2C] 0x24 0x02 0x00 0x00
DBG:: [0x30] 0x0A 0x00 0x00 0x00
*******************************
DBG:: channel 0 has 272 bytes available
********** Packet *************
DBG:: HEADER:
DBG:: Data Len: 272
DBG:: Channel: SHTP_COMMAND (0)
DBG:: Sequence number: 1
DBG:: Data:
DBG:: [0x04] 0x00 0x01 0x04 0x00
DBG:: [0x08] 0x00 0x00 0x00 0x80
DBG:: [0x0C] 0x06 0x31 0x2E 0x30
DBG:: [0x10] 0x2E 0x30 0x00 0x02
DBG:: [0x14] 0x02 0x00 0x01 0x03
DBG:: [0x18] 0x02 0xFF 0x7F 0x04
DBG:: [0x1C] 0x02 0x00 0x01 0x05
DBG:: [0x20] 0x02 0xFF 0x7F 0x08
DBG:: [0x24] 0x05 0x53 0x48 0x54
DBG:: [0x28] 0x50 0x00 0x06 0x01
DBG:: [0x2C] 0x00 0x09 0x08 0x63
DBG:: [0x30] 0x6F 0x6E 0x74 0x72
DBG:: [0x34] 0x6F 0x6C 0x00 0x01
DBG:: [0x38] 0x04 0x01 0x00 0x00
DBG:: [0x3C] 0x00 0x08 0x0B 0x65
DBG:: [0x40] 0x78 0x65 0x63 0x75
DBG:: [0x44] 0x74 0x61 0x62 0x6C
DBG:: [0x48] 0x65 0x00 0x06 0x01
DBG:: [0x4C] 0x01 0x09 0x07 0x64
DBG:: [0x50] 0x65 0x76 0x69 0x63
DBG:: [0x54] 0x65 0x00 0x01 0x04
DBG:: [0x58] 0x02 0x00 0x00 0x00
DBG:: [0x5C] 0x08 0x0A 0x73 0x65
DBG:: [0x60] 0x6E 0x73 0x6F 0x72
DBG:: [0x64] 0x68 0x75 0x62 0x00
DBG:: [0x68] 0x06 0x01 0x02 0x09
DBG:: [0x6C] 0x08 0x63 0x6F 0x6E
DBG:: [0x70] 0x74 0x72 0x6F 0x6C
DBG:: [0x74] 0x00 0x06 0x01 0x03
DBG:: [0x78] 0x09 0x0C 0x69 0x6E
DBG:: [0x7C] 0x70 0x75 0x74 0x4E
DBG:: [0x80] 0x6F 0x72 0x6D 0x61
DBG:: [0x84] 0x6C 0x00 0x07 0x01
DBG:: [0x88] 0x04 0x09 0x0A 0x69
DBG:: [0x8C] 0x6E 0x70 0x75 0x74
DBG:: [0x90] 0x57 0x61 0x6B 0x65
DBG:: [0x94] 0x00 0x06 0x01 0x05
DBG:: [0x98] 0x09 0x0C 0x69 0x6E
DBG:: [0x9C] 0x70 0x75 0x74 0x47
DBG:: [0xA0] 0x79 0x72 0x6F 0x52
DBG:: [0xA4] 0x76 0x00 0x80 0x06
DBG:: [0xA8] 0x31 0x2E 0x31 0x2E
DBG:: [0xAC] 0x30 0x00 0x81 0x64
DBG:: [0xB0] 0xF8 0x10 0xF5 0x04
DBG:: [0xB4] 0xF3 0x10 0xF1 0x10
DBG:: [0xB8] 0xFB 0x05 0xFA 0x05
DBG:: [0xBC] 0xFC 0x11 0xEF 0x02
DBG:: [0xC0] 0x01 0x0A 0x02 0x0A
DBG:: [0xC4] 0x03 0x0A 0x04 0x0A
DBG:: [0xC8] 0x05 0x0E 0x06 0x0A
DBG:: [0xCC] 0x07 0x10 0x08 0x0C
DBG:: [0xD0] 0x09 0x0E 0x0A 0x08
DBG:: [0xD4] 0x0B 0x08 0x0C 0x06
DBG:: [0xD8] 0x0D 0x06 0x0E 0x06
DBG:: [0xDC] 0x0F 0x10 0x10 0x05
DBG:: [0xE0] 0x11 0x0C 0x12 0x06
DBG:: [0xE4] 0x13 0x06 0x14 0x10
DBG:: [0xE8] 0x15 0x10 0x16 0x10
DBG:: [0xEC] 0x17 0x00 0x18 0x08
DBG:: [0xF0] 0x19 0x06 0x1A 0x00
DBG:: [0xF4] 0x1B 0x00 0x1C 0x06
DBG:: [0xF8] 0x1D 0x00 0x1E 0x10
DBG:: [0xFC] 0x1F 0x00 0x20 0x00
DBG:: [0x100] 0x21 0x00 0x22 0x00
DBG:: [0x104] 0x23 0x00 0x24 0x00
DBG:: [0x108] 0x25 0x00 0x26 0x00
DBG:: [0x10C] 0x27 0x00 0x28 0x0E
DBG:: [0x110] 0x29 0x0C 0x2A 0x0E
*******************************
OK!
DBG::
********** READ ID **********
DBG::
** Sending ID Request Report **
DBG::
** Waiting for packet **
DBG:: ** Waiting for packet on channel 2 with report id 0xf8
DBG:: timeout=5.0
DBG:: channel 0 has 272 bytes available
Didn't find packet end
Traceback (most recent call last):
File "/home/ubuntu/Adafruit_CircuitPython_BNO08x/bno08x_simpletest_uart.py", line 21, in <module>
bno = BNO08X_UART(uart, reset=None, debug=True)
File "/home/ubuntu/Adafruit_CircuitPython_BNO08x/adafruit_bno08x/uart.py", line 30, in __init__
super().__init__(reset, debug)
File "/home/ubuntu/Adafruit_CircuitPython_BNO08x/adafruit_bno08x/__init__.py", line 517, in __init__
self.initialize()
File "/home/ubuntu/Adafruit_CircuitPython_BNO08x/adafruit_bno08x/__init__.py", line 531, in initialize
raise RuntimeError("Could not read ID")
RuntimeError: Could not read ID