コード例 #1
0
 def reset_pac(self, pins):
     """I2C communication for sending reset command to the current PAC"""
     add_write = (pins['pac'][1] << 1) + 0
     common_func.ftdi_i2c_start(self.ftdic, pins)
     common_func.ftdi_i2c_write(self.ftdic, pins, add_write)
     common_func.ftdi_i2c_write(self.ftdic, pins, 0x00)
     common_func.ftdi_i2c_stop(self.ftdic, pins)
コード例 #2
0
ファイル: eeprom.py プロジェクト: xroumegue/pmt
 def write_eeprom_page_i2c(self, ep_num):
     infos = []
     address = 0
     for info in self.file_info:
         if info[0] == 'BOARD_ID':
             info[4] = int(info[4], 16)
             data1 = info[4] << 2 if info[4] <= 40 else (
                 info[4] << 2) & 0xFF
             data1 |= 0x01
             data2 = 1 if info[4] <= 40 else ((
                 (info[4] << 2) & 0xFF00) >> 8) + 1
             infos.append(data1)
             infos.append(data2)
         else:
             data = int(info[4], 16)
             infos.append(data)
     add_write = (common.board_eeprom[ep_num]['at24cxx']['addr'] << 1) + 0
     pins = common.board_eeprom[ep_num]
     common_func.ftdi_i2c_init(self.device, pins)
     common_func.ftdi_i2c_start(self.device, pins)
     common_func.ftdi_i2c_write(self.device, pins, add_write)
     if common.board_eeprom[ep_num]['at24cxx']['type']:
         common_func.ftdi_i2c_write(self.device, pins, address >> 8)
         common_func.ftdi_i2c_write(self.device, pins, address & 0xFF)
     else:
         common_func.ftdi_i2c_write(self.device, pins, address)
     for ind in range(0, len(infos) - 1):
         common_func.ftdi_i2c_write(self.device, pins, infos[ind])
     common_func.ftdi_i2c_stop(self.device, pins)
     common_func.time.sleep(0.3)
     self.write_eeprom_i2c(8, infos[-1], ep_num)
コード例 #3
0
ファイル: eeprom.py プロジェクト: xroumegue/pmt
 def read_eeprom_seq(self, ep_num):
     ret_data = []
     i = 0
     address = 0
     add_write = (common.board_eeprom[ep_num]['at24cxx']['addr'] << 1) + 0
     add_read = (common.board_eeprom[ep_num]['at24cxx']['addr'] << 1) + 1
     pins = common.board_eeprom[ep_num]
     common_func.ftdi_i2c_init(self.device, pins)
     common_func.ftdi_i2c_start(self.device, pins)
     common_func.ftdi_i2c_write(self.device, pins, add_write)
     if common.board_eeprom[ep_num]['at24cxx']['type']:
         common_func.ftdi_i2c_write(self.device, pins, address >> 8)
         common_func.ftdi_i2c_write(self.device, pins, address & 0xFF)
     else:
         common_func.ftdi_i2c_write(self.device, pins, address)
     common_func.ftdi_i2c_start(self.device, pins)
     common_func.ftdi_i2c_write(self.device, pins, add_read)
     while i < 10:
         ret_data.append(common_func.ftdi_i2c_read(self.device, pins, 0))
         i += 1
     common_func.ftdi_i2c_stop(self.device, pins)
     if ret_data[0][0] == 0:
         ret_data.pop(0)
     self.eeprom_info['CONFIG_FLAG'] = hex(
         0x01) if hex(ret_data[0][0] & 0x0F) != hex(0xF) else hex(0x0)
     self.eeprom_info['BOARD_ID'] = hex(((ret_data[0][0] & 0xFC) >> 2)
                                        | ((ret_data[1][0] - 1) << 6))
     self.eeprom_info['BOARD_REV'] = hex(ret_data[2][0])
     self.eeprom_info['SOC_ID'] = hex(ret_data[3][0])
     self.eeprom_info['SOC_REV'] = hex(ret_data[4][0])
     self.eeprom_info['PMIC_ID'] = hex(ret_data[5][0])
     self.eeprom_info['PMIC_REV'] = hex(ret_data[6][0])
     self.eeprom_info['NBR_PWR_RAILS'] = hex(ret_data[7][0])
     self.eeprom_info['BOARD_SN'] = hex(ret_data[8][0])
     self.display_eeprom_info()
