@classmethod
def make_request(cls, memory_location, data):
    """
        Generates a request for ReadMemoryByAddress

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

        :param data: The data to write into memory.
        :type data: bytes

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