Description
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:
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:
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