|
Пропадают данные с microSD, пропадает часть данных при зависании |
|
|
|
May 9 2018, 06:37
|
Частый гость
Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837
|
Возникла проблема с sd картой Mirex 2Gb в spi режиме.
Суть в следующем: карта нормально работает на запись в течении неск. часов, потом в какой то момент вообще перестает подавать признаки жизни (держит busy). Делаю reset по питанию, считываю данные. Вижу, что часть ранее записанных данных пропала, причем пропала не полностью, а кусками примерно по 64к, т.е часть данных есть, потом "дырка", потом снова идут данные. Т.o проблемы две - зависание карты и пропадание данных. В первую очерень хотелось бы разобраться с пропаданием данных.
Данные пишу раз в секунду порциями по 256 байт. Просадок по питанию во время работы нет, неиспользуемые линии через 10к подтянуты к +3.3В. Частота spi = 12,5МГц.
P.S. C картами других производителей такой проблемы не наблюдается. Дело в том, что часть устройств уже выпущена с этой картой, поменять ее можно, но это долго и затратно, поэтому хотелось бы найти программный способ решения проблемы.
P.S.S. Какого размера внутренние буферы записи у карты? Т.е интересует сколько данных может теоретически потеряться при внезапном пропадании питания.
Кто что может посоветовать?
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
May 9 2018, 16:48
|
Частый гость
Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837
|
Пишу в raw, размер сектора 512. Когда пишу порциями по 256б, то сначала читаю сектор, модифицирую данные и снова записываю.
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
May 9 2018, 16:59
|
Гуру
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143
|
Цитата(scout @ May 9 2018, 09:37) Вижу, что часть ранее записанных данных пропала, причем пропала не полностью, а кусками примерно по 64к, т.е часть данных есть, потом "дырка", потом снова идут данные. Т.o проблемы две - зависание карты и пропадание данных. В первую очерень хотелось бы разобраться с пропаданием данных. Может устроить нагрузочное тестирование данных карт? Например прогой h2testw, на несколько часов и посмотреть, может вы пытаетесь решить чужую проблему?
|
|
|
|
|
May 9 2018, 19:03
|
Частый гость
Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837
|
Спасибо, попробую.
Только непонятно в каком режиме эта прога пишет: одиночными секторами или мультиблоком, боюсь это будет не совсем корректный тест.
Я думал может кто - то сталкивался с подобным поведением и подскажет в чем может быть дело..
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
May 9 2018, 19:14
|
Гуру
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369
|
Цитата(scout @ May 9 2018, 09:37) Возникла проблема с sd картой Mirex 2Gb в spi режиме.
Кто что может посоветовать? А могут ли быть аппаратные проблемы? Питание? Фронты импульсов, особенно клоки? Согласование линий? Частоту понижать пробовали? Пробовали ли эти карты в каком-нибудь другом стартовом наборе? В конце концов обращались ли в техподдержку изготовителя микросхем? И нет ли у них ерраты именно на эту партию микросхем?
--------------------
www.iosifk.narod.ru
|
|
|
|
|
May 10 2018, 09:10
|
Частый гость
Группа: Свой
Сообщений: 120
Регистрация: 4-01-06
Из: Москва
Пользователь №: 12 837
|
iosifk, аппаратно все вроде нормально. Частота и так достаточно низкая. Устройство где используются эти карты не новое, проблема именно с этой партией.
_4afc_, что значит делать паузы? В документации я ничего не нашел по этому поводу. Каждую отдельную операцию чтения/записи я и так делаю внутри своего цикла CS. Данные пишу с cmd24, читаю c помощью cmd17. Никаких проблем не было, пока не поставили эти карты mirex. Самое неприятное, что пропадают уже записанные данные, зависания не так критичны. В новой партии мы, конечно, будет ставить другие карты, а в старом тираже хотелось бы решить проблему программно, по крайней мере временно.
jcxz, а как записывать внутри блока, если адресация блочная? Вот и приходится читаю блок, модицифировать данные и писать его снова.
--------------------
То, что неясно, следует выяснить. То, что трудно творить, следует делать с великой настойчивостью. Конфуций
|
|
|
|
|
May 10 2018, 14:20
|
Профессионал
Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565
|
Цитата(scout @ May 10 2018, 12:10) _4afc_, что значит делать паузы? В документации я ничего не нашел по этому поводу. Каждую отдельную операцию чтения/записи я и так делаю внутри своего цикла CS. Данные пишу с cmd24, читаю c помощью cmd17. Разнесите чтение и запись на 500мс. Modify_Block(int N) { if (needRead) {stop_cmd12();wait_ms(250);Read_cmd17(N);wait_ms(250);stop_cmd12();wait_ms(250); } Write_cmd24(N); }
|
|
|
|
|
May 10 2018, 14:50
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(scout @ May 10 2018, 12:10) jcxz, а как записывать внутри блока, если адресация блочная? Вот и приходится читаю блок, модицифировать данные и писать его снова. Вы что-то путаете: блок стирания - это блок размером обычно несколько десятков КБ (64 или больше), а страница для записи - это обычно 512 байт. Блок содержит много страниц. Если его стереть заблаговременно, то читать ничего не надо. И если у вас последовательная запись (типа кольцевого буфера на SD), то как раз и можно стирать блоки перед началом буфера и писать целые страницы. Цитата(mantech @ May 10 2018, 16:24) Дык смысл есть, как бы ФС так и делает вообще-то, если нужно что-то поменять внутри 512и байтного сектора считывает в оконный буфер модифицирует и записывает обратно Попробуйте записать на сдшку, скажем только 16 байт?? Я так понял: автор пишет в последовательную цепочку страниц, раз в секунду по 256 байт. Если заранее стереть блоки перед головой записываемой цепочки, то читать ничего не надо. И в чём проблема записать хоть 16 хоть 1 байт если заранее известно, что пишем в стёртую область?
|
|
|
|
|
May 10 2018, 15:13
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(jcxz @ May 10 2018, 18:02) и что? 1. Адрес должен быть выровнен на границу сектора. Как записать произвольный байт? Типа отправить весь сектор где иные байты задать erase-default-value? 2. Записать можно только сектор целиком. см. п.1 3. При записи сектора нужно передать 16 бит контрольной информации. Контрольная информация нужна только для контроля ошибок связи, а не хранения? Мне представляется NAND как хранилище данных с корректирующими кодами размером с сектор. Если дописать данных и корректирующих кодов, то в итоге данные будет не восстановить. Делает ли карта чтение-модификацию-запись и применение логики с учетом erase-default-value - сомневаюсь. На некоторых картах может быть WRITE_BL_PARTIAL, но это скорее экзотика, чем правило. Возможно, из-за доводов предыдущего абзаца.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|