Skip to content
Snippets Groups Projects
Commit 11cdcf77 authored by Gijs Schoonderbeek's avatar Gijs Schoonderbeek
Browse files

Added I2C-switch check

parent d4f5d8e5
No related branches found
No related tags found
1 merge request!3Apsct production
......@@ -18,6 +18,7 @@ import sys
import APSCT_I2C
import time
import RPi.GPIO as gpio
import random
sys.path.insert(0, '.')
import os
if os.name == "posix":
......@@ -41,6 +42,9 @@ class ApsctClass:
self.pll_160 = PllClass("160MHz")
self.sensors = ApsctSensors()
self.pps = PpsClass()
self.i2cswitch = []
for addr in APSCT_I2C.i2c_switch_addr:
self.i2cswitch.append(I2cSwitch(address=addr))
def read_IO_expanderis(self):
#
......@@ -103,6 +107,8 @@ class ApsctClass:
#
result = self.sensors.check_values()
result = result & self.pps.check_timing()
for i2c_switch in self.i2cswitch:
result = result & i2c_switch.check_switch(data=random.randint(0,2**8))
if self.frequency == "200MHz":
self.pll_200.read_lock()
lock = self.pll_200.lock
......@@ -358,6 +364,8 @@ class ApsctSensors:
self.power_supplies = list(APSCT_I2C.PWR_LOCATIONS.keys())
self.voltages = {}
self.temperature = 9999
self.dev_i2c_sensor.write_bytes(0xB0, 0xB8)
def apsct_sensors(self):
for sens_line in range(7):
......@@ -367,6 +375,8 @@ class ApsctSensors:
def read_all_voltages(self):
for pwr in self.power_supplies:
self.voltages[pwr] = self.read_voltage(APSCT_I2C.PWR_LOCATIONS[pwr])
if self.voltages[pwr] < 3:
self.voltages[pwr] = self.read_voltage(APSCT_I2C.PWR_LOCATIONS[pwr])
return True
def check_values(self):
......@@ -384,6 +394,8 @@ class ApsctSensors:
if not (0.9*expected < self.voltages[pwr] < 1.1*expected):
result = False
print(f"Error: {pwr: <9} expected: {expected} V read: {self.voltages[pwr]:4.2f} V")
else:
print(f"OK : {pwr: <9} expected: {expected} V read: {self.voltages[pwr]:4.2f} V")
if not (15 < self.temperature < 50):
result = False
print(f"Error temperature read {self.temperature:4.2f} °C")
......@@ -405,7 +417,7 @@ class ApsctSensors:
print(stri)
sleep(0.2)
self.dev_i2c_sensor.write_bytes(channel_select_word, 0xB8)
sleep(0.5)
sleep(0.2)
ret_ack, ret_value = self.dev_i2c_sensor.read_last_reg(3)
if DEBUG:
stri = "Return value input 0 : 0x{0} ".format(ret_value)
......@@ -485,3 +497,32 @@ class PpsClass:
print(f", timing is OK: {timepps:4.2f} s")
self.timing = True
return self.timing
class I2cSwitch:
#
# Class to check a I2C-switch
#
def __init__(self, address=0x70):
#
# Whats needed to measure the toggle on GPIO24
#
self.address = address
self.dev_i2c_switch = I2C(address)
self.dev_i2c_switch.bus_nr = 1
def check_switch(self, data=0xa5):
print(f"Check I2C switch at 0x{self.address:x}", end=' ')
ret_ack, ret_value = self.dev_i2c_switch.read_bytes(0)
if ret_ack < 1:
print("I2C-Switch not found")
return False
else:
self.dev_i2c_switch.write_bytes(0, data)
ret_ack, ret_value = self.dev_i2c_switch.read_last_reg(1)
read_value_int = int(ret_value, 16)
if read_value_int == data:
print(f"OK wrote 0x{data:02X} read back 0x{read_value_int:02X}")
return True
else:
print(f"ERROR wrote 0x{data:02X} read back 0x{read_value_int:02X}")
return False
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment