разобрался уже, но работает не совсем правильно на моей флеше на 16 мегабит функция
xByte init_at45(st_at45_Data *pntr)
{ RESET_CS_DATAFLASH; //сбросим CS для DataFlash
initSpi(SPI_MASTER, AT45_SPI_NUM); //проинициализируем SPI
volatile xWord tmp=65535;
while(--tmp); //задержка 8,8мс
while(--tmp); //задержка 8,8мс
tmp=16384;
while(--tmp); //задержка 2,2мс
xWord sig=(at45ReadStatus(pntr)<<8)&0x3C00; //считаем сигнатуру DataFlash
tmp=sizeof(at45DensTab)>>2; //кол-во записей в таблице
xByte res=1; //результат диагностики
for (xWord idx=0; idx<tmp; idx++) //ищем в таблице сигнатуру
{ if ((at45DensTab[idx].pageSize&0x3C00)==sig) //сигнатура совпала?
{ pntr->maxBufSize=at45DensTab[idx].pageSize&0x03FF;//ага, размер буфера
xLong ltmp=at45DensTab[idx].pageNum;
pntr->maxMemSize=ltmp*(xLong)(pntr->maxBufSize);//общий объем DataFlash
pntr->num=AT45_SPI_NUM; //номер порта SPI
res=0; //результат положительный
break;
}
}
if (res) //DataFlash не опознана
{ pntr->maxBufSize=0; //обнулим все параметры
pntr->maxMemSize=0;
pntr->num=0;
}
return(res); //вернем результат
} //идентификации
возвращает размер датафлеша в байтах равным 262144 :( не маловато ли?
привожу структуру из библиотеки резидента -
const st_at45_density at45DensTab[]= //таблица типов DataFlash
//сигнатура+размер страницы, кол-во страниц
{ {((0x0C<<8)+264), 512}, //1 Мегабит
{((0x14<<8)+264), 1024}, //2 Мегабит
{((0x1C<<8)+264), 2048}, //4 Мегабит
{((0x24<<8)+264), 4096}, //8 Мегабит
{((0x2C<<8)+528), 4096}, //16 Мегабит
{((0x34<<8)+528), 8192}, //32 Мегабит
{((0x3C<<8)+1056), 8192} //64 Мегабит
};
-
- Раз пошла такая пьянка, режь последний огурец :) rezident(542 знак., 24.09.2006 22:20, ссылка)