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

 
 
> AT45DB081D to AT45DB081Е, Ошибки при переходе на 081Е
Vitaliy_ARM
сообщение Mar 27 2015, 12:19
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Доброе время!

Было в свое время разработано устройство на микроконтроллере LPC1778 и флешке AT45DB081D-SSU. Последняя использовалась для хранения таблиц с коэффициентами. Эту флешку постранично могло обновлять программное обеспечение. Запись во флешку делается при помощи команды 0x82 (Main Memory Page Program through Buffer 1 with Built-In Erase), для чтения использую 0xD2 (Main Memory Page Read). Все работало замечательно, пока AT45DB081D-SSU не сняли с производства. На замену ей пришла AT45DB081E от Adesto, которую мы установили в новую партию. И тут начались чудеса. После создания тестовых программ, выяснилось, что данные записываются некорректно, причем может во всей памяти записаться некорректно один байт, а может и вся страница, а может и все нормально записаться. Причем это не от чего не зависит, глючит спонтанно. Даже ввели верификацию страниц и повторную запись. Однако выяснилось, что контрольная сумма данных не совпадала, даже когда постраничная верификация и перезаписть проходила на ОК. Т.е. запись одной страницы может убить данных в другой. Думали, что флешки бракованные. Купили в проверенном месте - тоже самое.

Подскажите, в чем может быть причина?

Функция записи страницы приведена ниже. (используется 264 байтная страница)

Код
BOOL at45db081d::write264(WORD page, BYTE *pBuf)
{
    unsigned int i;

    if(page > MAX_PAGES)
        return FALSE;// FALSE;
    
    SET_AT45D_CS();
    reg[0] = 0x82;
    reg[1] = page >> 7;
    reg[2] = page << 1;        
    reg[3] = 0x00;
    pSpi->transfer(reg, 4);
    pSpi->transfer(buf, 264);
    CLR_AT45D_CS();
    for(i = 0xFFFFFFFF; i > 0; i--)
    {
        if(status() & 0x80)
            break;                
    }
    if(i == 0)
        return FALSE;
    if(status() & 0x20)       // EPE bit
        return FALSE;
    return TRUE;
}


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Altemir
сообщение Mar 27 2015, 12:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686



CS после записи отпускали? Бит EPE смотрели в статусном регистре? Пока на E-серию не переходили, сидим на D, но весьма заинтересовался таким багом.
Сюда заглядывали? http://www.adestotech.com/wp-content/uploads/081E.pdf
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 27 2015, 12:43
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(Altemir @ Mar 27 2015, 16:32) *
CS после записи отпускали? Бит EPE смотрели в статусном регистре? Пока на E-серию не переходили, сидим на D, но весьма заинтересовался таким багом.


Да, конечно. CS опускаю перед записью и поднимаю после окончания. Я привел пример кода записи в первом посте. Привожу код функции status() ниже. Если впаять 081D, то глюки пропадают принципиально. Что только не делал, не могу добиться 100% нормальной записи. Если запись была совершена некорректно, бит EPE взводится и бывает, что я эту же страницу не могу перезаписать, при попытки использовать 82-ю команду, данные не записываются корректно и взводится этот бит. Что делать, если он взводится, в мануале не написано ...

Цитата(Altemir @ Mar 27 2015, 16:32) *

Документ этот видел. Эти команды (0x82 и 0xD2) у них не отличаются. Должно все работать одинаково, но не работает.

P.S.: У меня напряжение питания флешки 3,3В, но не думаю, что это причина.

Код
/**************************************************************
* чтение регистра статуса
*************************************************************/
BYTE at45db081d::status()
{
    // Status Register Read
    SET_AT45D_CS();                  // set CS to LOW
    reg[0] = 0xD7;
    reg[1] = 0x00;
    pSpi->transfer(reg, 2);
    CLR_AT45D_CS();                  // set CS to HIGH
    return reg[1];
}


P.S.2: Сейчас есть более дешевая альтернатива этой флешки: http://www.spansion.com/Support/Applicatio..._S25FL-K_AN.pdf , но тут другая распиновка.
Устройства уже выпущены и радикально переделывать что-то не особо хочется.


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
alag57
сообщение Mar 27 2015, 13:58
Сообщение #4


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

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(Vitaliy_ARM @ Mar 27 2015, 17:43) *
Документ этот видел.


