Exemple #1
0
int main() {

	initialize_spifi();
	
	// Make sure that cube_image is placed in SPIFI
	if (!IS_ADDR_IN_SPIFI(cube_image)) {
		notify_completion(false);
	}
	
	// Make sure that cube_image_ref is in IFLASH
	if (IS_ADDR_IN_SPIFI(cube_image_ref)) {
		notify_completion(false);
	}
	
	// Compare content
    if (cube_image_sz != cube_image_ref_sz) {
		notify_completion(false);
    } else {
      int i = 0;
      for (; i < cube_image_sz; i++) {
        if (cube_image[i] != cube_image_ref[i]) {
			notify_completion(false);
        }
      }
    }
	
	notify_completion(true);
}
Exemple #2
0
SPIFI::SpifiError SPIFI::program(uint32_t dest, unsigned len, char* src, Options options, bool verify, char* scratch)
{
  unsigned written = 0;
  SPIFIopers opers;
  opers.dest = (char *)dest;
  opers.length = SPIFI_MIN(len, PROG_SIZE);
  opers.scratch = scratch;
  opers.protect = 0;
  opers.options = options;
  if (verify) {
    opers.options |= S_VERIFY_PROG;
  }
  
  if (IS_ADDR_IN_SPIFI(src))
  {
    // The SPIFI ROM driver cannot write data from SPIFI into
    // SPIFI (i.e. cannot read and write at the same time).
    // The workaround is to copy the source data into a buffer
    // in local memory and use that as source for the write
    // instead.
    while (written < len) {
      memcpy(_addrConflictBuff, src + written, opers.length);
      int rc = _spifi->spifi_program(_romData, _addrConflictBuff, &opers);
      if (rc) 
      {
        // got an error
        return translateError(rc, verify);
      }
      written += opers.length;
      opers.dest += opers.length;
      opers.length = SPIFI_MIN(len - written, PROG_SIZE);
    }
  }
  else 
  {
    while (written < len) {
      int rc = _spifi->spifi_program(_romData, src + written, &opers);
      if (rc) 
      {
        // got an error
        return translateError(rc, verify);
      }
      written += opers.length;
      opers.dest += opers.length;
      opers.length = SPIFI_MIN(len - written, PROG_SIZE);
    }
  }
  
  return Ok;
}