diff --git a/I2C_serial_pi.py b/I2C_serial_pi.py index 422b64689920c9860c0b4bdd7e6feed130d637b0..d3f72171b070478ba5ce2fa709d0dcf58c5d7140 100644 --- a/I2C_serial_pi.py +++ b/I2C_serial_pi.py @@ -35,7 +35,9 @@ class I2C: bus = smbus.SMBus(self.bus_nr) try: rd_value = bus.read_i2c_block_data(self.I2C_Address, register, bytes_to_read) - ret_value = hex(rd_value[0])[2:] + ret_value = [] + for cnt in range(bytes_to_read): + ret_value.append(hex(rd_value[cnt])[2:]) ret_ack = 1 except IOError, err: ret_ack = 0 @@ -64,11 +66,12 @@ class I2C: try: bus.write_i2c_block_data(self.I2C_Address, register, [data]) ret_ack = 1 + sleep(0.2) except IOError, err: ret_ack = 0 ret_value = 0 if DEBUG: - print("Reading error") + print("Write error") return ret_ack def write_pointer(self, register): @@ -76,11 +79,12 @@ class I2C: try: ret_value = bus.read_i2c_block_data(self.I2C_Address, register, 1) ret_ack = 1 + sleep(0.2) except IOError, err: ret_ack = 0 ret_value = 0 if DEBUG: - print("Reading error") + print("Write error") return ret_ack if __name__ == "__main__": diff --git a/rd_unb2c.py b/rd_unb2c.py index a1099b783cdd139a2dbb2f8f466da7f2b01f37d4..114cc1d1f4672f98c77ec3d8d14d4d189cf2000a 100644 --- a/rd_unb2c.py +++ b/rd_unb2c.py @@ -32,21 +32,20 @@ def rw_eeprom(value=0xAB): else: pr_stri = "Found device at address 0x{:02x}".format(I2C_eeprom.I2C_Address) print(pr_stri) -# ret_ack = I2C_eeprom.write_bytes(0x00, value) - value = [] + ret_ack = I2C_eeprom.write_bytes(0x00, value) +# sleep(0.25) ret_ack, ret_value = I2C_eeprom.read_bytes(0x00, 1) - print("read = ", ret_value) stri = "Wrote to EEPROM: {0}, Read from EEPROM: {1} ".format(value, ret_value) print(stri) def front_led(value=0xFF): main_switch = I2C(0x71) main_switch.bus = I2CBUSNR - ret_ack = main_switch.write_pointer(0x20) #select LED + ret_ack = main_switch.write_bytes(0x20,0x20) #select LED if ret_ack < 1: print("Main I2C switch not found") else: - front = I2C(ADDRESS=0x41) + front = I2C(0x41) front.bus = I2CBUSNR ret_ack = front.write_bytes(0x03, 0) if ret_ack < 1: @@ -83,13 +82,13 @@ def read_pol(i2c_addr): 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 + 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 - node_switch.write_pointer(0x10) #select DDR4 + ret_ack = node_switch.write_bytes(0x0, 0x10) #select DDR4 if ret_ack < 1: print("Node I2C switch not found") else: @@ -98,13 +97,13 @@ def read_ddr(node_nr = 0, module=0): 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): + 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[0:2],16)) - ret_value.append(int(raw_ret[2:4],16)) + ret_value.append(int(raw_ret[0],16)) + ret_value.append(int(raw_ret[1],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) @@ -112,43 +111,43 @@ def read_ddr(node_nr = 0, module=0): 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 + 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(0x72) node_switch.bus = I2CBUSNR - node_switch.write_pointer(QSFP_PORT[module]) #select QSFP cage 1 + 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: + if (ret_ack < 1) | (raw_ret[0]=='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[0:2],16)) - ret_value.append(int(raw_ret[2:4],16)) + ret_value.append(int(raw_ret[0],16)) + ret_value.append(int(raw_ret[1],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)) + ret_value.append(int(raw_ret[0],16)) + ret_value.append(int(raw_ret[1],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: +if 0: rw_eeprom(0xCD) -else: 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) +else: + 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)