コード例 #4
0
 def block_read(self, pins, index, rail_of_pac):
     """I2C communication for PAC block read and return list of voltage / current"""
     data = []
     voltage = []
     current = []
     if self.params['hw_filter']:
         register = PAC1934_ADDR_REG_VBUS_AVG
     else:
         register = PAC1934_ADDR_REG_VBUS
     add_write = (pins['pac'][1] << 1) + 0
     add_read = (pins['pac'][1] << 1) + 1
     common_func.ftdi_i2c_start(self.ftdic, pins)
     common_func.ftdi_i2c_write(self.ftdic, pins, add_write)
     common_func.ftdi_i2c_write(self.ftdic, pins, register)
     common_func.ftdi_i2c_start(self.ftdic, pins)
     common_func.ftdi_i2c_write(self.ftdic, pins, add_read)
     for i in range(15):
         data.append(common_func.ftdi_i2c_read(self.ftdic, pins, 0))
     data.append(common_func.ftdi_i2c_read(self.ftdic, pins, 1))
     for i in range(rail_of_pac):
         channel = self.board_mapping_power[i + index]['pac'][0]
         volt = (((data[(2 * channel) - 2][0] << 8) + data[
             (2 * channel) - 1][0]) * 32) / 65535
         voltage.append(volt)
         curr = self.process_current(
             (((data[8 + (2 * channel) - 2][0] << 8) +
               data[8 + (2 * channel) - 1][0]) * 1))
         current.append(curr)
     return voltage, current
コード例 #5
0
 def get_temperature(self, pins):
     out = []
     add_read = (pins['sensor'][0] << 1) + 1
     common_func.ftdi_i2c_init(self.ftdic, pins)
     common_func.ftdi_i2c_start(self.ftdic, pins)
     common_func.ftdi_i2c_write(self.ftdic, pins, add_read)
     out = common_func.ftdi_i2c_read_buffer(self.ftdic, pins, 2)
     common_func.ftdi_i2c_stop(self.ftdic, pins)
     return out
コード例 #6
0
 def pca9548_set_channel(self, pins):
     """I2C communication for setting the channel of the PCA"""
     logging.debug('pca9548_set_channel')
     add_write = (pins['pca9548'][1]) << 1
     change_channel_cmd = 1 << pins['pca9548'][0]
     common_func.ftdi_i2c_start(self.ftdic, pins)
     common_func.ftdi_i2c_write(self.ftdic, pins, add_write)
     common_func.ftdi_i2c_write(self.ftdic, pins, change_channel_cmd)
     common_func.ftdi_i2c_stop(self.ftdic, pins)
コード例 #7
0
ファイル: eeprom.py プロジェクト: xroumegue/pmt
 def write_eeprom_i2c(self, address, data, ep_num):
     add_write = (common.board_eeprom[ep_num]['at24cxx']['addr'] << 1) + 0
     pins = common.board_eeprom[ep_num]
     common_func.ftdi_i2c_start(self.device, pins)
     common_func.ftdi_i2c_write(self.device, pins, add_write)
     if common.board_eeprom[ep_num]['at24cxx']['type']:
         common_func.ftdi_i2c_write(self.device, pins, address >> 8)
         common_func.ftdi_i2c_write(self.device, pins, address & 0xFF)
     else:
         common_func.ftdi_i2c_write(self.device, pins, address)
     common_func.ftdi_i2c_write(self.device, pins, data)
     common_func.ftdi_i2c_stop(self.device, pins)
