@classmethod
def make_request(cls, memory_location, dfi=None):
    """
        Generates a request for RequestUpload

        :param memory_location: The address and the size of the memory block to be read.
        :type memory_location: :ref:`MemoryLocation <MemoryLocation>`

        :param dfi: Optional dataFormatIdentifier defining the compression and encryption scheme of the data. 
                If not specified, the default value of 00 will be used, specifying no encryption and no compression
        :type dfi: :ref:`DataFormatIdentifier <DataFormatIdentifier>`		

        :raises ValueError: If parameters are out of range, missing or wrong type
        """
    from udsoncan import Request, MemoryLocation
    dfi = cls.normalize_data_format_identifier(dfi)
    if not isinstance(memory_location, MemoryLocation):
        raise ValueError(
            'memory_location must be an instance of MemoryLocation')
    request = Request(service=cls)
    request.data = b''
    request.data += dfi.get_byte()
    request.data += memory_location.alfid.get_byte()
    request.data += memory_location.get_address_bytes()
    request.data += memory_location.get_memorysize_bytes()
    return request
