реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> "Забывчивость" AT45DB161, Пропадают данные через некоторый период
smalcom
сообщение Mar 27 2015, 10:14
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Используем ИМС AT45DB161D. Запасы и только для старого оборудования.
Столкнулись с проблемой потери данных. При проверке использовался логический анализатор, поэтому наличие этой проблемы подтверждено и визуально тоже.
Порядок действий:
1. Записываем ~50 кБ данных(проводили аналогичный тест с размером блока данных ~3 кБ).
2. После записи сразу считываем и проверяем. Все данные верны.
3. Ожидаем несколько секунд и выполняем повторное считывание. Появляются чистые страницы: записаны 0xFF.
4. Ожидаем ещё несколько секунд. Вся ранее записанная область становится чистой: записаны 0xFF.

ИМС подключена длинными проводами - ~10 см. Вначале грешили на это и установили резисторы 20 Ом со стороны ИМС памяти на линии MOSI, MISO, SCK. Ситуация не изменилась.
Питание от TPS76333. Частота SCK: ~50 кГц.
На этом же SPI рядом сидит FRAM FM25CL16B. С FRAM подобных проблем не обнаружено. Во время тестов с Flash, к FRAM обращений не выполнялось.

Подскажите, что это за мистика может быть такая.
Go to the top of the page
 
+Quote Post
mcheb
сообщение Mar 27 2015, 15:39
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602



Цитата(smalcom @ Mar 27 2015, 13:14) *
2. После записи сразу считываем и проверяем. Все данные верны.
3. Ожидаем несколько секунд и выполняем повторное считывание. Появляются чистые страницы: записаны 0xFF.

Попробуйте поменять пункты 2 и 3. Похоже, что после записи к памяти нельзя обращаться,пока она не запишется.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Mar 27 2015, 15:51
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Нет-нет, я перед записью или чтением всегда проверяю флаг доступности в регистре статуса.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 27 2015, 15:59
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Стабильно терялись данные в AT45DB321D если стоящий над ней небольшой тор излучал ВЧ сигнал.
Часто терялись данные при дребезге питания платы (плохой разъём).
Шились через компьютер очень долго, поэтому в основном их зашивал тот камень что от них и запускался.
Была партия в которых дальше 120 страницы записать не удавалось - приходилось учиться писать короткий код.

Статус не считывал - ставил паузы в 100...500мС между действиями.

CODE
#define MaxPages (120)

unsigned char Buf[520];
unsigned char BufR[520];

void ErasePage(unsigned char *pD,unsigned int A)
{
int i;
Buf[0]=0x81;
Buf[1]= ((A & 0x00FF0000) >> 16);
Buf[2]= ((A & 0x0000FF00) >> 8);
Buf[3]= ((A & 0x000000FF) >> 0);

Spi_OFF(); PauseMC(100);
Spi_ON(); PauseMC(100);

for (i=0;i<(4);i++) SpiRW(Buf[i]);
PauseMC(100);
Spi_OFF(); PauseMC(500);
}

void WritePage(unsigned char *pD,unsigned int A)
{
int i;
Buf[0]=0x82;
Buf[1]= ((A & 0x00FF0000) >> 16);
Buf[2]= ((A & 0x0000FF00) >> 8);
Buf[3]= ((A & 0x000000FF) >> 0);

for (i=0;i<512;i++) Buf[i+4]=pD[i];


Spi_OFF(); PauseMC(100);
Spi_ON(); PauseMC(100);

for (i=0;i<(512+4);i++) SpiRW(Buf[i]);
PauseMC(100);
Spi_OFF(); PauseMC(100);
}

void ReadPage(unsigned char *pD,unsigned int A)
{
int i;
Buf[0]=0xE8;
Buf[1]= ((A & 0x00FF0000) >> 16);
Buf[2]= ((A & 0x0000FF00) >> 8);
Buf[3]= ((A & 0x000000FF) >> 0);
Buf[4]=0;
Buf[5]=0;
Buf[6]=0;
Buf[7]=0;
Buf[8]=0;

Spi_OFF(); PauseMC(100);
Spi_ON(); PauseMC(100);
for (i=0;i<8;i++) SpiRW(Buf[i]);
for (i=0;i<(512);i++) pD[i]=SpiRW(Buf[i]);

PauseMC(100);
Spi_OFF(); PauseMC(100);
}

