Skip to content
Snippets Groups Projects

Modified the scripts to run on Raspberry Pi.

1 file
+ 38
18
Compare changes
  • Side-by-side
  • Inline
+ 38
18
@@ -16,9 +16,10 @@ from UniBoard2_I2C import *
@@ -16,9 +16,10 @@ from UniBoard2_I2C import *
I2CBUSNR=3
I2CBUSNR=3
class c_node:
class c_node:
def __int__(self, number):
def __init__(self, number):
self.node_number = number
self.node_number = number
self.pols=[]
self.pols=[]
 
self.set_i2c_switches()
for pol in list(LOC_POLS.keys()):
for pol in list(LOC_POLS.keys()):
self.pols.append(c_pol(pol))
self.pols.append(c_pol(pol))
self.ddr=[]
self.ddr=[]
@@ -29,6 +30,7 @@ class c_node:
@@ -29,6 +30,7 @@ class c_node:
self.qsfp.append(c_qsfp(qsfp_cnt))
self.qsfp.append(c_qsfp(qsfp_cnt))
def read_all(self):
def read_all(self):
 
self.set_i2c_switches()
for pol in self.pols:
for pol in self.pols:
pol.read_all()
pol.read_all()
for ddr in self.ddr:
for ddr in self.ddr:
@@ -63,35 +65,48 @@ class c_qsfp:
@@ -63,35 +65,48 @@ class c_qsfp:
self.temp = 0
self.temp = 0
self.volt = 0
self.volt = 0
self.status = False
self.status = False
 
self.select_qsfp()
 
self.qsfp_cage = I2C(QSFP_I2C_ADDR)
 
self.qsfp_cage.bus = I2CBUSNR
def select_qsfp(self):
def select_qsfp(self):
node_switch = I2C(NODE_I2C_SWITCH)
node_switch = I2C(NODE_I2C_SWITCH)
node_switch.bus = I2CBUSNR
node_switch.bus = I2CBUSNR
ret_ack = node_switch.write_bytes(0x0, QSFP_PORT[self.port])
ret_ack = node_switch.write_bytes(0x0, QSFP_PORT[self.port])
if ret_ack < 1:
if ret_ack < 1:
print("Node I2C switch not found")
# print("Node I2C switch not found")
self.status = True
self.status = False
else:
else:
self.status = False
self.status = True
def read_temp(selfs):
def read_temp(self):
ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_TEMP, 2)
self.select_qsfp()
if ret_ack < 1 :
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
self.status=False
else:
else:
ret_value = []
ret_value = []
ret_value.append(int(raw_ret[:2], 16))
ret_value.append(int(raw_ret[:2], 16))
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.temp = (ret_value[0] * 256 + ret_value[1]) / 256
 
self.status=True
def read_volt(selfs):
def read_volt(self):
ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_VOLT, 2)
self.select_qsfp()
if ret_ack < 1 :
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
self.status=False
else:
else:
 
ret_value=[]
ret_value.append(int(raw_ret[:2], 16))
ret_value.append(int(raw_ret[:2], 16))
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.volt = (ret_value[0] * 256 + ret_value[1]) * 0.0001
 
self.status=True
def read_all(self):
def read_all(self):
self.read_temp()
self.read_temp()
@@ -99,13 +114,14 @@ class c_qsfp:
@@ -99,13 +114,14 @@ class c_qsfp:
def print_status(self):
def print_status(self):
if self.status:
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)
print(stri)
class c_ddr:
class c_ddr:
def __init__(self, bank):
def __init__(self, bank):
self.bank = bank
self.bank = bank
 
self.status=False
if self.bank == 0:
if self.bank == 0:
self.ddr_dev = I2C(MB_I_TEMP_I2C_ADDR)
self.ddr_dev = I2C(MB_I_TEMP_I2C_ADDR)
else:
else:
@@ -125,12 +141,15 @@ class c_ddr:
@@ -125,12 +141,15 @@ class c_ddr:
def read_temp(self):
def read_temp(self):
ret_ack, raw_ret = self.ddr_dev.read_bytes(MB_TEMP_REG, 2)
ret_ack, raw_ret = self.ddr_dev.read_bytes(MB_TEMP_REG, 2)
if ret_ack < 1:
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:
else:
ret_value = []
ret_value = []
ret_value.append(int(raw_ret[:2], 16))
ret_value.append(int(raw_ret[:2], 16))
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):
def read_all(self):
self.set_i2c_switch()
self.set_i2c_switch()
@@ -138,7 +157,7 @@ class c_ddr:
@@ -138,7 +157,7 @@ class c_ddr:
def print_status(self):
def print_status(self):
if self.status:
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)
print(stri)
@@ -390,7 +409,7 @@ if 0:
@@ -390,7 +409,7 @@ if 0:
for node_cnt in range(4):
for node_cnt in range(4):
for qsfp_cnt in range(6):
for qsfp_cnt in range(6):
read_qsfp(node_nr = node_cnt, module=qsfp_cnt)
read_qsfp(node_nr = node_cnt, module=qsfp_cnt)
else:
#else:
for node_cnt in range(4):
for node_cnt in range(4):
read_pol(node_cnt, LOC_POWER_CORE)
read_pol(node_cnt, LOC_POWER_CORE)
# read_pol(-1,0x01)
# read_pol(-1,0x01)
@@ -407,9 +426,10 @@ else:
@@ -407,9 +426,10 @@ else:
if ret_ack < 1:
if ret_ack < 1:
print("Node I2C switch not found")
print("Node I2C switch not found")
node = c_node(0)
for cnt in range(2):
node.read_all()
node = c_node(cnt)
node.print_status()
node.read_all()
 
node.print_status()
#for pol in list(LOC_POLS.keys()):
#for pol in list(LOC_POLS.keys()):
# polletje = c_pol(pol)
# polletje = c_pol(pol)
# polletje.print_status()
# polletje.print_status()
Loading