Полная версия этой страницы:
Снова SD/MMC
InvisibleFed
Apr 17 2008, 10:15
Подключаю карту SD к AVR. Вот вроде все, пишет, читает, регистры читает и все такое. Но вот возникли вопросы.
1. Правельно ли утверждение, что я могу писать в блок/сектор сколько угодно раз без стирания?
2. Если да, то нафига стирание (т. е. зачем сама операция)?
3. Как происходит адресация? Т. е. например в блоке/секторе 512 байт. Если я записываю 512 байт по адресу 0x00000001, то следующие 512 байт "начнуться" с адреса 0x00000001 + 0x00000200 (512) = 0x00000201 (513)?
4. Из регистра CSD судя по SDProdManual для карточек SanDisk можно вытащить информацию обо все параметрах-размерах (размер сектора/блока, их число, число байт => вычислить весь объем карточки). Справедливо ли это для карт прочих производителей? Как узнать объем вставленной карточки?
5. Часть секторов/блоков именуются как write protected. Как узнать об их распределении по адресному пространству карточки, где они расположены? Т. е. я, к примеру, пишу блок/сектор, а потом оказывается что туда нельзя писать, т. к. он защищен.
P. S. "блок/сектор" - единица информации, обычно в 512 байт. По непонятным причинам, как я понял, эти совершенно разные понятия конфликтуют в доках на карты SD (блок) и MMC (сектор).
InvisibleFed
Apr 18 2008, 05:12
Неужели никто не может помочь? Наверняка кто-нить разобрался как следует...
yarunt
Apr 18 2008, 05:56
Цитата(InvisibleFed @ Apr 18 2008, 08:12)

Неужели никто не может помочь? Наверняка кто-нить разобрался как следует...
Ну,практически сами ответили на свои вопросы. На карточке действительно работа посекторная(блочная) и вычисления так и происходят Nсект*512. В бут секторе есть информация про количество секторов в кластере. Размер кластера увеличивается в прогрессии с обьемом карточки.
В пример
32мб 1сектор в кластере,
64мб 2 сектора в ластере
..........................
2гб 64сектора в кластере
InvisibleFed
Apr 18 2008, 12:36
Если Вы давали ответ на 3-й вопрос, то я немного про другое спрашивал... ли не понял ответа. Есть у меня 32 разряда адреса (4 байта из 6-и в команде). Что в тих 32 битах есть что? Т. е. "географически" куда укажет адрес 0x00000001, а куда 0x00000002? Сколько между ними пространства, если иначе. И что такое бут-сектор? Я фат не пользуюсь. Ну и остальные вопросы тоже пока без ответов...
aaarrr
Apr 18 2008, 12:41
Цитата(InvisibleFed @ Apr 17 2008, 14:15)

1. Правельно ли утверждение, что я могу писать в блок/сектор сколько угодно раз без стирания?
Да.
Цитата(InvisibleFed @ Apr 17 2008, 14:15)

2. Если да, то нафига стирание (т. е. зачем сама операция)?
Для ускорения записи.
Цитата(InvisibleFed @ Apr 17 2008, 14:15)

3. Как происходит адресация? Т. е. например в блоке/секторе 512 байт. Если я записываю 512 байт по адресу 0x00000001, то следующие 512 байт "начнуться" с адреса 0x00000001 + 0x00000200 (512) = 0x00000201 (513)?
512 байт по адресу 0x01 никто записать не позволит. Адреса в байтах, но работать можно только блоками по 512 байт.
Цитата(InvisibleFed @ Apr 17 2008, 14:15)

4. Из регистра CSD судя по SDProdManual для карточек SanDisk можно вытащить информацию обо все параметрах-размерах (размер сектора/блока, их число, число байт => вычислить весь объем карточки). Справедливо ли это для карт прочих производителей? Как узнать объем вставленной карточки?
CSD одинаков для всех.
galjoen
Apr 18 2008, 13:35
Цитата(InvisibleFed @ Apr 17 2008, 14:15)

