code: def write_memory(addr, buf, progress=None, progress_addr=0, progress_size=0):
      
  
      xfer_count = 0
      xfer_bytes = 0
      xfer_total = len(buf)
      xfer_base = addr
  
      while xfer_bytes < xfer_total:
          if __verbose and xfer_count % 512 == 0:
              print ("Addr 0x%x %dKBs/%dKBs..." % (xfer_base + xfer_bytes,
                                                   xfer_bytes // 1024,
                                                   xfer_total // 1024))
          if progress and xfer_count % 2 == 0:
              progress(progress_addr, xfer_base + xfer_bytes - progress_addr,
                       progress_size)
  
          # Set mem write address
          set_address(xfer_base+xfer_bytes)
  
          # Send DNLOAD with fw data
          chunk = min(__cfg_descr.wTransferSize, xfer_total-xfer_bytes)
          __dev.ctrl_transfer(0x21, __DFU_DNLOAD, 2, __DFU_INTERFACE,
                              buf[xfer_bytes:xfer_bytes + chunk], __TIMEOUT)
  
          # Execute last command
          if get_status() != __DFU_STATE_DFU_DOWNLOAD_BUSY:
              raise Exception("DFU: write memory failed")
  
          # Check command state
          if get_status() != __DFU_STATE_DFU_DOWNLOAD_IDLE:
              raise Exception("DFU: write memory failed")
  
          xfer_count += 1
          xfer_bytes += chunk
docs: Writes a buffer into memory. This routine assumes that memory has
      already been erased.