code: def read_flash(self, addr=0xFF, page=0x00):
          
          buff = bytearray()
  
          page_size = self.targets[addr].page_size
  
          for i in range(0, int(math.ceil(page_size / 25.0))):
              pk = None
              retry_counter = 5
              while ((not pk or pk.header != 0xFF or
                      struct.unpack('<BB', pk.data[0:2]) != (addr, 0x1C)) and
                      retry_counter >= 0):
                  pk = CRTPPacket()
                  pk.set_header(0xFF, 0xFF)
                  pk.data = struct.pack('<BBHH', addr, 0x1C, page, (i * 25))
                  self.link.send_packet(pk)
  
                  pk = self.link.receive_packet(1)
                  retry_counter -= 1
              if (retry_counter < 0):
                  return None
              else:
                  buff += pk.data[6:]
  
          # For some reason we get one byte extra here...
          return buff[0:page_size]
docs: Read back a flash page from the Crazyflie and return it