5. Часть секторов/блоков именуются как write protected. Как узнать об их распределении по адресному пространству карточки, где они расположены? Т. е. я, к примеру, пишу блок/сектор, а потом оказывается что туда нельзя писать, т. к. он защищен.
Т.е. это сбойные секторы?
Я вот подумываю о том, чтоб SD/MMC карточку в качестве таблицы использовать. Т.е. только для чтения. По рассчётам получается, что мне 4 гБайта таблица нужна. И время доступа ограниченное. Если бы сбойных секторов не было, то SD/MMC хорошо подходила бы. По адресу читаешь блок и всё. А так придётся за 2 раза это делать. Сначала таблицу соответствия физических секторов логическим (аналог FAT), а затем уже сами данные.
Или я тут бред полный написал? Я работал с AT45DB642D, так у неё сбойных блоков в принципе не было.
aaarrr
Apr 18 2008, 13:41
Цитата(galjoen @ Apr 18 2008, 17:35)

Или я тут бред полный написал? Я работал с AT45DB642D, так у неё сбойных блоков в принципе не было.
Сбойные сектора у SD обрабатываются и маскируются встроенным в карту контроллером.
У AT45 это надо делать руками, Atmel гарантирует только то, что у свежих кристаллов их нет, но это не значит, что они не могут появиться в процессе работы.
galjoen
Apr 18 2008, 14:01
Цитата(aaarrr @ Apr 18 2008, 17:41)

Сбойные сектора у SD обрабатываются и маскируются встроенным в карту контроллером.
Т.е. можно читать не задумываясь о сбойных блоках. И 4 гБайта это размер уже после отбрасывания сбойных блоков? А что такое write protected блоки? Это действительно защищённые от записи? И защита программно не снимается?
Цитата(aaarrr @ Apr 18 2008, 17:41)

У AT45 это надо делать руками, Atmel гарантирует только то, что у свежих кристаллов их нет, но это не значит, что они не могут появиться в процессе работы.
Атмел гарантирует, что сбойные блоки не появятся до 100000 перезаписей. Но для этого после 10000 перезаписей в одной странице надо перезаписать те блоки, которые не перезаписывались за эти 10000 раз. Иначе информация в них повреждена м.б. Для этого и команда специальная есть.
aaarrr
Apr 18 2008, 14:11
Цитата(galjoen @ Apr 18 2008, 18:01)

Т.е. можно читать не задумываясь о сбойных блоках. И 4 гБайта это размер уже после отбрасывания сбойных блоков? А что такое write protected блоки? Это действительно защищённые от записи? И защита программно не снимается?
Ровно 4ГБайта Вам никто не обещает. Реальный объем, конечно, будет заметно меньше.
Write protected блоки устанавливаются и снимаются программно.
Цитата(galjoen @ Apr 18 2008, 18:01)

Атмел гарантирует, что сбойные блоки не появятся до 100000 перезаписей. Но для этого после 10000 перезаписей в одной странице надо перезаписать те блоки, которые не перезаписывались за эти 10000 раз. Иначе информация в них повреждена м.б. Для этого и команда специальная есть.
Гарантии Atmel'а - дело крайне темное. Когда-то число циклов стирания/записи не упоминалось вообще, потом были цифры 10K, 50K...
galjoen
Apr 18 2008, 14:47
Цитата(aaarrr @ Apr 18 2008, 18:11)

Ровно 4ГБайта Вам никто не обещает. Реальный объем, конечно, будет заметно меньше.
Понял. Придётся брать 8ГБайт SD.
Цитата(aaarrr @ Apr 18 2008, 18:11)

