Example #1
0
// write default blackfin
void flash_write_ldr(void) {
#if 1
#else
  //  flashc_memset32((void*)&(flash_nvram_data.ldrSize), bfinLdrSize, 4, true);
  //  flashc_memcpy((void*)&(flash_nvram_data.ldrData), (const void*)bfinLdrData, bfinLdrSize, true);
  // seeing some missing pages, so try writing one page at a time
  u32 i;
  u32 nPages = bfinLdrSize / 0x200;
  u32 rem;
  const u8* pSrc;
  u8* pDst;
  // write size
  flashc_memset32((void*)&(flash_nvram_data.ldrSize), bfinLdrSize, 4, true);
  // write data 
  pSrc = (const void*)bfinLdrData;
  pDst = (void*)&(flash_nvram_data.ldrData);
  for(i=0; i<nPages; i++) {
    flashc_memcpy((void*)pDst, (const void*)pSrc, 0x200, true);
    pDst += 0x200;
    pSrc += 0x200;
    delay_ms(1);
  }
  // remaining bytes
  rem = bfinLdrSize - (nPages * 0x200);
  flashc_memcpy((void*)pDst, (const void*)pSrc, rem, true);
#endif
}
Example #2
0
void flash_write(void) {
	// print_dbg("\r write preset ");
	// print_dbg_ulong(preset_select);
	flashc_memcpy((void *)&flashy.m[preset_select], &m, sizeof(m), true);
	flashc_memcpy((void *)&flashy.glyph[preset_select], &glyph, sizeof(glyph), true);
	flashc_memset8((void*)&(flashy.preset_select), preset_select, 1, true);
}
u8 HV_InitAllSlotData (void)
{
    // u8 RandomCharArray_au8[16];
u32 i;

    // Create salt
    for (i = 0; i < 2; i++)
    {
        // Get a random number from smart card
        if (FALSE == GetRandomNumber_u32 (16, &DecryptedHiddenVolumeSlotsData_au8[i * 16]))
        {
            CI_LocalPrintf ("GetRandomNumber fails\n\r");
            return (FALSE);
        }
    }


    // Fill hidden volume flash page with random chars
    for (i = 0; i < 16; i++)
    {
        // Get a random number from smart card
        if (FALSE == GetRandomNumber_u32 (16, &DecryptedHiddenVolumeSlotsData_au8[HV_SALT_SIZE + i * 16]))
        {
            CI_LocalPrintf ("GetRandomNumber fails\n\r");
            return (FALSE);
        }
    }

    // Write magic number to flash
    DecryptedHiddenVolumeMagicNumber_u32 = HV_MAGIC_NUMBER_INIT;
    flashc_memcpy ((u8 *) HV_MAGIC_NUMBER_ADDRESS, &DecryptedHiddenVolumeMagicNumber_u32, HV_MAGIC_NUMBER_SIZE, TRUE);

    // Write ram data to flash
    flashc_memcpy ((u8 *) HV_SALT_START_ADDRESS, DecryptedHiddenVolumeSlotsData_au8, HV_SALT_SIZE + HV_SLOT_SIZE * HV_SLOT_COUNT, TRUE);

    CI_LocalPrintf ("Init hidden volume slot data\r\n");

    CI_LocalPrintf ("Salt\r\n");
    CI_LocalPrintf ("Encrypted data :\r\n");
    HexPrint (HV_SALT_SIZE, DecryptedHiddenVolumeSlotsData_au8);
    CI_LocalPrintf ("\r\n\r\n");

    for (i = 0; i < HV_SLOT_COUNT; i++)
    {
        CI_LocalPrintf ("Slot %d\r\n", i);
        CI_LocalPrintf ("Encrypted data :\r\n");
        HexPrint (HV_SLOT_SIZE, DecryptedHiddenVolumeSlotsData_au8 + HV_SALT_SIZE + i * HV_SLOT_SIZE);
        CI_LocalPrintf ("\r\n\r\n");
    }

    return (TRUE);
}
u8 WriteScId (u32 *ScId_u32)
{
  flashc_memcpy(AVR32_FLASHC_USER_PAGE + 142,ScId_u32,4,TRUE);

  StickConfiguration_st.ActiveSmartCardID_u32 = *ScId_u32;
  return (TRUE);
}
void DFU_FirmwareResetUserpage (void)
{
  u8 DFU_String_au8[4];

/*
  flashc_erase_all_gp_fuses (TRUE);

  flashc_write_gp_fuse_bit
  FC07FFFF

  flashc_set_all_gp_fuses ();
*/

  flashc_write_gp_fuse_bit (30,0);              // Set SP_IO_COND_EN  = 0 for DUF 1.0.3
  flashc_write_gp_fuse_bit (31,0);              // Set to 0 to start application for DUF 1.0.3



  flashc_erase_user_page (TRUE);

  DFU_String_au8[0] = TOOL_DFU_ISP_CONFIG_WORD_DEFAULT_0_0;
  DFU_String_au8[1] = TOOL_DFU_ISP_CONFIG_WORD_DEFAULT_0_1;
  DFU_String_au8[2] = TOOL_DFU_ISP_CONFIG_WORD_DEFAULT_0_2;
  DFU_String_au8[3] = TOOL_DFU_ISP_CONFIG_WORD_DEFAULT_0_3;
/*
  DFU_String_au8[0] = TOOL_DFU_ISP_CONFIG_WORD_START_APPL_0_0;
  DFU_String_au8[1] = TOOL_DFU_ISP_CONFIG_WORD_START_APPL_0_1;
  DFU_String_au8[2] = TOOL_DFU_ISP_CONFIG_WORD_START_APPL_0_2;
  DFU_String_au8[3] = TOOL_DFU_ISP_CONFIG_WORD_START_APPL_0_3;
*/

  flashc_memcpy(TOOL_DFU_ISP_CONFIG_ADDR_1,DFU_String_au8,4,TRUE);
}
u8 HV_WriteSlot_u8 (u8 SlotNr_u8, HiddenVolumeKeySlot_tst * SlotData_st, u8 * SlotKey_pu8)
{
u32 i;
u8 Buffer_au8[HV_SLOT_SIZE];
    // u8 HiddenVolumeSlotsKey_au8[AES_KEYSIZE_256_BIT];

    if (FALSE == DecryptedHiddenVolumeSlotsActive_u8)
    {
        return (FALSE); // Slot data is not in ram
    }


    // Fill buffer with random numbers
    for (i = 0; i < HV_SLOT_SIZE; i++)
    {
        Buffer_au8[i] = rand () % 256;
    }

    // Set magic number
    // SlotData_st->MagicNumber_u32 = HV_MAGIC_NUMBER_SLOT_ENTRY;

    // Set CRC32
    SlotData_st->Crc_u32 = generateCRC_len ((u8 *) SlotData_st, (sizeof (HiddenVolumeKeySlot_tst) / 4) - 1);    // -1 for CRC variable

#ifdef DEBUG_KEYS
    CI_LocalPrintf ("HV_WriteSlot_u8 %d - CRC 0x%08x\r\n", SlotNr_u8, SlotData_st->Crc_u32);
    CI_LocalPrintf ("Decrypted data :\r\n");
    HexPrint (sizeof (HiddenVolumeKeySlot_tst), SlotData_st);
    CI_LocalPrintf ("\r\n");
#endif

    memcpy (Buffer_au8, (u8 *) SlotData_st, sizeof (HiddenVolumeKeySlot_tst));
    // Encrypt slot data
    AES_KeyEncryption (HV_SLOT_SIZE, Buffer_au8, SlotKey_pu8, AES_PMODE_CIPHER, SlotNr_u8);

    // Write encrypted slot data into ram
    memcpy ((u8 *) (DecryptedHiddenVolumeSlotsData_au8 + HV_SALT_SIZE + SlotNr_u8 * HV_SLOT_SIZE), Buffer_au8, HV_SLOT_SIZE);

#ifdef DEBUG_KEYS
    CI_LocalPrintf ("Encrypted data :\r\n");
    HexPrint (HV_SLOT_SIZE, &DecryptedHiddenVolumeSlotsData_au8[HV_SALT_SIZE + SlotNr_u8 * HV_SLOT_SIZE]);
    CI_LocalPrintf ("\r\n");
#endif

    // Encrypt all slots data (max 256 byte per encryption)
    AES_KeyEncryption (HV_SLOT_COUNT * HV_SLOT_SIZE, &DecryptedHiddenVolumeSlotsData_au8[HV_SALT_SIZE], DecryptedHiddenVolumeSlotsKey_au8,
                       AES_PMODE_CIPHER, SlotNr_u8);

    // Write ram data to flash
    flashc_memcpy ((u8 *) (HV_SALT_START_ADDRESS + HV_SALT_SIZE), &DecryptedHiddenVolumeSlotsData_au8[HV_SALT_SIZE], HV_SLOT_SIZE * HV_SLOT_COUNT,
                   TRUE);



    return (TRUE);
}
u8 WriteStickConfigurationToUserPage (void)
{
// Set actual firmware version
  StickConfiguration_st.VersionInfo_au8[0]              = VERSION_MAJOR;
  StickConfiguration_st.VersionInfo_au8[1]              = VERSION_MINOR;
  StickConfiguration_st.VersionInfo_au8[2]              = 0;               // Build number not used
  StickConfiguration_st.VersionInfo_au8[3]              = 0;               // Build number not used

  flashc_memcpy(AVR32_FLASHC_USER_PAGE + 72,&StickConfiguration_st,30,TRUE);
  return (TRUE);
}
Example #8
0
void settings_write(void)
{
	uint32_t chk = get_crc();
		
	if (chk != settings.settings_words[USER_PAGE_CHECKSUM])
	{
		settings.settings_words[USER_PAGE_CHECKSUM] = chk;
		settings.settings_words[BOOT_LOADER_CONFIGURATION] = 0x929E1424; // boot loader config word
			
		flashc_memcpy(AVR32_FLASHC_USER_PAGE, & settings, 512, TRUE);
	}
}
Example #9
0
/*! \brief This is an example demonstrating flash read / write data accesses
 *         using the FLASHC driver.
 *
 * \param caption     Caption to print before running the example.
 * \param nvram_data  Pointer to the NVRAM data structure to use in the example.
 */
