Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Может ли конфликтовать microSD с AT45?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Altemir
Доброго времени суток.

На одной шине SPI LPC2214 сидят microSD и AT45DB161D. Выбор, с кем работать процу идёт через CS.
Есть тестовый алгоритм:
1. После вкл. питания инициализируется проц и периферия, выставляется CS на microSD (не нужна в работе)
2. Начинается запись файла ~80КБ в AT45 командой "Buffer 1 to Main Memory Page Program with Built-in Erase" - 83H
3. По окончании записи считывается содержимое записанной страницы и проверяется с тем, что отдавали на запись. Команда чтения: "Continuous Array Read (Low Frequency)" - 03H

Замечено, что при установке microSD Kingston 2GB в ~10% страниц запись прошла неудачно (даже при повторной попытке записи в те же страницы требуемых данных): в считанных данных, например, байт 0x0A превратился в 0x1A, на странице из 512Байт повреждено 1-2 байта. Если microSD извлечь, то запись/проверка проходят успешно. Если установить флэшки Samsung, Transcend, Toshiba, то сбойных записей или нет вообще, или из 156 страниц не будет записана с первой попытки только одна. Почему так происходит? По стандарту после подачи питания SD должна находиться в состоянии Idle:
Цитата
After power up (including hot insertion, i.e. inserting a card when the bus is operating) the SD Card enters the idle state


Если во время записи вставлять/вынимать флэхи Samsung, Transcend, Toshiba, то это не вызывает сбоев. Если Kingston, то валятся страницы с ошибками. В чём может быть дело?

Код взаимодействия с AT45 полностью рабочий, неоднократно использовался в других проектах. Частота клока ~7.37МГц. Неиспользуемые выводы microSD DAT1 и DAT2 подтянуты к +3,3В через 51К. Все остальные сигнальные тоже. Питание чистое.
Да, если ранее записанный в AT45 файл попытаться считать при вставленной Kingston, то файл считывается корректно, CRC на страницах правильное.
aaarrr
Как подключена SD - напрямую к SPI? Осциллографом не пробовали найти изъяны в сигналах при вставленной "проблемной" карте?

В своих устройствах всегда буфер ставлю на SD, дабы избежать подобных сюрпризов.
AHTOXA
Не встречался с такой проблемой.
А если карточку проинициализировать после всовывания, эффект остаётся?
Ну и как вариант ленточек для бубна - после каждого деселекта датафлешки производить сброс SPI (10 раз отправить 0xFF).
Altemir
Цитата(aaarrr @ Aug 6 2009, 00:00) *
Какая подключена SD - напрямую к SPI?

Не понял вопроса. Kingston. Напрямую, без буферов.

Цитата
Осциллографом не пробовали найти изъяны в сигналах при вставленной "проблемной" карте?

Пока нет, времени было мало. Посмотрю завтра. Но найти бьющийся бит в потоке из 80КБ - непростая задача. Если только там совсем чего аномального не творится.

Цитата
В своих устройствах всегда буфер ставлю на SD, дабы избежать подобных сюрпризов.

Честно говоря, доверился напарнику, который "поднимал" свою часть проекта и прогал для microSD, а он никаких проблем не заметил. Вылезло уже на заключительном этапе. Впредь буду умнее. А вы ключи на питание SD вешаете для аппаратного сброса флэхи?

Цитата(AHTOXA)
А если карточку проинициализировать после всовывания, эффект остаётся?

Тоже пока не пробовал в связи со спешкой поиска проблемы, но думал об этом.

Цитата
Ну и как вариант ленточек для бубна - после каждого деселекта датафлешки производить сброс SPI (10 раз отправить 0xFF)

Делал почти так, но только после инициализации периферии. Посмотрю, может поможет. Имеется ввиду release SD?
aaarrr
Цитата(Altemir @ Aug 6 2009, 00:14) *
Не понял вопроса. Kingston. Напрямую, без буферов.

Опечатался, да. Об этом и спрашивал.

Цитата(Altemir @ Aug 6 2009, 00:14) *
Пока нет, времени было мало. Посмотрю завтра. Но найти бьющийся бит в потоке из 80КБ - непростая задача. Если только там совсем чего аномального не творится.

Ну, об одном бите речи не идет, просто сравнить картинки - может, какой криминал и засветится.