Гарантии Atmel'а - дело крайне темное. Когда-то число циклов стирания/записи не упоминалось вообще, потом были цифры 10K, 50K...
В своё время проверил на 2х AT45DB642D. Пол-года непрерывной циклической записи выдержали. Они пишутся медленнее чем Атмел в своих pdf обещает. Не более 80 кБайт (блоков) в секунду (у AD45DB642D блок = 1 кБайт = 1056 байт если точно). За пол-года наверное 120000 записей набралось, но точно более 100000.
Потом уже сделал счётчик кол-ва записей в блок. Если блок сдохнет можно будет максимальный по всей FLASH узнать. Но пока ещё ни одна не сдохла - заказчики молчат.
А вообще 'aaarrr' большое спасибо за ответы. За счёт таблицы в SD - задача, которая раньше сложной казалась, теперь - детский сад.
InvisibleFed
Apr 18 2008, 22:50
Цитата
512 байт по адресу 0x01 никто записать не позволит. Адреса в байтах, но работать можно только блоками по 512 байт.
Возвращаясь к своему примеру: Если я записываю 512 байт по адресу 0x00000000, то следующие 512 байт "начнуться" с адреса 0x00000000 + 0x00000200 (512) = 0x00000200 (512)? Верно? Странно то, что в адрес 0x00000000 я ничего записать не смог, а вот в 0x00000001 с легкостью. Хотя надо проверить код...
Цитата
Write protected блоки устанавливаются и снимаются программно.
Значит, не на все блоки я могу установить защиту от записи (WP_SET)? Потому как число этих блоков ГОРАЗДО меньше общего числа блоков. Или что-то я не догоняю? И тогда как все-таки они распределены по адресному пространству?
SALOME
Apr 21 2008, 08:33
Цитата(InvisibleFed @ Apr 19 2008, 05:50)

Возвращаясь к своему примеру: Если я записываю 512 байт по адресу 0x00000000, то следующие 512 байт "начнуться" с адреса 0x00000000 + 0x00000200 (512) = 0x00000200 (512)? Верно? Странно то, что в адрес 0x00000000 я ничего записать не смог, а вот в 0x00000001 с легкостью. Хотя надо проверить код...
Адрес следующего бока Вы расчитали верно. Однако, если длина блока 512байт (по умолчанию) то в адрес 0x00000001 запись не идет. Я специально попробовала на своей флэшке. Одрес записи должен начинаться кратно блокам, т.е.0x00000000, 0x00000200, 0x00000400 и т.д. Так ште скорее всего у Вас ошибка в формировании адреса в проге

.
InvisibleFed
Apr 21 2008, 12:25
Спасибо за помощь. Ошибка действительно была в моей проге.
P. S. SALOME, если это конечно не "сценический образ",

- очень редко встретишь девушку в нашей области, да еще и...
Цитата
Я специально попробовала на своей флэшке.
wwweider
Apr 22 2008, 04:04
я нашел программку на си для кодевижена которой от меня требуется только номер сектора и массив из 512 данных.
теперь вопрос как мне узнать диапазон секторов для любой вставленной флешки с которыми можно работать?
jorikdima
Apr 22 2008, 06:12
прочитать документацию
wwweider
Apr 22 2008, 08:07
какую?
InvisibleFed
Apr 22 2008, 09:32
Например эту. Обратите снимание на регистр CSD и данные в нем.
SALOME
Apr 22 2008, 11:00
Цитата(wwweider @ Apr 22 2008, 11:04)

я нашел программку на си для кодевижена которой от меня требуется только номер сектора и массив из 512 данных.
теперь вопрос как мне узнать диапазон секторов для любой вставленной флешки с которыми можно работать?
Ну обычно в секторе размещается 512 байт. Поделите объем флэшки (написано на самой карте) на 512 и получите количество секторов.
zltigo
Apr 22 2008, 11:12
Цитата(SALOME @ Apr 22 2008, 13:00)

Поделите объем флэшки (написано на самой карте) на 512 и получите количество секторов.
Да уж

. Вся информация выдается самой флешкой, размер сектора можно задать в случае необходимости. Для этого просто следует ознакомиться с системой команд (CMD9 Get CSD). То, что написано на флешке к реальности отношения не имеет, да и читать этикетки прграммно сложно