void EraseFlash(void)
{
unsigned int i;
//Erase
for (i=0;i<(MaxPages*512);i+=512)
{
ErasePage(&FlashData[i],i);
Print0VH(i/0x200+1,"PageErase 50/");
}
}
void WriteFlash(void)
{
unsigned int i;
//write
for (i=0;i<(MaxPages*512);i+=512)
{
WritePage(&FlashData[i],i);
Print0VH(i/0x200+1,"PageWrite 50/");
}
}
void TestFlash(void)
{
unsigned int i,j;
//test
for (j=0;j<MaxPages;j++)
{
ReadPage(&BufR[0],j*0x200);
Print0VH(j,"PageTest");
for (i=0;i<512;i++) if (BufR[i]!=FlashData[j*0x200+i]) Print0VH(j*0x200+i,"Error ");
}
}
void PrintFlash(void)
{
unsigned int i,j;
//read & print
for (j=0;j<MaxPages;j++)
{
ReadPage(&BufR[0],j*0x200);
Print0VH(j,"PageRead");
for (i=0;i<512;i++) Print0VHM(BufR[i],16);Print0VHM(0,0);
}
}
PageSize512(void)
{
unsigned char V[5];

Spi_OFF();
PauseMC(100);
Spi_ON();
PauseMC(2);

//--- Programmed to 512--------
V[0]=SpiRW(0x3D);
V[1]=SpiRW(0x2A);
V[2]=SpiRW(0x80);
V[3]=SpiRW(0xA6);
//-----------------------------------

PauseMC(2);
Spi_OFF();


PrintClock("SPI end");

Print0VH(V[0],"1=");
Print0VH(V[1],"2=");
Print0VH(V[2],"3=");
Print0VH(V[3],"4=");
}
VerifyFlashStatus(void)
{
unsigned char V[5];

Spi_OFF();
PauseMC(100);
Spi_ON();
PauseMC(2);

//--- Verify Status register--------
V[0]=SpiRW(0xD7);
V[1]=SpiRW(0x00); // reply 0xB4 if 528, 0xB5 if 512
V[2]=SpiRW(0x00); // reply 0xB4 if 528, 0xB5 if 512
V[3]=SpiRW(0x00); // reply 0xB4 if 528, 0xB5 if 512
//-----------------------------------

PauseMC(2);
Spi_OFF();


PrintClock("SPI end");

Print0VH(V[0],"1=");
Print0VH(V[1],"2=");
Print0VH(V[2],"3=");
Print0VH(V[3],"4=");
}
//-----------------------------------------------------

int main( void )
{
printf("CoreA: started\n");
Init_UART();
CheckClock();
Spi_Init();

//while(1)
Print0("FlashInit");


EraseFlash();

WriteFlash();
TestFlash();
//PrintFlash();

//==========================================================================
//VerifyFlashStatus(); // reply 0xB4 if 528, 0xB5 if 512

//PageSize512();

while(1);
return 0;
}

Go to the top of the page
 
+Quote Post
mcheb
сообщение Mar 27 2015, 16:07
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602



Цитата(_4afc_ @ Mar 27 2015, 18:59) *
Стабильно терялись данные в AT45DB321D если стоящий над ней небольшой тор излучал ВЧ сигнал.

Можно здесь поподробнее? Как тор небольшой может излучать ВЧ сигнал?
Go to the top of the page
 
+Quote Post
smalcom
сообщение Mar 27 2015, 16:10
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Трагичная ИМС.
У меня выше и сбоку в нескольких сантиметрах как раз стоит L5973D. Попробую приведённый код.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 27 2015, 19:40
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(mcheb @ Mar 27 2015, 19:07) *
Можно здесь поподробнее? Как тор небольшой может излучать ВЧ сигнал?


Передатчик и приёмник были соединены по двухпроводной линии на расстоянии нескольких сотен метров через трансформаторы на торе.
На вход модулятора передатчика выдавалась последовательность через MOSI поступавшая на ЧМ модулятор в диапазоне КВ.
Если разработчик передатчика обновлял прошивку AT45 не отключив его от линии, то после этого приёмник не работал с вероятностью 100% т.к. первая страница его прошивки почему-то содержала нули.
Конструктивно тор приёмника диаметром 10мм располагался этажеркой выше AT45 на пару миллиметров.

В следующей версии системы тор приёмника был перемещён в сторону от AT45 и модулятор подключен на другую ногу - проблемы исчезли!
Что было источником проблем - магнитное поле от тора или то, что помеха содержала модулированные коды стирания и прошивки AT45 - я не знаю.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Apr 10 2015, 12:50
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Разнёс в пространстве память и стабилизатор. Проблема осталась. Теперь попробую идею с более длинными паузами между действиями.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Apr 10 2015, 14:08
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(smalcom @ Apr 10 2015, 15:50) *
Разнёс в пространстве память и стабилизатор. Проблема осталась. Теперь попробую идею с более длинными паузами между действиями.


Не забудте, что чтение статуса - тоже действие. А лучше статус вообще не долбить...
Go to the top of the page
 
+Quote Post
uriy
сообщение Apr 13 2015, 04:19
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Используем AT45DB161D, а пследнее время AT45DB161E уже лет 5. Изделий по несколько тысяч в год.
Плата стоит в радиостанции. В нескольких сантиметрах от микросхемы антенна излучает мощность 5 Вт.
Частоты VHF и UHF.
Из памяти грузиться DSP процессор и там же хранятся данные.
Не встречал проблемы порчи данных со временем.
Go to the top of the page
 
+Quote Post
__Sergey_
сообщение Apr 15 2015, 06:03
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 8-04-09
Пользователь №: 47 377



1. Смотрите питание внимательно - возможно есть выбросы при включении, или работе кокой-нибудь силы.
2. Сильное электрическое поле в районе микросхемы (цепи более 100В в непосредственной близости.)
3. Выбросы напряжения на SPI на много больше пределов питания, например от затекания статики через внешние разъемы и элементы схемы.
4. Может просто попалась битая партия флешек - приет о китайцев?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016