コード例 #8
0
 def get_eeprom_board(self, pins, board_id):
     """checks if the eeprom is present on the current board"""
     self.ftdic = common_func.ftdi_open(board_id, 1)
     common_func.ftdic_setbitmode(self.ftdic, 0x0, 0x00)
     common_func.ftdic_setbitmode(self.ftdic, 0x0, 0x02)
     common_func.ftdi_i2c_init(self.ftdic, pins)
     add_write = (pins['at24cxx'][0] << 1) + 0
     common_func.ftdi_i2c_start(self.ftdic, pins)
     if common_func.ftdi_i2c_write(self.ftdic, pins, add_write):
         common_func.ftdi_i2c_stop(self.ftdic, pins)
         self.ftdic.close()
         return 1
     else:
         common_func.ftdi_i2c_stop(self.ftdic, pins)
         self.ftdic.close()
         return 0
コード例 #9
0
 def pac_set_bipolar(self):
     self.params['bipolar'] = not self.params['bipolar']
     FTDI_LOCK.acquire()
     for index, rail in enumerate(self.board_mapping_power):
         if rail['pac'][2] != self.board_mapping_power[index - 1]['pac'][2]:
             self.pca9548_set_channel(rail)
             add_write = (rail['pac'][1] << 1)
             common_func.ftdi_i2c_start(self.ftdic, rail)
             common_func.ftdi_i2c_write(self.ftdic, rail, add_write)
             common_func.ftdi_i2c_write(self.ftdic, rail, 0x1D)
             if self.params['bipolar']:
                 common_func.ftdi_i2c_write(self.ftdic, rail, 0xF0)
             else:
                 common_func.ftdi_i2c_write(self.ftdic, rail, 0x00)
                 common_func.ftdi_i2c_stop(self.ftdic, rail)
     FTDI_LOCK.release()
コード例 #10
0
 def pca6416_get_output(self, pins):
     """returns the current pins configuration of the PCA"""
     logging.debug('pca_get_output')
     add_write = (pins['pca6416'][0] << 1) + 0
     add_read = (pins['pca6416'][0] << 1) + 1
     conf_cmd = (pins['pca6416'][1]) + 0x02
     common_func.ftdi_i2c_start(self.ftdic, pins)
     status = common_func.ftdi_i2c_write(self.ftdic, pins, add_write)
     if status != 0: return status
     status = common_func.ftdi_i2c_write(self.ftdic, pins, conf_cmd)
     if status != 0: return status
     common_func.ftdi_i2c_start(self.ftdic, pins)
     status = common_func.ftdi_i2c_write(self.ftdic, pins, add_read)
     if status != 0: return status
     current_out = common_func.ftdi_i2c_read(self.ftdic, pins, 1)
     common_func.ftdi_i2c_stop(self.ftdic, pins)
     return current_out[0] & pins['pca6416'][2]
コード例 #11
0
ファイル: eeprom.py プロジェクト: xroumegue/pmt
 def read_eeprom_i2c(self, pins):
     out = []
     add_write = (pins['at24cxx']['addr'] << 1) + 0
     add_read = (pins['at24cxx']['addr'] << 1) + 1
     common_func.ftdi_i2c_init(self.device, pins)
     common_func.ftdi_i2c_start(self.device, pins)
     common_func.ftdi_i2c_write(self.device, pins, add_write)
     if pins['at24cxx']['type']:
         common_func.ftdi_i2c_write(self.device, pins, 0 >> 8)
         common_func.ftdi_i2c_write(self.device, pins, 0 & 0xFF)
     else:
         common_func.ftdi_i2c_write(self.device, pins, 0)
     common_func.ftdi_i2c_start(self.device, pins)
     common_func.ftdi_i2c_write(self.device, pins, add_read)
     for i in range(2):
         out.append(common_func.ftdi_i2c_read(self.device, pins, 0))
     out.append(common_func.ftdi_i2c_read(self.device, pins, 1))
     common_func.ftdi_i2c_stop(self.device, pins)
     return out