Цитата(Altemir @ Aug 6 2009, 00:14) *
Честно говоря, доверился напарнику, который "поднимал" свою часть проекта и прогал для microSD, а он никаких проблем не заметил. Вылезло уже на заключительном этапе. Впредь буду умнее. А вы ключи на питание SD вешаете для аппаратного сброса флэхи?

У себя ставлю ключ на питание + LCX125 в качестве буфера. Ключ и выходные буферы управляются единым сигналом разрешения, входной буфер MISO - сигналом CS на карту. Pull-up'ы, естественно, подключены к питанию карты после ключа. Получается компактно и удобно.
etoja
Между выводами питания и земли разъёма microSD установите керамический конденсатор 1uF и электролитический конденсатор 100uF.
Естественно, как можно ближе к microSD.

Рядом с атмеловской микросхемой тоже неплохо бы.

Как говорил классик - "всё у нас получится, Феликс Эдмундович".
Altemir
Цитата(etoja @ Aug 6 2009, 09:38) *
Между выводами питания и земли разъёма microSD установите керамический конденсатор 1uF и электролитический конденсатор 100uF.
Естественно, как можно ближе к microSD.

Рядом с атмеловской микросхемой тоже неплохо бы.

Как говорил классик - "всё у нас получится, Феликс Эдмундович".

Обижаете.... Тут всё сделано по-уму: от основного питания microSD отвязана через дроссель на 10мкГн, почти на пинах разъёма стоят три керамики (две по 10мкФ*6,3В и одна на 0,1мкФ). Могу кинуть скриншот с осцилла, что происходит на этих емкостях в самый гнусный момент вставки флэхи в разъём smile.gif Возле AT45-ой 0,1мкФ, в 1,5см от неё стоит тантал на 220мкФ

Всем спасибо за советы. Особенно aaarrr за подтверждение использования буферов/ключей и AHTOXA, что в правильном направлении думал smile.gif

Проблема была в этом:
У SanDisk
Цитата
The SD Card wakes up in the SD Bus mode. It will enter SPI mode if the CS signal is asserted (negative) during the
reception of the reset command (CMD0). If the card recognizes that the SD Bus mode is required it will not respond
to the command and remain in the SD Bus mode. If SPI mode is required, the card will switch to SPI mode and
respond with the SPI mode R1 response.
The only way to return to the SD Bus mode is by power cycling the card. In SPI mode, the SD Card protocol state
machine is not observed. All the SD Card commands supported in SPI mode are always available.

У Toshiba:
Цитата
2) Select operation mode (SD mode or SPI mode)
In case of SPI mode operation, host should drive 1 pin (CD/DAT3) of SD Card I/F to “Low” level. Then, issue CMD0.
In case of SD mode operation, host should drive or detect 1 pin of SD Card I/F (Pull up register of 1 pin is pull
up to “High” normally).
Card maintain selected operation mode except re-issue of CMD0 or power on below is SD mode initialization procedure.

Т.е. после подачи питания на microSD она входила в режим SD при единице на CS и, видимо, когда шёл обмен с AT45 microSD получала в определённый момент какую-то команду, затем пыталась ответить на неё. Как результат - битые данные, которые записывались в AT45.
Решил проблему путём Dummy cycles и CMD0 перед стартом работы с AT45. Так же, если происходил сбой записи страницы (такое теперь происходит, если флэху в момент записи AT45 выдернуть/вставить), снова делаю SD_Reset тем же образом.
Ivan Kuznetzov
у меня была подобная проблема, на общей шине сейчас висят VS1053, AT45DB041, SD-карта
К примеру плеер воспроизводит MP3 запись с ATA HDD диска, при вталкивании карты начиналось "бульканье звука"
поскольку юзаю FatFs, проблему решил так:
1) В прерывании настраиваю опрос датчика всунутой карты (такие ножки сбоку панельки)
2) Если карта вставлена, то вызываю процедуру инициализации карты disk_initialize(0), по удачному исходу процедуры, выставляю флаг.
3) Если ножки замкнуты, а карта не инициализируется, то через каждые 2 секунды процедура disk_initialize(0) повторяется 5 раз.

P.S.
Кстати, программирование датафлеши с карты у меня всегда проходит нормально, сверку содержимого не делаю...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.