.
SALOME
Apr 23 2008, 02:13
Цитата(zltigo @ Apr 22 2008, 18:12)

Да уж

. Вся информация выдается самой флешкой, размер сектора можно задать в случае необходимости. Для этого просто следует ознакомиться с системой команд (CMD9 Get CSD). То, что написано на флешке к реальности отношения не имеет, да и читать этикетки прграммно сложно

.
Вы все правильно говорите. Вся информация находится в самой флэшке. Но судя по всему у аффтора проблемы с доступом в регистр CSD, на который уже не однократно указывалось:
"я нашел программку на си для кодевижена которой от меня требуется только номер сектора и массив из 512 данных". Боюсь, что здесь не тот уровень, на котором можно получить доступ к регистру CSD найти где в нем храниться информация о размере карты и сделать правильный расчет. Хорошо бы в этой "программке си" найти процедуру определения размера карты. Это был бы лучший вариант.
А по поводу несоответствия надписи на флэшке: Вы имеете ввиду тот факт, что 1Кбайт=1024байт? или еще что-то?
zltigo
Apr 23 2008, 05:42
Цитата(SALOME @ Apr 23 2008, 04:13)

.. по поводу несоответствия надписи на флэшке: Вы имеете ввиду тот факт, что 1Кбайт=1024байт? или еще что-то?
Разумеется нет. Вот, например, гигабайтовая флешка:
Код
mount
Card:SDC[22] Size:995.656MB/512 F:25MHz(14745600) WP:[Off]
stat
FAT32. Number of FATs: 2. Bytes per Cluster: 16384
Root entries : 512. Sectors per FAT: 243
Total Clusters: 62184. Free: 52927
FAT start (LBA) : 250
DIR start (LBA, Cluster): 736
DATA start (LBA) : 768
Флешка там конечно внутри стоит гигабайтовая, но часть ее используется под служебные цели и под запас для замены битых блоков. Посему размер спрашивать только у самой флешки.
SALOME
Apr 23 2008, 05:56
Цитата(zltigo @ Apr 23 2008, 12:42)

Флешка там конечно внутри стоит гигабайтовая, но часть ее используется под служебные цели и под запас для замены битых блоков. Посему размер спрашивать только у самой флешки.
Я правильно понимаю, что с ростом количества битых блоков будет уменьшаться размер памяти, выдаваемый регистром CSD?
wwweider
Apr 24 2008, 05:27
спасибо уже становиться понятнее, мне кажется в этой программке должна быть функция какаято возвращающая каое какую инфу о флешке надо порыться)
SALOME
Apr 24 2008, 05:41
Цитата(zltigo @ Apr 23 2008, 12:42)

Флешка там конечно внутри стоит гигабайтовая, но часть ее используется под служебные цели и под запас для замены битых блоков.
И еще такой вопрос. Если флэшка отформатирована под FAT, то по логике вещей при многократной перезаписи должны появляться битые секторы. Windows это как то отслеживает? Или битые секторы выявляются только при форматировании? Или как?
wwweider
Apr 24 2008, 05:49
это всё определяет контроллер на борту самой флешки нам я так поня из мануала нестоит об этом переживать)
почему я немогу файл выложить небольшой текстовый сюда?
zltigo
Apr 24 2008, 05:53
Цитата(SALOME @ Apr 23 2008, 07:56)

Я правильно понимаю, что с ростом количества битых блоков будет уменьшаться размер памяти, выдаваемый регистром CSD?
Нет. Просто пополнятся из резерва. После исчерпания резерва, битые сектора полезут наружу и будут уже маркироваться, как битые на файловой системе.
SALOME
Apr 24 2008, 08:57
Цитата(zltigo @ Apr 24 2008, 12:53)

Нет. Просто пополнятся из резерва. После исчерпания резерва, битые сектора полезут наружу и будут уже маркироваться, как битые на файловой системе.
Спасибо за информацию.
galjoen
Apr 24 2008, 11:35
Цитата(zltigo @ Apr 24 2008, 09:53)