static void flash_rw_example(const char *caption, nvram_data_t *nvram_data)
{
	static const uint8_t write_data[8] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};

	print_dbg(caption);

	print_dbg("Initial values of NVRAM variables:\r\n");
	print_nvram_variables(nvram_data);

	print_dbg("\r\nClearing NVRAM variables...");
	flashc_memset((void *)nvram_data, 0x00, 8, sizeof(*nvram_data), true);
	print_dbg("\r\nNVRAM variables cleared:\r\n");
	print_nvram_variables(nvram_data);

	print_dbg("\r\nWriting new values to NVRAM variables...");
	flashc_memcpy((void *)&nvram_data->var8,   &write_data, sizeof(nvram_data->var8),   true);
	flashc_memcpy((void *)&nvram_data->var16,  &write_data, sizeof(nvram_data->var16),  true);
	flashc_memcpy((void *)&nvram_data->var8_3, &write_data, sizeof(nvram_data->var8_3), true);
	flashc_memcpy((void *)&nvram_data->var32,  &write_data, sizeof(nvram_data->var32),  true);
	print_dbg("\r\nNVRAM variables written:\r\n");
	print_nvram_variables(nvram_data);
}
void DFU_DisableFirmwareUpdate (void)
{
  u8 DFU_String_au8[4];

  DFU_String_au8[0] = TOOL_DFU_ISP_CONFIG_WORD_START_APPL_0;
  DFU_String_au8[1] = TOOL_DFU_ISP_CONFIG_WORD_START_APPL_1;
  DFU_String_au8[2] = TOOL_DFU_ISP_CONFIG_WORD_START_APPL_2;
  DFU_String_au8[3] = TOOL_DFU_ISP_CONFIG_WORD_START_APPL_3;

  flashc_memcpy(TOOL_DFU_ISP_CONFIG_ADDR_1,DFU_String_au8,4,TRUE);

  flashc_write_gp_fuse_bit (30,0);              // Set SP_IO_COND_EN  = 0 for DUF 1.0.3
  flashc_write_gp_fuse_bit (31,0);              // Set to 0 to start application for DUF 1.0.3

}
Example #11
0
// parse a hex record and write the contents to flash if appropriate
// return 1 if EOF, 0 otherwise
extern u8 flash_write_hex_record(u8* data) {
  static hexRecord_t rec;
  static u32 addrOff = 0;
  static u32 dst;
  static char hexBuf[9] = {0,0,0,0,0,0,0,0,0};
  int err;
  err = parse_raw_hex_record(data, &rec);
  if(err) {
    // print_dbg("\r\n failure parsing hex record: \r\n");
    // print_dbg((const char*)data);

    screen_line(0, 6, "WARNING:", 0xf);
    screen_line(0, 7, "error parsing hex record!", 0xf);
    screen_refresh();

  } else {
    switch(rec.type) {
    case HEX_EXT_LINEAR_ADDRESS:
      addrOff = rec.address;
      break;
    case HEX_DATA:
      /* // print_dbg("\r\n writing firmware to flash at address: "); */
      /* // print_dbg_hex(addrOff + rec.address); */
      dst = addrOff + rec.address;

      /// TEST!!
            if(dst < FIRMWARE_FLASH_ADDRESS) {
      //      if(0) {


	// don't allow writes to anything below the runtime location!
	// this is where the bootloader lives!
	// app data goes at the end of flash.
	screen_line(0, 6, "WARNING:", 0xf);
	screen_line(0, 7, "scary address! ", 0xf);
	uint_to_hex_ascii( hexBuf, dst);
	screen_line(64, 7, hexBuf, 0xf);
      } else {
	flashc_memcpy( (void*)(dst), rec.data, rec.count, 1);
      }
      break;
    default:
      ;;
    }
  }
  return 0;
}
void DFU_EnableFirmwareUpdate (void)
{
  u8 DFU_String_au8[4];

  DFU_String_au8[0] = TOOL_DFU_ISP_CONFIG_WORD_START_DFU_0;
  DFU_String_au8[1] = TOOL_DFU_ISP_CONFIG_WORD_START_DFU_1;
  DFU_String_au8[2] = TOOL_DFU_ISP_CONFIG_WORD_START_DFU_2;
  DFU_String_au8[3] = TOOL_DFU_ISP_CONFIG_WORD_START_DFU_3;

  flashc_memcpy(TOOL_DFU_ISP_CONFIG_ADDR_1,DFU_String_au8,4,TRUE);

  flashc_erase_gp_fuse_bit (30,0);              // Set SP_IO_COND_EN  = 1 for DUF 1.0.3
  flashc_erase_gp_fuse_bit (31,0);              // Set to 1 to start bootloader for DUF 1.0.3

  flashc_write_gp_fuse_bit (30,1);              // Set SP_IO_COND_EN  = 1 for DUF 1.0.3
  flashc_write_gp_fuse_bit (31,1);              // Set to 1 to start application for DUF 1.0.3
}
Example #13
0
int snmp_set_flashstatus (int32_t arg, const uint8_t * req, int req_len)
{
	if (req[ req_len - 1] == 2) // least significant byte == 2
	{
		uint32_t chk = get_crc();
	
		if (chk != settings.settings_words[USER_PAGE_CHECKSUM])
		{
			settings.settings_words[USER_PAGE_CHECKSUM] = chk;
			settings.settings_words[BOOT_LOADER_CONFIGURATION] = 0x929E1424; // boot loader config word
			
			flashc_memcpy(AVR32_FLASHC_USER_PAGE, & settings, 512, TRUE);
		
			settings_set_home_ref();
		}
	}
	
	return 0;
}
Example #14
0
void onboard_parameters_write_parameters_to_flashc(onboard_parameters_t* onboard_parameters)
{
	onboard_parameters_set_t* param_set = onboard_parameters->param_set;

	float cksum1, cksum2;
	cksum1 = 0;
	cksum2 = 0;

	uint8_t i;
	size_t bytes_to_write = 0;
	
	nvram_data_t* nvram_array = (nvram_data_t*) MAVERIC_FLASHC_USER_PAGE_START_ADDRESS;
	nvram_data_t local_array;
	
	local_array.values[0] = param_set->param_count;
	cksum1 += local_array.values[0];
	cksum2 += cksum1;
	
	print_util_dbg_print("Begin write to flashc...\r\n");
	
	for (i = 1; i <= param_set->param_count; i++)
	{
		// local_array.values[i] = onboard_parameters_read_parameter(onboard_parameters, i-1);
		local_array.values[i] = *(param_set->parameters[i-1].param);
		
		cksum1 += local_array.values[i];
		cksum2 += cksum1;
	}
	local_array.values[param_set->param_count + 1] = cksum1;
	local_array.values[param_set->param_count + 2] = cksum2;

	bytes_to_write = 4 * (param_set->param_count + 3);	// (1 param_count + parameters + 2 checksums) floats
	
	if(bytes_to_write < MAVERIC_FLASHC_USER_PAGE_FREE_SPACE)
	{
		flashc_memcpy((void *)nvram_array, &local_array, bytes_to_write, true);
		print_util_dbg_print("Write to flashc completed.\r\n");
	}
	else
	{
		print_util_dbg_print("Attempted to write too many parameters on flash user page, aborted.\r\n");
	}
}
u8 WriteMatrixColumsUserPWToUserPage (u8 *data)
{
  flashc_memcpy(AVR32_FLASHC_USER_PAGE + 32,data,20,TRUE);
  return (TRUE);
}
u32 EraseLocalFlashKeyValues_u32 (void)
{
  u32 i;
  u32 i1;

// Clear user page
  for (i1=0;i1<5;i1++)
  {
    for (i=0;i<256;i++)
    {
      EraseStoreData_au8[i] = (u8)(rand () % 256);
    }
    flashc_memcpy((void*)AVR32_FLASHC_USER_PAGE,EraseStoreData_au8,256,TRUE);
  }

  flashc_erase_user_page (TRUE);

// Set default values
  InitStickConfigurationToUserPage_u8 ();

  DFU_DisableFirmwareUpdate ();     // Stick always starts in application mode
  CheckForNewSdCard ();             // Get SD ID

// Clear password safe
  for (i1=0;i1<5;i1++)
  {
    for (i=0;i<256;i++)
    {
      EraseStoreData_au8[i] = (u8)(rand () % 256);
    }
    flashc_memcpy((void*)(PWS_FLASH_START_ADDRESS    ),EraseStoreData_au8,256,TRUE);
    flashc_memcpy((void*)(PWS_FLASH_START_ADDRESS+256),EraseStoreData_au8,256,TRUE);
  }

  flashc_erase_page(PWS_FLASH_START_PAGE,TRUE);

// Clear OTP
  for (i1=0;i1<5;i1++)
  {
    for (i=0;i<256;i++)
    {
      EraseStoreData_au8[i] = (u8)(rand () % 256);
    }
    for (i=0;i<10;i++)
    {
      flashc_memcpy((void*)(SLOTS_ADDRESS+i*512    ),EraseStoreData_au8,256,TRUE);
      flashc_memcpy((void*)(SLOTS_ADDRESS+i*512+256),EraseStoreData_au8,256,TRUE);
    }
  }

  for (i=0;i<10;i++)
  {
    flashc_erase_page(OTP_FLASH_START_PAGE+i,TRUE);
  }

// Clear hidden volumes
  for (i1=0;i1<5;i1++)
  {
    for (i=0;i<256;i++)
    {
      EraseStoreData_au8[i] = (u8)(rand () % 256);
    }
    for (i=0;i<2;i++)
    {
      flashc_memcpy((void*)(HV_MAGIC_NUMBER_ADDRESS+i*512    ),EraseStoreData_au8,256,TRUE);
      flashc_memcpy((void*)(HV_MAGIC_NUMBER_ADDRESS+i*512+256),EraseStoreData_au8,256,TRUE);
    }
  }
  for (i=0;i<10;i++)
  {
    flashc_erase_page(HV_FLASH_START_PAGE+i,TRUE);
  }

  return (TRUE);
}
u8 WritePasswordSafeKey (u8 *data)
{
  flashc_memcpy((void*)(AVR32_FLASHC_USER_PAGE + 178),data,32,TRUE);
  return (TRUE);
}
u8 WriteXorPatternToFlash (u8 *XorPattern_pu8)
{
  flashc_memcpy(AVR32_FLASHC_USER_PAGE + 146,XorPattern_pu8,32,TRUE);

  return (TRUE);
}
u8 WriteDatetime (u32 Datetime_u32)
{
  flashc_memcpy(AVR32_FLASHC_USER_PAGE + 138,&Datetime_u32,4,TRUE);
  return (TRUE);
}
u8 WriteHiddenVolumeSlotKey (u8 *data)
{
  flashc_memcpy((void*)(AVR32_FLASHC_USER_PAGE + 102),data,32,TRUE);
  return (TRUE);
}
Example #21
0
int main(void) {
	u8 i1;

	sysclk_init();

	init_dbg_rs232(FMCK_HZ);

	init_gpio();
	assign_main_event_handlers();
	init_events();
	init_tc();
	init_spi();
	init_adc();

	irq_initialize_vectors();
	register_interrupts();
	cpu_irq_enable();

	init_usb_host();
	init_monome();

	init_i2c_slave(0x30);

	print_dbg("\r\n\n// meadowphysics //////////////////////////////// ");
	print_dbg_ulong(sizeof(flashy));

	print_dbg(" ");
	print_dbg_ulong(sizeof(m));


	if(flash_is_fresh()) {
		print_dbg("\r\nfirst run.");
		flash_unfresh();
		flashc_memset32((void*)&(flashy.preset_select), 0, 4, true);


		// clear out some reasonable defaults
		for(i1=0;i1<8;i1++) {
			m.positions[i1] = i1;
			m.points[i1] = i1;
			m.points_save[i1] = i1;
			m.triggers[i1] = 0;
			m.trig_dests[i1] = 0;
			m.rules[i1] = 0;
			m.rule_dests[i1] = i1;
		}

		m.positions[0] = m.points[0] = 3;
		m.trig_dests[0] = 254;

		// save all presets, clear glyphs
		for(i1=0;i1<8;i1++) {
			flashc_memcpy((void *)&flashy.m[i1], &m, sizeof(m), true);
			glyph[i1] = (1<<i1);
			flashc_memcpy((void *)&flashy.glyph[i1], &glyph, sizeof(glyph), true);
		}
	}
	else {
		// load from flash at startup
		preset_select = flashy.preset_select;
		flash_read();
		for(i1=0;i1<8;i1++)
			glyph[i1] = flashy.glyph[preset_select][i1];
	}

	LENGTH = 15;
	SIZE = 16;

	re = &refresh;

	process_ii = &mp_process_ii;

	clock_pulse = &clock;
	clock_external = !gpio_get_pin_value(B09);

	timer_add(&clockTimer,120,&clockTimer_callback, NULL);
	timer_add(&keyTimer,50,&keyTimer_callback, NULL);
	timer_add(&adcTimer,100,&adcTimer_callback, NULL);
	clock_temp = 10000; // out of ADC range to force tempo

	while (true) {
		check_events();
	}
}
u8 WriteAESStorageKeyToUserPage (u8 *data)
{
  flashc_memcpy(AVR32_FLASHC_USER_PAGE,data,32,TRUE);
  return (TRUE);
}
Example #23
0
void Update_stored_values(void)
{
    flashc_memcpy((void *)&Stored_values_flash, (void *)&Stored_values_ram, sizeof(Stored_values_ram), true);
}
u8 WriteMatrixColumsAdminPWFromUserPage (u8 *data)
{
  flashc_memcpy(AVR32_FLASHC_USER_PAGE + 52,data,20,TRUE);
  return (TRUE);
}