From c980ab717c8d62a1a108e5bed2850397b7ba1447 Mon Sep 17 00:00:00 2001 From: Gijs Schoonderbeek <schoonderbeek@astron.nl> Date: Tue, 11 May 2021 15:53:53 +0200 Subject: [PATCH] rb_unb2c.py second step classification tested on the HW --- rd_unb2c.py | 56 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/rd_unb2c.py b/rd_unb2c.py index bbb3992..8f45049 100644 --- a/rd_unb2c.py +++ b/rd_unb2c.py @@ -16,9 +16,10 @@ from UniBoard2_I2C import * I2CBUSNR=3 class c_node: - def __int__(self, number): + def __init__(self, number): self.node_number = number self.pols=[] + self.set_i2c_switches() for pol in list(LOC_POLS.keys()): self.pols.append(c_pol(pol)) self.ddr=[] @@ -29,6 +30,7 @@ class c_node: self.qsfp.append(c_qsfp(qsfp_cnt)) def read_all(self): + self.set_i2c_switches() for pol in self.pols: pol.read_all() for ddr in self.ddr: @@ -63,35 +65,48 @@ class c_qsfp: self.temp = 0 self.volt = 0 self.status = False + self.select_qsfp() + self.qsfp_cage = I2C(QSFP_I2C_ADDR) + self.qsfp_cage.bus = I2CBUSNR def select_qsfp(self): node_switch = I2C(NODE_I2C_SWITCH) node_switch.bus = I2CBUSNR ret_ack = node_switch.write_bytes(0x0, QSFP_PORT[self.port]) if ret_ack < 1: - print("Node I2C switch not found") - self.status = True +# print("Node I2C switch not found") + self.status = False else: - self.status = False + self.status = True - def read_temp(selfs): - ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_TEMP, 2) - if ret_ack < 1 : + def read_temp(self): + self.select_qsfp() + print("read QSFP") + ret_ack, raw_ret = self.qsfp_cage.read_bytes(QSFP_TEMP, 2) + if (ret_ack < 1) | (raw_ret[:2]=='ff'): +# stri = "No QSFP found in port {0}".format(self.port) +# print(stri) self.status=False else: ret_value = [] ret_value.append(int(raw_ret[:2], 16)) ret_value.append(int(raw_ret[2:], 16)) self.temp = (ret_value[0] * 256 + ret_value[1]) / 256 + self.status=True - def read_volt(selfs): - ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_VOLT, 2) - if ret_ack < 1 : + def read_volt(self): + self.select_qsfp() + ret_ack, raw_ret = self.qsfp_cage.read_bytes(QSFP_VOLT, 2) + if (ret_ack < 1) | (raw_ret[:2]=='ff') : + stri = "No QSFP found in port {0}".format(self.port) + print(stri) self.status=False else: + ret_value=[] ret_value.append(int(raw_ret[:2], 16)) ret_value.append(int(raw_ret[2:], 16)) self.volt = (ret_value[0] * 256 + ret_value[1]) * 0.0001 + self.status=True def read_all(self): self.read_temp() @@ -99,13 +114,14 @@ class c_qsfp: def print_status(self): if self.status: - stri = "Slot {0} : QSFP Temperature QSFP {1:3.2f} gr. C Voltage {2:3.2f} V".format(self.port self.temp, self.volt) + stri = "Slot {0} : QSFP Temperature QSFP {1:3.2f} gr. C Voltage {2:3.2f} V".format(self.port, self.temp, self.volt) print(stri) class c_ddr: def __init__(self, bank): self.bank = bank + self.status=False if self.bank == 0: self.ddr_dev = I2C(MB_I_TEMP_I2C_ADDR) else: @@ -125,12 +141,15 @@ class c_ddr: def read_temp(self): ret_ack, raw_ret = self.ddr_dev.read_bytes(MB_TEMP_REG, 2) if ret_ack < 1: - stri = "No DDR moduel in slot {0} node {1}".format(module, node_nr) +# stri = "No DDR moduel in slot {0}".format(self.bank) +# print(stri) + self.status=False else: ret_value = [] ret_value.append(int(raw_ret[:2], 16)) ret_value.append(int(raw_ret[2:], 16)) - temp = (((ret_value[0] & 0x1F) * 0x100) + (ret_value[1] & 0xFC)) * 0.0625 + self.temp = (((ret_value[0] & 0x1F) * 0x100) + (ret_value[1] & 0xFC)) * 0.0625 + self.status=True def read_all(self): self.set_i2c_switch() @@ -138,7 +157,7 @@ class c_ddr: def print_status(self): if self.status: - stri = "Temperature DDR4 in slot {0} is {2:3.2f} C".format(self.bank, temp) + stri = "Temperature DDR4 in slot {0} is {1:3.2f} C".format(self.bank, self.temp) print(stri) @@ -390,7 +409,7 @@ if 0: for node_cnt in range(4): for qsfp_cnt in range(6): read_qsfp(node_nr = node_cnt, module=qsfp_cnt) -else: +#else: for node_cnt in range(4): read_pol(node_cnt, LOC_POWER_CORE) # read_pol(-1,0x01) @@ -407,9 +426,10 @@ else: if ret_ack < 1: print("Node I2C switch not found") -node = c_node(0) -node.read_all() -node.print_status() +for cnt in range(2): + node = c_node(cnt) + node.read_all() + node.print_status() #for pol in list(LOC_POLS.keys()): # polletje = c_pol(pol) # polletje.print_status() -- GitLab