Код
    reg[0] = 0xD7;
    reg[1] = 0x00;
    pSpi->transfer(reg, 2);


AT45DB081E – New 2-byte Status Register.
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 27 2015, 16:55
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(alag57 @ Mar 27 2015, 17:58) *
Код
    reg[0] = 0xD7;
    reg[1] = 0x00;
    pSpi->transfer(reg, 2);


AT45DB081E – New 2-byte Status Register.


Спасибо, заменил. Но это никак на ситуацию не повлияло. Глючит также. У них первый регистр статуса совместимый, наверное, теоретически, должен быть совместим и по коду.


Цитата(MobyDick @ Mar 27 2015, 18:34) *
На всякий случай отмечу, что в том документе они умалчивают об ещё одном различии:
- в ревизии "D" было "All inputs (SI, SCK, CS#, WP#, and RESET#) are guaranteed by design to be 5-Volt tolerant" (-0.6V to +6.25V);
- в ревизии "E" стало "-0.6V to VCC + 0.6V"

Это хорошее замечание, если у кого-то используется с AVR, могут наступить на грабли.

Цитата(mcheb @ Mar 27 2015, 19:25) *
Я на какой то флэшке так делал после посылки буфера
// read status register проверка окончания записи
// nop();
// printf("WR\n");
CS_SST25_L;
SpiMaster(0x05);
while(SpiMaster(0x00) & (WIP | WEL) )
{
nop();
};
CS_SST25_H;
нужен тайм-аут для окончания процесса записи


Это немного другая флешка, фирмы SST. Похоже на чтение регистра статуса. У меня также функция ожидает завершения операции записи при помощи чтения регистра статуса и проверки соответствующего бита.


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
alag57
сообщение Mar 27 2015, 20:32
Сообщение #6


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

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(Vitaliy_ARM @ Mar 27 2015, 21:55) *
У них первый регистр статуса совместимый, наверное, теоретически, должен быть совместим и по коду.

Код
    if(status() & 0x20)       // EPE bit
        return FALSE;


EPE бит о втором байте однако.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Vitaliy_ARM   AT45DB081D to AT45DB081Е   Mar 27 2015, 12:19
|- - jcxz   У нас также выпускаются несколько устройств на LPC...   Mar 28 2015, 04:26
- - MobyDick   На всякий случай отмечу, что в том документе они у...   Mar 27 2015, 14:34
|- - mcheb   Я на какой то флэшке так делал после посылки буфер...   Mar 27 2015, 15:25
- - Altemir   Vitaliy_ARM КодpSpi->transfer(buf, 264...   Mar 30 2015, 06:09
|- - jcxz   Цитата(Altemir @ Mar 30 2015, 12:09) Може...   Mar 30 2015, 12:26
|- - Altemir   Цитата(jcxz @ Mar 30 2015, 15:26) Прежде ...   Mar 30 2015, 12:32
|- - Vitaliy_ARM   Код чтения статуса я исправил на двухбайтовый и ис...   Mar 30 2015, 19:24
||- - aaarrr   Цитата(Vitaliy_ARM @ Mar 30 2015, 22:24) ...   Mar 30 2015, 20:16
|- - jcxz   Цитата(Altemir @ Mar 30 2015, 18:32) Так ...   Mar 31 2015, 03:10
- - alag57   Цитата(Vitaliy_ARM @ Mar 27 2015, 17:19) ...   Mar 30 2015, 19:45
- - Altemir   Нашли у себя AT45DB041E. На корпусе сверху маркиро...   Mar 31 2015, 07:00
- - aaarrr   Хм, а с режимом SPI не напутано? По симптомам похо...   Mar 31 2015, 07:17
- - esaulenka   Много лет назад наступил на грабли с AT45DBxxxD. ...   Apr 3 2015, 10:58
- - uriy   У нас в изделии заменена 161D на 161E. Уже несколь...   Apr 5 2015, 16:46
- - Velund   С этими чипами (только АТ45DB161 а не 081) один ра...   Apr 9 2015, 00:53


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

 


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


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