Example #1
0
bool skynet_nv_write(NV_DATA_T* new_data) {
	__disable_irq();
	uint8_t r = 0;

	// prepare
	r += Chip_IAP_PreSectorForReadWrite(SECTOR_NUM, SECTOR_NUM);

	// erase
	r += Chip_IAP_EraseSector(SECTOR_NUM, SECTOR_NUM);

	// prepare again
	r += Chip_IAP_PreSectorForReadWrite(SECTOR_NUM, SECTOR_NUM);

	// write
	r += Chip_IAP_CopyRamToFlash(SECTOR_STARTADDR, (uint32_t *)new_data, sizeof(NV_DATA_T));

	// read again, just for sure
	skynet_nv_read(&read);

	__enable_irq();
	return (r == 0);
}
Example #2
0
void flash_erase(uint32_t f_dst, const uint32_t *src, uint32_t n_words) {
	uint8_t e;
	// check there is something to write
	if (n_words == 0) {
		return;
	}
	__disable_irq();

    // erase the sector(s)
	uint32_t Start = flash_get_sector_info(f_dst, NULL, NULL);
	uint32_t End = flash_get_sector_info(f_dst + 4 * n_words - 1, NULL, NULL);

    e = Chip_IAP_PreSectorForReadWrite(Start, End, BANK);
	F_ASSERT(e != IAP_CMD_SUCCESS, "Prepare for erase FAIL");
    DBG("ERASE Prepare ok %d:%d\n", Start, End);
    e = Chip_IAP_EraseSector(Start, End, BANK);
    F_ASSERT(e != IAP_CMD_SUCCESS, "Erase FAIL");
    DBG("ERASE Operation ok %d:%d\n", Start, End);
    e = Chip_IAP_BlankCheckSector(Start, End, BANK);
    F_ASSERT(e != IAP_CMD_SUCCESS, "Blank check FAIL");
    DBG("ERASE Check ok %d:%d\n", Start, End);
    __enable_irq();
}