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

Added scripts for testing UniBoard2 (rd_unb2c and updated UniBoard2_I2C.py)

parent a7cef8ca
No related branches found
No related tags found
1 merge request!2Modified the scripts to run on Raspberry Pi.
EEPROM_I2C_ADDR = 0x50 #"1010000"
LOC_POWER_CORE = 0x01 #"0000001" # 0x01
LOC_POWER_ERAM = 0x0D #"0001101" # 0x0D
LOC_POWER_TR_R = 0x0E #"0001110" # 0x0E
LOC_POWER_TR_T = 0x0F #"0001111" # 0x0F
LOC_POWER_BAT = 0x10 #"0010000" # 0x10
LOC_POWER_IO = 0x11 #"0010001" # 0x11
LOC_POWER_SUPPLIES = [LOC_POWER_CORE,LOC_POWER_ERAM,LOC_POWER_TR_R,LOC_POWER_TR_T,LOC_POWER_BAT,LOC_POWER_IO]
SWI_POWER_CORE = 0x0F #"0001111" # 0x0F
......
'''
Read Hardware info form UNB2C
'''
import sys
import time
sys.path.insert(0,'.')
from UniBoard2_I2C import *
if os.name =="posix":
from I2C_serial_pi import *
else:
from I2C_serial import *
I2CBUSNR=1
QSFP_PORT=[]
QSFP_PORT.append(0x08)
QSFP_PORT.append(0x04)
QSFP_PORT.append(0x02)
QSFP_PORT.append(0x01)
QSFP_PORT.append(0x40)
QSFP_PORT.append(0x80)
def rw_eeprom(value=0xAB):
I2C_eeprom = I2C(0x53)
I2C_eeprom.bus = I2CBUSNR
I2C_eeprom.write_bytes(0x00, value)
I2C_eeprom.write_pointer(0x00)
ret_ack, ret_value = I2C_eeprom.read_last_reg(1)
if ret_ack:
stri = "EEPROM readback : {0} ".format(ret_value)
print(stri)
else:
print("ACK nok")
def front_led(value=0xFF):
main_switch = I2C(0x71)
main_switch.bus = I2CBUSNR
main_switch.write_pointer(0x20) #select LED
front = I2C(0x41)
front.bus = I2CBUSNR
front.write_bytes(0x03, 0)
front.write_bytes(0x01, value)
sleep(0.5)
for cnt in range(6):
front.write_bytes(0x01, (1 << cnt%3)^0xff)
sleep(0.2)
front.write_bytes(0x01, 0)
sleep(0.2)
front.write_bytes(0x01, 0xf)
def read_pol(i2c_addr):
LOC_PWR = I2C(i2c_addr)
LOC_PWR.bus = I2CBUSNR
value=[]
# ret_ack,vout_mod = LOC_PWR.read_bytes(LP_VOUT_MODE, 1)
# ret_ack,ret_value = LOC_PWR.read_bytes(LP_VOUT, 2)
# stri = "POL readback {0} : ".format(ret_value)
# print(stri)
# vout = calc_lin_3bytes(ret_value, vout_mod)
# print("vout = ", vout)
# ret_ack,ret_value = LOC_PWR.read_bytes(LP_IOUT, 2)
# iout = calc_lin_2bytes(ret_value)
# print("Output Current :",iout)
ret_ack,ret_value = LOC_PWR.read_bytes(LP_temp, 2)
temp = calc_lin_2bytes(ret_value)
print("temperature :",temp)
def read_ddr(node_nr = 0, module=0):
main_switch.write_pointer(0x01<<node_nr) #select Node
node_switch.write_pointer(0x10) #select DDR4
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 len(raw_ret) < 1:
stri = "No DDR moduel in slot {0} node {1}".format(module, node_nr)
else:
ret_value=[]
ret_value.append(int(raw_ret[0:2],16))
ret_value.append(int(raw_ret[2:4],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.write_pointer(0x01<<node_nr) #select Node
node_switch.write_pointer(QSFP_PORT[module]) #select QSFP cage 1
QSFP_cage = I2C(QSFP_I2C_ADDR)
QSFP_cage.bus = I2CBUSNR
ret_ack, raw_ret = QSFP_cage.read_bytes(QSFP_TEMP, 2)
if len(raw_ret) < 1:
stri = "No QSFP module in slot {0} node {1}".format(module, node_nr)
else:
ret_value=[]
ret_value.append(int(raw_ret[0:2],16))
ret_value.append(int(raw_ret[2:4],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[0:2],16))
ret_value.append(int(raw_ret[2:4],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 0:
rw_eeprom(0xCD)
main_switch = I2C(0x71)
main_switch.bus = I2CBUSNR
node_switch = I2C(0x72)
node_switch.bus = I2CBUSNR
main_switch.write_pointer(0x20) #select LED
front_led()
if 1:
for node_cnt in range(4):
for module_cnt in range(2):
read_ddr(node_nr=node_cnt,module=module_cnt)
for qsfp_cnt in range(6):
read_qsfp(node_nr = node_cnt, module=qsfp_cnt)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment