Select Git revision
-
Jorrit Schaap authored
Task #8887: use mehtod adaptNameToEnvironment from lofar.messaging to adapt the queue/busnames to production or test environment. defaults to test
Jorrit Schaap authoredTask #8887: use mehtod adaptNameToEnvironment from lofar.messaging to adapt the queue/busnames to production or test environment. defaults to test
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
rd_unb2c.py 6.48 KiB
#******************************************#
# Read hardware info from UNB2c
# Created: 2021-05-10
#******************************************#
import sys
import time
sys.path.insert(0,'.')
import os
if os.name =="posix":
from I2C_serial_pi import *
else:
from I2C_serial import *
from UniBoard2_I2C import *
I2CBUSNR=3
def rw_eeprom(value=0xAB):
I2C_eeprom = I2C(EEPROM)
I2C_eeprom.bus = I2CBUSNR
ret_ack, ret_value = I2C_eeprom.read_bytes(0)
if ret_ack < 1:
print("no device found")
else:
pr_stri = "Found device at address 0x{:02x}".format(I2C_eeprom.I2C_Address)
print(pr_stri)
I2C_eeprom.write_bytes(0x00, value)
ret_ack, ret_value = I2C_eeprom.read_bytes(0x00, 1)
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)
sleep(1.5)
def read_pol(node_nr, i2c_addr):
if node_nr >= 0:
main_switch = I2C(MAIN_I2C_SWITCH)
main_switch.bus = I2CBUSNR
ret_ack = main_switch.write_bytes(0x0, 0x01<<node_nr) #select Node
if ret_ack < 1:
print("Main I2C switch not found")
return False
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")
return False
else:
print("Central POL")
main_switch = I2C(MAIN_I2C_SWITCH)
main_switch.bus = I2CBUSNR
ret_ack = main_switch.write_bytes(0x0, 0x10) #select Pol
if ret_ack < 1:
print("Main I2C switch not found")
return False
LOC_PWR = I2C(i2c_addr)
LOC_PWR.bus = I2CBUSNR
ret_ack, ret_value = LOC_PWR.read_bytes(0)
if ret_ack < 1:
print("no device found")
else:
ret_ack, vout_mod = LOC_PWR.read_bytes(LP_VOUT_MODE, 1)
ret_ack, raw_value = LOC_PWR.read_bytes(LP_VOUT, 2)
vout_mod = int(vout_mod,16)
ret_value = []
ret_value.append(int(raw_value[:2], 16))
ret_value.append(int(raw_value[2:], 16))
vout = calc_lin_3bytes(ret_value, [vout_mod])
stri = "Output voltage :{0: <5.2f} V ".format(vout)
ret_ack, raw_value = LOC_PWR.read_bytes(LP_IOUT, 2)
ret_value=[]
ret_value.append(int(raw_value[:2],16))
ret_value.append(int(raw_value[2:],16))
iout = calc_lin_2bytes(ret_value)
stri += "Output Current :{0: <5.2f} A ".format(iout)
ret_ack,raw_value = LOC_PWR.read_bytes(LP_temp, 2)
ret_value=[]
ret_value.append(int(raw_value[:2],16))
ret_value.append(int(raw_value[2:],16))
temp = calc_lin_2bytes(ret_value)
stri += "temperature :{0: <5.2f} Deg C".format(temp)
print(stri)
return True
def read_ddr(node_nr = 0, module=0):
main_switch = I2C(MAIN_I2C_SWITCH)
main_switch.bus = I2CBUSNR
ret_ack = main_switch.write_bytes(0x0, 0x01<<node_nr) #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, 0x10) #select DDR4
if ret_ack < 1:
print("Node I2C switch not found")
else:
if module==0:
ddr_module = I2C(MB_I_TEMP_I2C_ADDR)
else:
ddr_module = I2C(MB_II_TEMP_I2C_ADDR)
ddr_module.bus = I2CBUSNR
ret_ack, raw_ret = ddr_module.read_bytes(MB_TEMP_REG, 2)
if ret_ack < 1:
stri = "No DDR moduel in slot {0} node {1}".format(module, node_nr)
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
stri = "Temperature DDR4 in slot {0} node {1} is {2:3.2f} C".format(module, node_nr, temp)
print(stri)
def read_qsfp(node_nr = 0, module=0):
main_switch = I2C(MAIN_I2C_SWITCH)
main_switch.bus = I2CBUSNR
ret_ack = main_switch.write_bytes(0x00, 0x01<<node_nr) #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, QSFP_PORT[module]) #select QSFP cage 1
if ret_ack < 1:
print("Node I2C switch not found")
else:
QSFP_cage = I2C(QSFP_I2C_ADDR)
QSFP_cage.bus = I2CBUSNR
ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_TEMP, 2)
if (ret_ack < 1) | (raw_ret[:2]=='ff'):
stri = "No QSFP module in slot {0} node {1}".format(module, node_nr)
print(stri)
else:
ret_value=[]
ret_value.append(int(raw_ret[:2],16))
ret_value.append(int(raw_ret[2:],16))
temp_in_mod = (ret_value[0] * 256 + ret_value[1]) / 256
stri = "Temperature QSFP in slot {0} node {1} is {2:3.2f} gr. C".format(module, node_nr, temp_in_mod)
print(stri)
ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_VOLT, 2)
ret_value.append(int(raw_ret[:2],16))
ret_value.append(int(raw_ret[2:],16))
Power_in_mod = (ret_value[0] * 256 + ret_value[1]) * 0.0001
stri = "Voltage QSFP in slot {0} node {1} is {2:3.2f} V".format(module, node_nr, Power_in_mod)
print(stri)
if 1:
rw_eeprom(0xCD)
for color in list(LED_COLORS.keys()):
print(color)
front_led(LED_COLORS[color])
for node_cnt in range(4):
for module_cnt in range(2):
read_ddr(node_nr=node_cnt,module=module_cnt)
for node_cnt in range(4):
for qsfp_cnt in range(6):
read_qsfp(node_nr = node_cnt, module=qsfp_cnt)
#else:
for node_cnt in range(4):
read_pol(node_cnt, LOC_POWER_CORE)
read_pol(-1,0x01)