diff --git a/rd_unb2c.py b/rd_unb2c.py index 9dddf8b4634ac05a1f1e3c5985112c354afc91d3..b6441b9f53f328fb71dfbc85fcd7b421c130e25a 100644 --- a/rd_unb2c.py +++ b/rd_unb2c.py @@ -4,10 +4,14 @@ Read Hardware info form UNB2C import sys import time -import os sys.path.insert(0,'.') +import os +if os.name =="posix": + from I2C_serial_pi import * +else: + from I2C_serial import * + from UniBoard2_I2C import * -from I2C_serial_pi import * I2CBUSNR=3 QSFP_PORT=[] @@ -19,107 +23,127 @@ QSFP_PORT.append(0x40) QSFP_PORT.append(0x80) def rw_eeprom(value=0xAB): - I2C_eeprom = I2C(0x53, BUSNR=3) - I2C_eeprom.write_bytes(0x00, value) - I2C_eeprom.read_bytes(0x00,1) -# I2C_eeprom.write_pointer(0x00) -# ret_ack, ret_value = I2C_eeprom.read_last_reg(1) - if 0: #ret_ack: - stri = "EEPROM readback : {0} ".format(ret_value) - print(stri) + I2C_eeprom = I2C(0x53) + I2C_eeprom.bus = I2CBUSNR + ret_ack, ret_value = I2C_eeprom.read_bytes(0) + if ret_ack < 1: + print("no device found") else: - print("ACK nok") + I2C_eeprom.write_bytes(0x00, value) + ret_ack, ret_value = I2C_eeprom.read_bytes(0x00, 1) + stri = "Wrote to EEPROM: {0}, Read from EEPROM: {1} ".format(value, ret_value) + print(stri) def front_led(value=0xFF, ADDRESS=0x71): - main_switch = I2C(ADDRESS, BUSNR=I2CBUSNR) -# main_switch.bus = I2CBUSNR + main_switch = I2C(ADDRESS) + main_switch.bus = I2CBUSNR main_switch.write_pointer(0x20) #select LED - front = I2C(ADDRESS=0x41, BUSNR=I2CBUSNR) -# 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) - - + if ret_ack < 1: + print("Main I2C switch not found") + else: + front = I2C(ADDRESS=0x41) + front.bus = I2CBUSNR + front.write_bytes(0x03, 0) + if ret_ack < 1: + print("Front LED driver not found") + else: + 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) + ret_ack, ret_value = LOC_PWR.read_bytes(0) + if ret_ack < 1: + print("no device found") + else: + pr_stri = "Found device at address 0x{:02x}".format(LOC_PWR.I2C_Address) + print(pr_stri) + ret_ack,ret_value = LOC_PWR.read_bytes(LP_VOUT, 2) + vout = calc_lin_3bytes(ret_value, vout_mod) + print("read = ", vout_mod) + 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 = I2C(0x71) + main_switch.bus = I2CBUSNR 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) + if ret_ack < 1: + print("Main I2C switch not found") 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) + node_switch = I2C(0x72) + node_switch.bus = I2CBUSNR + node_switch.write_pointer(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) | (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 = I2C(0x71) + main_switch.bus = I2CBUSNR 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) + if ret_ack < 1: + print("Main I2C switch not found") 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) - + node_switch = I2C(0x72) + node_switch.bus = I2CBUSNR + node_switch.write_pointer(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: + 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) else: -# 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 0: - 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) + if 0: + 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)