Нет. Просто пополнятся из резерва. После исчерпания резерва, битые сектора полезут наружу и будут уже маркироваться, как битые на файловой системе.
Что-то я не понял, что в CSD есть сведения о файловой системе на этой флешке? Это ведь ОС будет если захочет/сможет их маркировать как битые?
В своё время я пробовал при записи в свой самодельный MassStorage возвращать Sense Key=3, ASC=3, ASCQ=0 (WRITE FAULT) - Win зацикливалась на записи. Хотя м.б. это у меня какой-то другой глюк был. Или ОС как-то подругому узнаёт, что сектор битый?
aaarrr
Apr 24 2008, 12:25
Цитата(galjoen @ Apr 24 2008, 15:35)

Что-то я не понял, что в CSD есть сведения о файловой системе на этой флешке? Это ведь ОС будет если захочет/сможет их маркировать как битые?
Сначала маскировать будет сама карта, система об этом и не узнает.
galjoen
Apr 24 2008, 13:05
Цитата(aaarrr @ Apr 24 2008, 16:25)

Сначала маскировать будет сама карта, система об этом и не узнает.
Ну это понятно. А когда запас секторов кончится?
Я столкнулся с такой ситуацией: имеется совершенно новая флешка, она есс-но не отформатирована, и при чтении всех секторов в т.ч. 0го у неё есс-но ошибка CRC. Я и выдавал эту ошибку (Sense Key=3, ASC=0x10, ASCQ=0). Тогда Win зацикливалась на чтении 0го сектора, и отформатировать флешку я не мог. Получался замкнутый круг. Пришлось установить специальное условие - при чтении 0го сектора считать, что CRC верна. Мне показалось, что и при записи сектора в Win подобный глюк, т.к. при возврате ошибки Win зацикливается на записи в этот сектор. А такими командами, как Write and Verifu, Win вообще не пользуется. В каком-же случае Win помечает сектор как битый?
InvisibleFed
May 4 2008, 05:22
Идем дальше, как говорится... Имею на руках две флешки: SanDisk TransFlash через переходник 32 мб и Kingston 1гб (SD, естественно). При записи на флешь наблюдаю странную картину. После подачи пары CRC-байт в конце посылки сектора (шлю FF, т. к. CRC не использую), шлю холостые байты в ожидании Data Response (в случае успешной записи должно быть XXX00101). Так вот SanDisk такое выдает, а Kingston - нет. Последняя вообще ничего не выдает вслед за парой CRC - один лишь вечный '0'. Хотя в обоих случаях фактическая запись происходит (потом считывал). В случае с Kingston, правда, не понятно пока с какого раза - там в программе в случае неполучения правильного Data Response производится повторная запись с самого начала команды (и так 4 раза). В чем может быть причина?
И еще вопрос. Для SanDisk после того как карта вернула XXX00101, заряжаю "пустышки" (байты с FF), пока не получу в ответ что-нибудь отличное от нуля (карта висит в Busy, как я понимаю). Так вот это время ну уж очень болшое! Команду и 512 байт информации выпуливаются у меня меньше чем за 500 мкс. А busy висит все 3000 мкс! Это ведь ненормально много?! Или я не прав?
AndreyS
May 15 2008, 20:51
Добрый день.
Не хотел создавать новую тему, так как эта показалась подходящей.
Вопрос в следующем.
При поиске имени файла в области каталогов, когда можно быть уверенным что дальше искать смысла нет. Имеется в виду, следующее. Есть гарантия что при обнаружении пустой записи ( например не все 32 байта обнулены, а только первый символ = 0) за ней не будет какой-нибудь еще валидной записи??? Просто когда флешка пустая (только форматнули), область каталогов занулена. И при поиске файла (на предмет похожего имени) на 8-битнике да 1 гиговой флешке (где секторов под корень отведено много), происходит долгий поиск. Вот думаю останавливать поиск при обнаружении в имени файла первого символа = 0. Правомерно ли это???
aaarrr
May 15 2008, 20:57
Цитата(AndreyS @ May 16 2008, 00:51)

