Skip to content

Commit 7d15be8

Browse files
committed
fixed :)
1 parent 0461f9b commit 7d15be8

File tree

1 file changed

+32
-38
lines changed

1 file changed

+32
-38
lines changed

adafruit_icm20x.py

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
_ICM20649_DEVICE_ID = 0xE1 # Correct content of WHO_AM_I register
6262
_ICM20948_DEVICE_ID = 0xEA # Correct content of WHO_AM_I register
6363

64-
# Functions using these bank-specific registers are responsible for ensuring that the correct bank is set
65-
# perhaps refactor to have the bank be part of the definition
64+
# Functions using these bank-specific registers are responsible for ensuring
65+
# that the correct bank is set
6666
# Bank 0
6767
_ICM20X_WHO_AM_I = 0x00 # device_id register
6868
_ICM20X_REG_BANK_SEL = 0x7F # register bank selection register
@@ -159,8 +159,6 @@ class ICM20X: # pylint:disable=too-many-instance-attributes
159159
_raw_accel_data = Struct(_ICM20X_ACCEL_XOUT_H, ">hhh")
160160
_raw_gyro_data = Struct(_ICM20X_GYRO_XOUT_H, ">hhh")
161161

162-
# _i2c_master_duty_cycle_en = RWBit(_ICM20X_LP_CONFIG, 6)
163-
164162
# Bank 2
165163
_gyro_range = RWBits(2, _ICM20X_GYRO_CONFIG_1, 1)
166164
_accel_config = Struct(_ICM20X_ACCEL_CONFIG_1, ">B")
@@ -197,8 +195,7 @@ def initialize(self):
197195
sleep(0.005)
198196
self._sleep = False
199197
sleep(0.005)
200-
# TODO: method-ify
201-
# self._i2c_master_duty_cycle_en = True #WHY?
198+
202199
sleep(0.005)
203200

204201
self.accelerometer_range = AccelRange.RANGE_8G # pylint: disable=no-member
@@ -412,7 +409,7 @@ def __init__(self, i2c_bus, address=_ICM20649_DEFAULT_ADDRESS):
412409
super().__init__(i2c_bus, address)
413410

414411

415-
class ICM20948(ICM20X):
412+
class ICM20948(ICM20X): # pylint:disable=too-many-instance-attributes
416413
"""Library for the ST ICM-20948 Wide-Range 6-DoF Accelerometer and Gyro.
417414
418415
:param ~busio.I2C i2c_bus: The I2C bus the ICM20948 is connected to.
@@ -424,7 +421,6 @@ class ICM20948(ICM20X):
424421
_raw_mag_data = Struct(_ICM20948_EXT_SLV_SENS_DATA_00, "<hhhh")
425422

426423
_bypass_i2c_master = RWBit(_ICM20X_REG_INT_PIN_CFG, 1)
427-
_i2c_master_duty_cycle_en = RWBit(_ICM20X_LP_CONFIG, 6)
428424
_i2c_master_control = UnaryStruct(_ICM20X_I2C_MST_CTRL, ">B")
429425
_i2c_master_enable = RWBit(_ICM20X_USER_CTRL, 5) # TODO: use this in sw reset
430426
_i2c_master_reset = RWBit(_ICM20X_USER_CTRL, 1)
@@ -437,7 +433,6 @@ class ICM20948(ICM20X):
437433
_slave4_addr = UnaryStruct(_ICM20X_I2C_SLV4_ADDR, ">B")
438434
_slave4_reg = UnaryStruct(_ICM20X_I2C_SLV4_REG, ">B")
439435
_slave4_ctrl = UnaryStruct(_ICM20X_I2C_SLV4_CTRL, ">B")
440-
_slave4_ctrl = UnaryStruct(_ICM20X_I2C_SLV4_CTRL, ">B")
441436
_slave4_do = UnaryStruct(_ICM20X_I2C_SLV4_DO, ">B")
442437
_slave4_di = UnaryStruct(_ICM20X_I2C_SLV4_DI, ">B")
443438

@@ -463,14 +458,14 @@ def __init__(self, i2c_bus, address=_ICM20948_DEFAULT_ADDRESS):
463458

464459
@property
465460
def _mag_configured(self):
466-
for tries in range(5):
467-
id_tup = self._mag_id()
468-
# success
469-
if id_tup is not None:
461+
success = False
462+
for _i in range(5):
463+
success = self._mag_id() is not None
464+
465+
if success:
470466
return True
467+
self._reset_i2c_master()
471468
# i2c master stuck, try resetting
472-
else:
473-
self._reset_i2c_master()
474469
return False
475470

476471
def _reset_i2c_master(self):
@@ -514,9 +509,8 @@ def _magnetometer_init(self):
514509
self._setup_mag_readout()
515510

516511
return True
517-
################ SAME ABOVE ###########
518512

519-
# set up slave0 for reading into the bank 0 data registers
513+
# set up slave0 for reading into the bank 0 data registers
520514
def _setup_mag_readout(self):
521515
self._bank = 3
522516
self._slave0_addr = 0x8C
@@ -527,9 +521,7 @@ def _setup_mag_readout(self):
527521
sleep(0.005)
528522

529523
def _mag_id(self):
530-
mag_mfg_id = self._read_mag_register(0x00)
531-
mag_chip_id = self._read_mag_register(0x01)
532-
return (mag_mfg_id, mag_chip_id)
524+
return self._read_mag_register(0x01)
533525

534526
@property
535527
def magnetic(self):
@@ -554,18 +546,21 @@ def _read_mag_register(self, register_addr, slave_addr=0x0C):
554546
sleep(0.005)
555547
self._slave4_reg = register_addr
556548
sleep(0.005)
557-
self._slave4_ctrl = 0x80 # enable, don't raise interrupt, write register value, no delay
549+
self._slave4_ctrl = (
550+
0x80 # enable, don't raise interrupt, write register value, no delay
551+
)
558552
sleep(0.005)
559553
self._bank = 0
560-
# add max cycle count
561-
while not self._slave_finished:
562-
sleep(0.010)
563554

564-
# if i2c_mst_status & (1<<4): # Check I2C_SLV4_NACK bit [4]
565-
# txn_failed = True
555+
finished = False
556+
for _i in range(100):
557+
finished = self._slave_finished
558+
if finished: # bueno!
559+
break
560+
sleep(0.010)
566561

567-
# if count > max_cycles:
568-
# txn_failed = True
562+
if not finished:
563+
return None
569564

570565
self._bank = 3
571566
mag_register_data = self._slave4_di
@@ -581,18 +576,17 @@ def _write_mag_register(self, register_addr, value, slave_addr=0x0C):
581576
sleep(0.005)
582577
self._slave4_do = value
583578
sleep(0.005)
584-
self._slave4_ctrl = 0x80 # enable, don't raise interrupt, write register value, no delay
579+
self._slave4_ctrl = (
580+
0x80 # enable, don't raise interrupt, write register value, no delay
581+
)
585582
sleep(0.005)
586583
self._bank = 0
587584

588-
# add max cycle count
589-
# wait for write to mag register to finish")
590-
while not self._slave_finished:
591-
print(".", end="")
585+
finished = False
586+
for _i in range(100):
587+
finished = self._slave_finished
588+
if finished: # bueno!
589+
break
592590
sleep(0.010)
593591

594-
# if i2c_mst_status & (1<<4): # Check I2C_SLV4_NACK bit [4]
595-
# txn_failed = True
596-
597-
# if count > max_cycles:
598-
# txn_failed = True
592+
return finished

0 commit comments

Comments
 (0)