Ejemplo n.º 1
0
void Flash(void)
{
  
  //Dies ist nur eine Testfunktion die einen Dummycode in den Sektor X schreibt!
  iap_prepare_sector(15,16);
  iap_erase_sector(15,16,100000);
  if(iap_check_blank(15,16)==STATUS_SECTOR_NOT_BLANK) while(1);
  iap_prepare_sector(15,16);
  iap_write_flash(0x0000F000,&I2C0_CNTRL.ReceiveBuffer[2],256,100000);
}
Ejemplo n.º 2
0
void main(void) {

	EVERY_GPIO_SET_FUNCTION(LED_PORT, LED_PIN, PIO, ADMODE_DIGITAL);
	every_gpio_set_dir(LED_PORT, LED_PIN, OUTPUT);

	memset(ram_buffer, 0, FLASH_PAGE_SIZE);
	strcpy(ram_buffer, magic);

	bool programmed = !(memcmp(ram_buffer, template_buffer, FLASH_PAGE_SIZE));
	every_gpio_write(LED_PORT, LED_PIN, programmed);

	if (!programmed) {	//Not programmed: Write ram to flash.
		iap_prepare_sector(PERSISTENCE_SECTOR);
		iap_erase_sector(PERSISTENCE_SECTOR);
		iap_prepare_sector(PERSISTENCE_SECTOR);
		iap_write_page(PERSISTENCE_PAGE, ram_buffer);
	}
}
Ejemplo n.º 3
0
void flush_sector() {
	if (scratch_written_bytes == 0) 
		return;

	// copy data before written sectors..
	memcpy(Scratch, DiskImageF + flash_sector_start_ofs, flash_start_offset_in_sector);
	// .. and after
	size_t after_ofs = flash_start_offset_in_sector + scratch_written_bytes;
	memcpy(Scratch + after_ofs, DiskImageF + flash_sector_start_ofs + after_ofs, 
		FLASH_SECTOR_SIZE - after_ofs);

	// find absolute flash sector number
	uint32_t abs_sector = FLASH_SECTOR_BASE + flash_sector_number;

	// erase it 
	iap_prepare_sector(abs_sector, abs_sector);
	iap_erase_sector(abs_sector, abs_sector);

	for (int i = 0, ofs = 0; i < FLASH_SECTOR_SIZE/4096; i++, ofs += 4096) {
		iap_prepare_sector(abs_sector, abs_sector);
		iap_copy_ram_to_flash(Scratch + ofs, (uint8_t *)DiskImageF + flash_sector_start_ofs + ofs, 4096);
	}
}