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

 
 
> Помехоустойчивая работа с SD-картой
ГУ-49А
сообщение Aug 3 2009, 14:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 26-11-07
Пользователь №: 32 699



Есть устройство с ARM7, которое общается с SD-картой по SPI. На карте - файловая система, и файлы пишутся/читаются. Код работы с SD/MMC взят "стандартный" (IAR'овский), в котором повсюду конструкции вида
Код
while(!SSPSR_bit.TNF)
;
...
while(!SSPSR_bit.RNE)
;

Т.е. они расчитаны на штатную работу, когда все нужные биты выставляются как надо. Однако стоит поднести к устройству с картой работающую электродрель rolleyes.gif, как этот код перестаёт работать (спотыкается на этих ожиданиях и не может из них выйти). К сожалению, такое может произойти и от других внешних факторов.
Интересует программное решение данного вопроса. Т.е. хотелось бы иметь более надёжный robust код, который мог бы восстанавливаться после любой ситуации на шине. Чтобы не изобретать велосипед, поделитесь, пожалуйста, ссылкой на надёжную реализацию MMC/SD или расскажите, как её сделать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_3m
сообщение Aug 3 2009, 16:38
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(ГУ-49А @ Aug 3 2009, 18:28) *
Есть устройство с ARM7, которое общается с SD-картой по SPI.
...
они расчитаны на штатную работу, когда все нужные биты выставляются как надо. Однако стоит поднести к устройству с картой работающую электродрель rolleyes.gif, как этот код перестаёт работать

Сочуствую. У вас случилась jopa!
Вам придется медленно и печально перелопачивать весь код. Причем еще придется ломать голову над тем в какие состояниия попадает карта под воздействием помехи и как из этого корректно выйти. Кстати в спецификации sd о помехах, сбоях и некорректных состояниях нет ни слова, что там будет вытворять встроенный контроллер - хз cranky.gif
Еще и недокументированные "особенности" порта spi под воздействием помех вылезут.
Ей богу убиться ап стену и то будет не так мучительно.
Может вам подумать об использовании просто голых чипов памяти, хотя бы избавитесь от непредсказуемости?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 3 2009, 16:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_3m @ Aug 3 2009, 20:38) *
Кстати в спецификации sd о помехах, сбоях и некорректных состояниях нет ни слова, что там будет вытворять встроенный контроллер - хз cranky.gif

В спецификации SD все замечательно прописано - таймауты, ошибки и т.п. Если аккуратно и внимательно ей следовать, то проблем не будет. Другое дело, что какие-то действия в случае отказа карты должен предпринимать верхний уровень - пользователю пожаловаться, переинициализировать/питание передернуть и т.д.
Ну и конечно бороться программными методами с аппаратными проблемами совершенно бесполезно.
Go to the top of the page
 
+Quote Post
_3m
сообщение Aug 3 2009, 17:29
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(aaarrr @ Aug 3 2009, 20:50) *
В спецификации SD все замечательно прописано - таймауты, ошибки и т.п. Если аккуратно и внимательно ей следовать, то проблем не будет.

Сразу видно что вы даже не задумывались о проблеме.
Какова должна быть реакция системы на бит 19 (ERROR - A general or an unknown error occurred during the operation) в Card Status ???
Или вы подаете заведомо корректную команду а в ответ неожиданно получаете ILLEGAL_COMMAND ???
И что делать если карта показывает busy гораздо дольше паспортного времени выполнения команды ?
В общем все это хотя бы перечислить на бумаге с указанием возможных путей разруливания - уже сизифов труд.
А мы еще не дошли до
Цитата
какие-то действия в случае отказа карты должен предпринимать верхний уровень - пользователю пожаловаться, переинициализировать/питание передернуть и т.д.

Встраиваеое устройство часто работает в автономном полете, жаловаться ему некому. Переинициализация как и ватчдог прервет нормальную работу системы, к чему объект управления или мониторинга может быть в данный момент не готов (проще говоря взорвется нафиг если им внезапно перестать управлять).
Цитата
Ну и конечно бороться программными методами с аппаратными проблемами совершенно бесполезно.

с проблемами нужно бороться на всех уровнях
Рано или поздно найдется такая помеха которая пролезет через самые эффективные фильтры и уложит вашу систему. Как назло это случится в самый неподходящий момент. Поэтому пытаться выжить надо до конца, а не как в усб: единичный сбой->прекращение обмена
Go to the top of the page
 
+Quote Post



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

 


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


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