Вот думаю останавливать поиск при обнаружении в имени файла первого символа = 0. Правомерно ли это???
Правомерно: по стандарту FAT, 0x00 в первом символе имени файла является признаком конца директории.
AndreyS
May 15 2008, 21:07
Цитата(aaarrr @ May 16 2008, 00:57)

Правомерно: по стандарту FAT, 0x00 в первом символе имени файла является признаком конца директории.
Огромное спасибо за ответ.
AndreyS
Sep 10 2008, 08:10
Добрый день.
Может быть я плохо искал по форуму или по документации на SD карты, но на свой вопрос ответа не нашел. Вернее что-то нашел. В частности у людей есть разброс во времени записи сектора от нескольких ms до сотен ms. В моем случае (мне необходимо при пропадании входного напряжения успеть скинуть свой промежуточный буфер в 512 байт на карту) карта за 20ms не успевает скинуть блок данных. Ток потребления и так на предельном минимуме, остается наращивать входную емкость. Вот и хочу понять какую минимально достаточную поставить (нехочу ставить банку в 1000uF

.
Сколько времени SD/MMC карты тратят максимально на запись блока в 512 байт???
Сколько минимально возможно времени тратят на запись???
В документации напоролся на фразу из которой я понял что на запись карта может потратить до 250mS времени. Ужасно много. Может есть более конкретные данные (то что я прочел оказалось где-то в середине документа, а не в таблице электрических и временных характеристик)?????
sergeeff
Sep 10 2008, 10:19
С посекторной записью в SD вопрос неприятный. Мне попадались карты, куда писались данные посекторно со скоростью 7 кбайт/с, хотя другие писали 80 кбайт/с.
AndreyS
Sep 10 2008, 10:54
Цитата(sergeeff @ Sep 10 2008, 14:19)

С посекторной записью в SD вопрос неприятный. Мне попадались карты, куда писались данные посекторно со скоростью 7 кбайт/с, хотя другие писали 80 кбайт/с.
Да, но это все же больше чем 2 ms на запись куска в 512 байт. Я столкнулся с тем, что за 2 ms карточка данные на флешь не сбросила, хотя и "всосала" их в себя.
Время работы всего процесса 4 ms. За 2 ms я все выплевываю в SD, и по осцилограмме вижу еще 2.4 ms до момента пропадания питания есть у карты. Но после прочтения данных, своего куска информации в файле не обнаруживаю. Затянул процесс до сотен ms. Данные в файле получил. Но банка болшая получилась.
Доброго дня.
Имею аналогичную проблему с MicroSD картой.
Начинаю писать на нее поток данных со скоростью примерно один сектор в 110 мс. Пишет корректно, однако один раз в 28 секунд (это я замерял, какое-то магическое числ небось) карточка держит сигнал BUSY слишком долго (до 80 мс), хотя в остальное время BUSY пропадает практически сразу после записи.
Вот уже несколько дней думаю о причинах такого поведения, но как-то ничего не придумывается. Может кто знает?
aaarrr
Sep 15 2008, 20:23
28/0.11 = 254.
Ну очень похоже на 256 - размер какого-нибудь блока флеш.
Цитата(aaarrr @ Sep 15 2008, 23:23)

28/0.11 = 254.
Ну очень похоже на 256 - размер какого-нибудь блока флеш.
Ну в таком случае это какой-то блок из 256 секторов - но я нигде не видел упоминание об этом.
И еще - я пишу непрерывно, начиная с 66 сектора в файле на карте, а этот 66 сектор файла смещен относительно начала карточки на 95 секторов. Получаем начало в 161 секторе от начала карточки.
Отладчикм посмотрел, что длительное ожидание происходит на 373 секторе файла, т.е. на 534 секторе от начала карточки. Но ведь это явно не блок, и явно не кратно 256.
Короче, полная загадка.
И еще интересный момент.
В вышеописанных условиях первый сбой происходит на 373 секторе, а вот следующий сбой - на 629, т.е. с интервалом 256 секторов!!!
Из любопытства уменьшил интервал записи секторов с 110 мс до 96. Получил первый сбой на 253 секторе (как-то не пропорционально с интервалом получилось), а вот следующий - на 509 - снова через 256 секторов!!!
Что за магическое число 256 секторов для SD карты и почему так происходит вообще?
jorikdima
Sep 16 2008, 09:25
У меня тоже проблемы с недетерменированностью времени записи

Пока так и не решил проблемму.
aaarrr
Sep 18 2008, 08:05
Цитата(М430 @ Sep 16 2008, 12:11)

Что за магическое число 256 секторов для SD карты и почему так происходит вообще?
На этой границе карта может выполнять стирание следующего блока, контроль целостности данных в только что записанном и т.п.
256 - магическое число только для данной конкретной карты. Контроллер SD-карты весьма сложная штука, ждать от него детерменированного времени записи нельзя, нужно буферизировать данные со своей стороны.
jorikdima
Sep 18 2008, 09:31
Цитата(aaarrr @ Sep 18 2008, 12:05)

На этой границе карта может выполнять стирание следующего блока, контроль целостности данных в только что записанном и т.п.
256 - магическое число только для данной конкретной карты. Контроллер SD-карты весьма сложная штука, ждать от него детерменированного времени записи нельзя, нужно буферизировать данные со своей стороны.
Я это безусловно и так делаю... вот только я никак не могу определить размер при котором все гарантироваано успеется записаться. Ну не мегабайт же мне выделять, при том, что я пишу пачками по 150 байт за раз и в 99% случаев он записать эти 150 байт успевает еще до того как новые 150 байт накопятся с АЦП. Весь вопрос в этом 1 % случаев... мегабайта конечно хватит, но я не готов в крохотном МСП430 выделять 1М памяти чтоб он простаивал попросту.
Здравствуйте.
Делаю поддержку флешек microSD на MSP430. Сначала использовал легкодоступный Sham176.zip. Все работало практически без глюков, но флешки более 512 МБ эта библиотека не видела, поэтому я решил портировать FatFs (не tiny). Взял diskio
отсюда, переделал, чтобы он работал на F1611 и получил кучу глюков, убив кучу времени. Один из них - карточка инициализируется строго через раз, или каждый раз, если ее вынуть-вставить. А сначала вообще инициализировалась когда хотела, обычно на 10 неудачных попыток была одна удачная. После чего она стала работать через раз - уже не помню. Конечно, можно всю инициализацию засунуть в цикл, но мне кажется, что это - "костыли".
Есть две флешки: PQI на 512 МБ и Kingston на 1 ГБ. Инициализируются обе в разных "ветках" (см. ниже). Компьютер и другие девайсы работают с ними без всяких проблем.
Спецификации читал, вроде у меня все правильно.
С чтением тоже проблемы: вместо сектора всегда получаю одни нули.
AndreyS
Oct 3 2008, 06:23
Цитата(LCD @ Oct 3 2008, 00:14)

Здравствуйте.
Делаю поддержку флешек microSD на MSP430.
--- кусь ---
Добрый день.
А вопрос то в чем???
Вы хотите чтобы в исходнике нашли ошибку???
Или дали бы вам свои исходники???
Да, чтобы помогли найти ошибку или дали исходники, которые точно работают, не обязательно свои.
Все-таки помог "костыль" в процедуре инициализации: я поставил в цикл дергание CS и сброс (CMD0). Но проблема с отсутствием данных при чтении осталась.
Все, разобрался, вопрос больше не актуален
Cyber_RAT
Oct 4 2008, 17:37
Рассказали бы другим... а то я вот собираюсь прикручивать MMC 1-2Gb - стоит ли идти по тем же граблям...
Я выложу diskio, когда доделаю его до конца, мне не жалко.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.