@@ -518,6 +518,8 @@ def __init__(self, i2c, address=DEFAULT_I2C_ADDR, debug=False):
518
518
super ().__init__ (debug )
519
519
520
520
def _read_register (self , register ):
521
+ # Read a data register in the 0x00 to 0x08 range.
522
+ # Use read_byte function to read registers above this range.
521
523
if register < _AFE_GAIN or register > _FREQ_DISP_IRQ :
522
524
raise ValueError ("Register value must be in the range of 0x00 to 0x08" )
523
525
@@ -528,9 +530,9 @@ def _read_register(self, register):
528
530
# Successive individual byte reads, tend to fail. This trick
529
531
# was taken from pcfens/RPi-AS335 python libray on github.
530
532
#
531
- # In the original commments, pcfens says this trick is required
532
- # because smbus doesn't support repeated I2C starts to read the
533
- # registers directly on the sensor.
533
+ # In the original commments, Phil Fenstermacher ( pcfens) says this
534
+ # trick is required because smbus doesn't support repeated I2C
535
+ # starts to read the registers directly (singularly) on the sensor.
534
536
result = bytearray (9 )
535
537
i2c .readinto (result )
536
538
if self ._debug :
@@ -540,10 +542,21 @@ def _read_register(self, register):
540
542
return result [register ]
541
543
542
544
def _read_byte (self , register ):
543
- # read all the registers and get a particular byte value
545
+ # Read all the registers and get byte values above 0x08. This range
546
+ # contains the lightning look-up tables and calibration regisers.
547
+ # The read_register is more efficent for more frequent data registers.
544
548
with self ._i2c as i2c :
545
549
i2c .write (bytes ([0x00 ]),stop = False )
546
- # read all the available bytes available
550
+ # Write to the base address, then read all data registers in a
551
+ # single block read. Then return the desired value from the list.
552
+ # Successive individual byte reads, tend to fail. This trick
553
+ # was taken from pcfens/RPi-AS335 python libray on github.
554
+ # Note that to get to the calibration registers, we have to read
555
+ # 63 bytes (ranging from 0x00 to 0x3D).
556
+ #
557
+ # In the original commments, Phil Fenstermacher (pcfens) says this
558
+ # trick is required because smbus doesn't support repeated I2C
559
+ # starts to read the registers directly (singularly) on the sensor.
547
560
result = bytearray (0x3E )
548
561
i2c .readinto (result )
549
562
if self ._debug :
@@ -570,6 +583,7 @@ def __init__(self, spi, cs, debug=False):
570
583
self ._cs .value = True
571
584
super ().__init__ (debug )
572
585
586
+
573
587
def _read_register (self , register ):
574
588
# set the address read bits
575
589
addr = (register | _SPI_READ_MASK ) & 0xFF
@@ -578,8 +592,7 @@ def _read_register(self, register):
578
592
pass
579
593
580
594
# configure for SPI mode 1
581
- self ._spi .configure (phase = 1 , polarity = 0 )
582
- # self._spi.configure(baudrate=2000000, phase=1, polarity=0)
595
+ self ._spi .configure (baudrate = 2000000 , phase = 1 , polarity = 0 )
583
596
# start the read
584
597
self ._cs .value = False
585
598
# write msb first
@@ -599,6 +612,10 @@ def _read_register(self, register):
599
612
self ._cs .value = True
600
613
self ._spi .unlock ()
601
614
615
+ def _read_byte (self , register ):
616
+ # For SPI read_byte function is same as read_register register
617
+ return self ._read_register (register )
618
+
602
619
def _write_register (self , register , value ):
603
620
register &= 0x3F # Write, bit 7, 6 low.
604
621
@@ -607,8 +624,7 @@ def _write_register(self, register, value):
607
624
pass
608
625
609
626
# configure for SPI mode 1
610
- # self._spi.configure(baudrate=2000000, phase=1, polarity=0)
611
- self ._spi .configure (phase = 1 , polarity = 0 )
627
+ self ._spi .configure (baudrate = 2000000 , phase = 1 , polarity = 0 )
612
628
# start the write
613
629
self ._cs .value = False
614
630
# write msb first
0 commit comments