Не обязательно искать последовательность 0xff,0xff,0xff,0xff,0xaa,0x99,0x55,0x66 - она разная для разных типов устройств. Заголовок является стандартным для всех типов микросхем, и для нахождения, где он заканчивается, можно использовать следующее:
Код
int SeekLcaBegin(void *xbuff, int maxsize){
// Поиск начала конфигурационной информации в файлах типа '.bit'
// созданных пакетом XACT.
// Возврат:
// -1 = начало не найдено
// все остальное - смещение конфига от начала 'buff'
int beg = 13;
char *buff = (char*)xbuff;
while(buff[beg] != 0x65){
if(beg >= maxsize) return -1; // out of range
if((buff[beg] & 0xf0) != 0x60) return -1; //
beg += 3 + (unsigned char)buff[beg+2];
}
return beg+5;
}
Более того, начало искать не обязательно - Spartan2, например, сам выкидывает лишнее и корректно загружается, если ему скармливать весь файл целиком.
/* Всё хорошо в меру. */