Source code for ska_low_sps_tpm_api.plugins.cpld

import os
from time import sleep

from ska_low_sps_tpm_api.base.definitions import *
from ska_low_sps_tpm_api.base.utils import *
from ska_low_sps_tpm_api.plugins.firmwareblock import FirmwareBlock

__author__ = "Alessio Magro"


[docs] class TpmCpld(FirmwareBlock): """TpmCpld plugin"""
[docs] @compatibleboards(BoardMake.TpmBoard) @friendlyname("tpm_cpld") @maxinstances(1) def __init__(self, board, logger=None, **kwargs): """ TpmCpld initialiser. :param board: Pointer to board instance """ self._cpld_fw_start_add = 0x10000 self._cpld_fw_date_add = 0x30000000 self._max_bitstream_size = 0x10000 * 2 super(TpmCpld, self).__init__(board, logger=logger) self.board_type = kwargs.get("board_type", "XTPM")
#######################################################################################
[docs] def get_version(self): version = hex(self.board[self._cpld_fw_date_add]) return version
[docs] def cpld_flash_read(self, bitfile="cpld_dump.bit"): """Read CPLD FLASH""" return self.board.tpm_progflash.firmwareRead( 0, self._cpld_fw_start_add, self._max_bitstream_size, bitfile )
[docs] def cpld_flash_write(self, bitfile): """Write bitfile to CPLD FLASH""" self.logger.info("Writing {} to CPLD flash".format(bitfile)) return self.board.tpm_progflash.firmwareProgram( 0, bitfile, self._cpld_fw_start_add )
[docs] def cpld_efb_wr(self, dat): raise NotImplementedError("TpmCpld.cpld_efb_wr not implemented")
[docs] def eep_rd8(self, offset): """Read 8-bit value from EEP ROM""" i2c_data = offset & 0xFF return self.board.tpm_i2c.read( i2c_add=0xA0, nof_wr_byte=1, nof_rd_byte=1, wr_data=i2c_data )
[docs] def eep_wr8(self, offset, data): """Write 8-bit value to EEP ROM""" i2c_data = (data & 0xFF) << 8 + (offset & 0xFF) self.board.tpm_i2c.read( i2c_add=0xA0, nof_wr_byte=2, nof_rd_byte=0, wr_data=i2c_data ) return
[docs] def eep_rd32(self, offset): """Read 32-bit value from EEP ROM""" rd = 0 for n in range(4): rd = rd << 8 rd = rd | self.eep_rd8(offset + n) return rd
[docs] def eep_wr32(self, offset, data): """Write 32-bit value to EEP ROM""" for n in range(4): self.eep_wr8(offset + n, (data >> 8 * (3 - n)) & 0xFF) return
##################### Superclass method implementations ###############################
[docs] def initialise(self): """Initialise TpmCpld""" self.logger.info("TpmCpld has been initialised") return True
[docs] def status_check(self): """Perform status check. :return: Status """ self.logger.info("TpmCpld : Checking status") return Status.OK
[docs] def clean_up(self): """Perform cleanup. :return: Success """ self.logger.info("TpmCpld : Cleaning up") return True