diff --git a/UniBoard2_I2C.py b/UniBoard2_I2C.py index 0dfbc6b32bc8d980041e4381d20589cf644818da..63c025179e29db32deb6ecbcd384ff29021cb850 100644 --- a/UniBoard2_I2C.py +++ b/UniBoard2_I2C.py @@ -25,6 +25,11 @@ CTR_POWER_S_1V2 = 0x0F CTR_POWER_CLK = 0x0D CTR_POWER_QSFP_01 = 0x01 CTR_POWER_QSFP_23 = 0x02 +CTR_POLS = {"CTR_POWER_S_1V0" : 0x0E, + "CTR_POWER_S_1V2" : 0x0F, + "CTR_POWER_CLK" : 0x0D, + "CTR_POWER_QSFP_01" : 0x01, + "CTR_POWER_QSFP_23" : 0x02} LP_VOUT_MODE = 0x20 LP_VOUT = 0x8B # diff --git a/rd_unb2c.py b/rd_unb2c.py index 8f450498cfcb64dd7959b68f2d91ab8572409955..7b539a91f13ee6484f1f79e1435da1c095104b47 100644 --- a/rd_unb2c.py +++ b/rd_unb2c.py @@ -15,6 +15,72 @@ else: from UniBoard2_I2C import * I2CBUSNR=3 +class c_unb2c: + def __init(self): + self.status=False + self.nodes=[] + self.pols=[] + for node_cnt in range(4): + self.nodes.append(c_node(node_cnt)) + for pol in list(CTR_POLS.keys()): + self.pols.append(c_pol(pol)) + self.dev_i2c_eeprom = I2C(EEPROM) + self.dev_i2c_eeprom = I2CBUSNR + + def write_eeprom(self, data=0x01): + ret_ack, ret_value = self.dev_i2c_eeprom.read_bytes(0) + if ret_ack < 1: + print("no device found") + else: + self.dev_i2c_eeprom.write_bytes(0x00, data) + + def read_eeprom(self, data): + ret_ack, ret_value = self.dev_i2c_eeprom.read_bytes(0) + if ret_ack < 1: + print("no device found") + else: + self.dev_i2c_eeprom.write_bytes(0x00, value) + ret_ack, ret_value = I2C_eeprom.read_bytes(0x00, 1) + return ret_value + + def wr_rd_eeprom(self): + self.write_eeprom(0x12) + ret_value = self.read_eeprom() + stri = "Wrote to EEPROM: 0x{0:X}, Read from EEPROM: 0x{1} ".format(value, ret_value) + print(stri) + + + def front_led(collor): + main_switch = I2C(MAIN_I2C_SWITCH) + main_switch.bus = I2CBUSNR + ret_ack = main_switch.write_bytes(0x20,0x20) #select LED + if ret_ack < 1: + print("Main I2C switch not found") + else: + front = I2C(LED_DRIVER) + front.bus = I2CBUSNR + ret_ack = front.write_bytes(0x03, 0) + if ret_ack < 1: + print("Front LED driver not found") + else: + front.write_bytes(0x01, collor) + + def read_all(self): + for node in self.nodes: + node.read_all() + for pol in self.nodes: + pol.read_all() + + def print_status(self): + for color in list(LED_COLORS.keys()): + print(color) + self.front_led(LED_COLORS[color]) + for node in self.nodes: + node.print_status() + for pol in self.nodes: + pol.print_status() + self.wr_rd_eeprom() + class c_node: def __init__(self, number): self.node_number = number @@ -39,6 +105,8 @@ class c_node: qsfp.read_all() def print_status(self): + stri = "Status of Node {0}".format(self.node_number) + print(stri) for pol in self.pols: pol.print_status() for ddr in self.ddr: @@ -84,8 +152,8 @@ class c_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) +# stri = "No QSFP found in port {0}".format(self.port) +# print(stri) self.status=False else: ret_value = [] @@ -98,8 +166,8 @@ class c_qsfp: 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) +# stri = "No QSFP found in port {0}".format(self.port) +# print(stri) self.status=False else: ret_value=[] @@ -176,8 +244,8 @@ class c_pol: sleep(0.1) ret_ack, ret_value = self.pol_dev.read_bytes(0) if ret_ack < 1: - stri = " Device {0} at address 0x{1:X} not found".format(self.name, LOC_POLS[self.name]) - print(stri) +# stri = " Device {0} at address 0x{1:X} not found".format(self.name, LOC_POLS[self.name]) +# print(stri) self.status=False else: self.status=True @@ -414,22 +482,22 @@ if 0: read_pol(node_cnt, LOC_POWER_CORE) # read_pol(-1,0x01) -main_switch = I2C(MAIN_I2C_SWITCH) -main_switch.bus = I2CBUSNR -ret_ack = main_switch.write_bytes(0x0, 0x01) #select Node -if ret_ack < 1: - print("Main I2C switch not found") -else: - node_switch = I2C(NODE_I2C_SWITCH) - node_switch.bus = I2CBUSNR - ret_ack = node_switch.write_bytes(0x0, 0x20) #select DDR4 - if ret_ack < 1: - print("Node I2C switch not found") - -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() +#main_switch = I2C(MAIN_I2C_SWITCH) +#main_switch.bus = I2CBUSNR +#ret_ack = main_switch.write_bytes(0x0, 0x01) #select Node +#if ret_ack < 1: +# print("Main I2C switch not found") +#else: +# node_switch = I2C(NODE_I2C_SWITCH) +# node_switch.bus = I2CBUSNR +# ret_ack = node_switch.write_bytes(0x0, 0x20) #select DDR4 +# if ret_ack < 1: +# print("Node I2C switch not found") + +#for cnt in range(2): +# node = c_node(cnt) +# node.read_all() +# node.print_status() +unb = c_unb2c +unb.read_all() +unb.print_status() \ No newline at end of file