diff --git a/I2C_serial_pi.py b/I2C_serial_pi.py index 8ddf3a33fd0f431af0ca95d2cb1ff62db043c808..559d1109b5218e9e08305db6044d7c12341f8a27 100644 --- a/I2C_serial_pi.py +++ b/I2C_serial_pi.py @@ -22,7 +22,7 @@ import smbus import sys from time import * -DEBUG = True +DEBUG = False #True class I2C: @@ -39,6 +39,7 @@ class I2C: for cnt in range(bytes_to_read): ret_value += (hex(rd_value[cnt])[2:]) ret_ack = 1 + # sleep(0.2) except IOError, err: ret_ack = 0 ret_value = 0 @@ -54,6 +55,7 @@ class I2C: try: ret_value.append(bus.read_byte(self.I2C_Address)) ret_ack = 1 + # sleep(0.2) except IOError, err: ret_ack = 0 ret_value = 0 @@ -66,7 +68,7 @@ class I2C: try: bus.write_i2c_block_data(self.I2C_Address, register, [data]) ret_ack = 1 - sleep(0.2) + sleep(0.3) except IOError, err: ret_ack = 0 ret_value = 0 @@ -77,9 +79,9 @@ class I2C: def write_pointer(self, register): bus = smbus.SMBus(self.bus_nr) try: - ret_value = bus.read_i2c_block_data(self.I2C_Address, register, 1) + ret_value = bus.read_i2c_block_data(self.I2C_Address, register, register) ret_ack = 1 - sleep(0.2) + sleep(0.3) except IOError, err: ret_ack = 0 ret_value = 0 diff --git a/rd_unb2c.py b/rd_unb2c.py index 3509b380458aec883755b1a33320f4d21c2d32be..79923713dc637edda0c19495b9690ec3b9419cd5 100644 --- a/rd_unb2c.py +++ b/rd_unb2c.py @@ -34,7 +34,7 @@ def rw_eeprom(value=0xAB): print(pr_stri) 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) + stri = "Wrote to EEPROM: 0x{0:X}, Read from EEPROM: 0x{1} ".format(value, ret_value) print(stri) def front_led(value=0xFF): @@ -60,50 +60,59 @@ def front_led(value=0xFF): front.write_bytes(0x01, 0xf) def read_pol(node_nr, i2c_addr): - main_switch = I2C(0x71) - 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(0x72) - node_switch.bus = I2CBUSNR - ret_ack = node_switch.write_bytes(0x0, 0x20) #select DDR4 + if node_nr >= 0: + main_switch = I2C(0x71) + main_switch.bus = I2CBUSNR + ret_ack = main_switch.write_bytes(0x0, 0x01<<node_nr) #select Node if ret_ack < 1: - print("Node I2C switch not found") + print("Main I2C switch not found") + return False else: - LOC_PWR = I2C(i2c_addr) - LOC_PWR.bus = I2CBUSNR - ret_ack, ret_value = LOC_PWR.read_bytes(0) + node_switch = I2C(0x72) + node_switch.bus = I2CBUSNR + ret_ack = node_switch.write_bytes(0x0, 0x20) #select DDR4 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, vout_mod = LOC_PWR.read_bytes(LP_VOUT_MODE, 1) - ret_ack, ret_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 Current :{0:2.2f} A ".format(iout) -# print(stri) - 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:2.2f} A ".format(iout) -# print(stri) - 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:2.2f} Deg C".format(temp) - print(stri) - + print("Node I2C switch not found") + return False + else: + print("Central POL") + main_switch = I2C(0x71) + 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: + # pr_stri = "Found device at address 0x{:02x}".format(LOC_PWR.I2C_Address) + # print(pr_stri) + 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(0x71) main_switch.bus = I2CBUSNR @@ -166,7 +175,7 @@ def read_qsfp(node_nr = 0, module=0): stri = "Voltage QSFP in slot {0} node {1} is {2:3.2f} V".format(module, node_nr, Power_in_mod) print(stri) -if 1: +if 0: rw_eeprom(0xCD) front_led() for node_cnt in range(4): @@ -175,5 +184,7 @@ if 1: 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)