コード例 #12
0
 def pca6416_set_direction(self, pins):
     """I2C communication for defining PCA pins as I/O"""
     logging.debug('pca6416_set_direction')
     add_write = (pins['pca6416'][0] << 1) + 0
     add_read = (pins['pca6416'][0] << 1) + 1
     conf_cmd = (pins['pca6416'][1])
     conf_cmd = conf_cmd + 0x06 if (self.name != 'val_board_1' and self.name != 'val_board_2') else conf_cmd + 0x0C
     common_func.ftdi_i2c_start(self.ftdic, pins)
     status = common_func.ftdi_i2c_write(self.ftdic, pins, add_write)
     if status != 0: return status
     status = common_func.ftdi_i2c_write(self.ftdic, pins, conf_cmd)
     if status != 0: return status
     common_func.ftdi_i2c_start(self.ftdic, pins)
     status = common_func.ftdi_i2c_write(self.ftdic, pins, add_read)
     if status != 0: return status
     current_confg = common_func.ftdi_i2c_read(self.ftdic, pins, 1)
     logging.debug('Current PCA pins direction: ' + hex(current_confg[0]))
     common_func.ftdi_i2c_stop(self.ftdic, pins)
     intput_bitmask = (~(pins['pca6416'][2])) & current_confg[0]
     logging.debug('Input PCA  bitmask pins direction: ' + hex(intput_bitmask))
     common_func.ftdi_i2c_start(self.ftdic, pins)
     status = common_func.ftdi_i2c_write(self.ftdic, pins, add_write)
     if status != 0: return status
     status = common_func.ftdi_i2c_write(self.ftdic, pins, conf_cmd)
     if status != 0: return status
     status = common_func.ftdi_i2c_write(self.ftdic, pins, intput_bitmask)
     if status != 0: return status
     common_func.ftdi_i2c_stop(self.ftdic, pins)
コード例 #13
0
 def pca_write(self, pins, gpio_value):
     """I2C communication for writing new value to the PCA"""
     output_data = []
     logging.debug('pca_write')
     add_write = (pins['pca6416'][0] << 1) + 0
     add_read = (pins['pca6416'][0] << 1) + 1
     conf_cmd = (pins['pca6416'][1])
     conf_cmd = conf_cmd + 0x02 if (self.name != 'val_board_1' and self.name != 'val_board_2') else conf_cmd + 0x04
     common_func.ftdi_i2c_start(self.ftdic, pins)
     status = common_func.ftdi_i2c_write(self.ftdic, pins, add_write)
     if status != 0: return status
     status = common_func.ftdi_i2c_write(self.ftdic, pins, conf_cmd)
     if status != 0: return status
     common_func.ftdi_i2c_start(self.ftdic, pins)
     status = common_func.ftdi_i2c_write(self.ftdic, pins, add_read)
     if status != 0: return status
     current_config = common_func.ftdi_i2c_read(self.ftdic, pins, 1)
     logging.debug('Current PCA GPIO configuration: ' + hex(current_config[0]))
     common_func.ftdi_i2c_stop(self.ftdic, pins)
     output_data = (current_config[0] & ~pins['pca6416'][2]) | (gpio_value & pins['pca6416'][2])
     logging.debug('Modified PCA GPIO configuration: ' + hex(output_data))
     common_func.ftdi_i2c_start(self.ftdic, pins)
     status = common_func.ftdi_i2c_write(self.ftdic, pins, add_write)
     if status != 0: return status
     status = common_func.ftdi_i2c_write(self.ftdic, pins, conf_cmd)
     if status != 0: return status
     status = common_func.ftdi_i2c_write(self.ftdic, pins, output_data)
     if status != 0: return status
     common_func.ftdi_i2c_stop(self.ftdic, pins)