diff --git a/UniBoard2_I2C.py b/UniBoard2_I2C.py new file mode 100644 index 0000000000000000000000000000000000000000..4beef56b5e20e6e4c6f956f0f864fa293a02dd6e --- /dev/null +++ b/UniBoard2_I2C.py @@ -0,0 +1,70 @@ + +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 +SWI_POWER_IO = 0x0E #"0001110" # 0x0E +CLK_PWR = 0x0D #"000000D" # 0x00 +QSFP_BOT_PWR = 0x50 #"0000002" # 0x02 +BRICK_PWR = 0x2c #"0000002" # 0x02 + +LP_VOUT_MODE = 0x20 +LP_VOUT = 0x8B # +LP_temp = 0x8D # +LP_IOUT = 0x8C + +QSFP_I2C_ADDR = 0x50 #"1010000" +QSFP_TEMP = 0x16 #"00010110" # (Byte1*256+Byte2)/256 +QSFP_VOLT = 0x1A #"00011010" # (Byte1*256+Byte2)*0.0001 + +ETH_TEMP_I2C_ADDR = 0x4C #"1001100" # 0x29 + +ETH_LOC_TEMP = 0x00 #"00000000" +ETH_TEMP = 0x01 #"00000001" + +MB_I_TEMP_I2C_ADDR = 0x18 +MB_II_TEMP_I2C_ADDR = 0x19 +MB_I_EEPROM = 0x50 +MB_II_EEPROM = 0x51 +MB_TEMP_REG = 0x05 # 5 #(Byte1*256+Byte2)*0.0625 +MB_DATE = 0x143 +MB_DATE_bytes = 2 +MB_TYPE_NR = 0x149 +MB_TYPE_NR_bytes = 20 + +PWR_CLK_I2C_ADDR = "0001101" # 0x0D +PWR_S3V3_I2C_ADDR = "0001110" # 0x0E +PWR_S1V2_I2C_ADDR = "0001111" # 0x0E + + +###################### +# Functions +###################### + +# Calculate floating point value according PMBus lineair +def calc_lin_2bytes(data): + expo = ((data[1] & 0xf8)>>3) + if expo > 2**4: + expo = expo-2**5 + mantisse = (data[1] & 0x7)*0x100 + data[0] + output = mantisse * 2**expo + return output + +# Calculate floating point value according PMBus lineair +def calc_lin_3bytes(data,mode): + expo = (mode[0] & 0x1F) + if expo > 2**4: + expo = expo - 2**5 + output = (data[1]*256 + data[0]) * 2**expo + return output + diff --git a/UniBoard2_Read_LOC_PWR.py b/UniBoard2_Read_LOC_PWR.py new file mode 100644 index 0000000000000000000000000000000000000000..f6942b763149ffc1baa81add3bb88eee03bd4231 --- /dev/null +++ b/UniBoard2_Read_LOC_PWR.py @@ -0,0 +1,42 @@ +#******************************************# +# Application: JFT_1 +# Created: 2015-05-21, 09:14:44 +#******************************************# + +#******************************************# +# Imports +#******************************************# +# Write your Imports here. + +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=1 + + +LOC_PWR = I2C(LOC_POWER_SUPPLIES[0]) +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) + value=[] + ret_ack,vout_mod = LOC_PWR.read_bytes(LP_VOUT_MODE, 1) + ret_ack,ret_value = LOC_PWR.read_bytes(LP_VOUT, 2) + 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)