Beispiel #1
0
//-----------------------------------------------------------------------------
static void target_read(char *name)
{
    uint32_t flash_size = device->flash_size * device->n_planes;
    uint32_t size = flash_size;
    uint32_t addr = device->flash_start;
    uint32_t offs = 0;
    uint8_t *buf;

    buf = buf_alloc(flash_size);

    verbose("Reading...");

    while (size)
    {
        dap_read_block(addr, &buf[offs], device->page_size);

        addr += device->page_size;
        offs += device->page_size;
        size -= device->page_size;

        verbose(".");
    }

    save_file(name, buf, flash_size);

    buf_free(buf);

    verbose(" done.\n");
}
Beispiel #2
0
//-----------------------------------------------------------------------------
static void target_cm0p_read(char *name)
{
  uint32_t size = device->flash_size;
  uint32_t addr = device->flash_start;
  uint32_t offs = 0;
  uint8_t *buf;

  if (dap_read_word(DSU_CTRL_STATUS) & 0x00010000)
    error_exit("devices is locked, unable to read");

  buf = buf_alloc(device->flash_size);

  verbose("Reading...");

  while (size)
  {
    dap_read_block(addr, &buf[offs], device->row_size);

    addr += device->row_size;
    offs += device->row_size;
    size -= device->row_size;

    verbose(".");
  }

  save_file(name, buf, device->flash_size);

  buf_free(buf);

  verbose(" done.\n");
}
Beispiel #3
0
//-----------------------------------------------------------------------------
static void target_cm7_read(char *name)
{
  uint32_t size = device->flash_size;
  uint32_t addr = device->flash_start;
  uint32_t offs = 0;
  uint8_t *buf;

  buf = buf_alloc(device->flash_size);

  verbose("Reading...");

  while (size)
  {
    for (uint32_t sector = 0; sector < device->page_size / SECTOR_SIZE; sector++)
    {
      dap_read_block(addr, &buf[offs], SECTOR_SIZE);
      addr += SECTOR_SIZE;
      offs += SECTOR_SIZE;
      size -= SECTOR_SIZE;
    }

    verbose(".");
  }

  save_file(name, buf, device->flash_size);

  buf_free(buf);

  verbose(" done.\n");
}
Beispiel #4
0
//-----------------------------------------------------------------------------
static void target_cm0p_verify(char *name)
{
  uint32_t addr = device->flash_start;
  uint32_t size, block_size;
  uint32_t offs = 0;
  uint8_t *bufa, *bufb;

  if (dap_read_word(DSU_CTRL_STATUS) & 0x00010000)
    error_exit("devices is locked, unable to verify");

  bufa = buf_alloc(device->flash_size);
  bufb = buf_alloc(device->row_size);

  size = load_file(name, bufa, device->flash_size);

  verbose("Verification...");

  while (size)
  {
    dap_read_block(addr, bufb, device->row_size);

    block_size = (size > device->row_size) ? device->row_size : size;

    for (int i = 0; i < (int)block_size; i++)
    {
      if (bufa[offs + i] != bufb[i])
      {
        verbose("\nat address 0x%x expected 0x%02x, read 0x%02x\n",
            addr + i, bufa[offs + i], bufb[i]);
        free(bufa);
        free(bufb);
        error_exit("verification failed");
      }
    }

    addr += device->row_size;
    offs += device->row_size;
    size -= block_size;

    verbose(".");
  }

  free(bufa);
  free(bufb);

  verbose(" done.\n");
}
Beispiel #5
0
//-----------------------------------------------------------------------------
static void target_verify(char *name)
{
    uint32_t addr = device->flash_start;
    uint32_t flash_size = device->flash_size * device->n_planes;
    uint32_t size, block_size;
    uint32_t offs = 0;
    uint8_t *bufa, *bufb;

    bufa = buf_alloc(flash_size);
    bufb = buf_alloc(device->page_size);

    size = load_file(name, bufa, flash_size);

    verbose("Verification...");

    while (size)
    {
        dap_read_block(addr, bufb, device->page_size);

        block_size = (size > device->page_size) ? device->page_size : size;

        for (int i = 0; i < (int)block_size; i++)
        {
            if (bufa[offs + i] != bufb[i])
            {
                verbose("\nat address 0x%x expected 0x%02x, read 0x%02x\n",
                        addr + i, bufa[offs + i], bufb[i]);
                free(bufa);
                free(bufb);
                error_exit("verification failed");
            }
        }

        addr += device->page_size;
        offs += device->page_size;
        size -= block_size;

        verbose(".");
    }

    free(bufa);
    free(bufb);

    verbose(" done.\n");
}
Beispiel #6
0
//-----------------------------------------------------------------------------
static void target_read(void)
{
  uint32_t addr = target_device.flash_start + target_options.offset;
  uint32_t offs = 0;
  uint8_t *buf = target_options.file_data;
  uint32_t size = target_options.size;

  while (size)
  {
    dap_read_block(addr, &buf[offs], target_device.page_size);

    addr += target_device.page_size;
    offs += target_device.page_size;
    size -= target_device.page_size;

    verbose(".");
  }

  save_file(target_options.name, buf, target_options.size);
}
Beispiel #7
0
//-----------------------------------------------------------------------------
static void target_verify(void)
{
  uint32_t addr = target_device.flash_start + target_options.offset;
  uint32_t block_size;
  uint32_t offs = 0;
  uint8_t *bufb;
  uint8_t *bufa = target_options.file_data;
  uint32_t size = target_options.file_size;

  bufb = buf_alloc(target_device.page_size);

  while (size)
  {
    dap_read_block(addr, bufb, target_device.page_size);

    block_size = (size > target_device.page_size) ? target_device.page_size : size;

    for (int i = 0; i < (int)block_size; i++)
    {
      if (bufa[offs + i] != bufb[i])
      {
        verbose("\nat address 0x%x expected 0x%02x, read 0x%02x\n",
            addr + i, bufa[offs + i], bufb[i]);
        buf_free(bufb);
        error_exit("verification failed");
      }
    }

    addr += target_device.page_size;
    offs += target_device.page_size;
    size -= block_size;

    verbose(".");
  }

  buf_free(bufb);
}