Перейти к содержанию
    

SD Card - програмная реализация интерфейса

У меня тоже софтверно сделано, это я просил Вас в ветке для начинающих выложить исходники). Сейчас сижу играюсь с задержками...Если ничего не выйдет, придется отказаться от использования силикона, хотя на складе партия лежит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа, не осилю всей темы.

Скажите есть у кого-нибудь проект реализации FAT16 на SD карте для AT91SAM7 для KEIL?

ВОспользовавшись поиском я нашел много чего, но либо без реализации FAT, либо под другой камень, либо под другую среду программирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ , а кому-нибудь попадались карты, у которых SPI интерфейс не реализован или реализован криво? Есть девайс, работает с большинством карт по SPI, появилась партия карт miniSD no_name, в ридере на ПК проблем нету, в устройствах которые работают по SPI - не видится, даже не проходит процедура стандартной инициализации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ , а кому-нибудь попадались карты, у которых SPI интерфейс не реализован или реализован криво? Есть девайс, работает с большинством карт по SPI, появилась партия карт miniSD no_name, в ридере на ПК проблем нету, в устройствах которые работают по SPI - не видится, даже не проходит процедура стандартной инициализации.

Может, это SDHC?

Карты SDHC не совместимы с карт-ридерами и прочими устройствами, изначально рассчитанными только на SD-карты. А вот устройства, способные работать с SDHC-картами, поддерживают также и SD-карты. Ключевым нововведением для SDHC-карт, позволившим им превзойти объем в 4Гб, стало введение посекторной адресации (аналогично жёстким дискам), в то время как обычные SD-карты имеют побайтную адресацию (как оперативная память) и, соответственно, при 32-х разрядном адресе могут иметь объем не более 4Гб.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В свое время тоже намучился с CRC.

Выбирая между табличным и вычислителным методами пришел к компромиссу.

Как мне кажется оптимальным будет вычисление таблицы в ОЗУ и дальнейшая работа с ней.

Недавно ковырялся с полями Галуа характеристики 2^m - полиномиальная арифметика, набрел на оптимальный алгоритм редукции на малочлен, подумалось почему бы не применить его и для CRC. В программной реализации для SD/MMC получилось две симпатичные функции, никаких циклов и таблиц:

//________________________________________________________________
//
// Обновляет контрольную сумму CRC-7 - x^7 + x^3 + 1 
// Быстрый нетабличный вариант потетрадного вычисления
//
HAL_INLINE_FORCED
DWORD 
io_mmc_crc7(
DWORD data, 
DWORD crc)
{
DWORD tmp;

tmp = (crc ^ (data >> 1)) >> 3;
crc = (crc << 4) | tmp;
crc = crc ^ (tmp << 3);

tmp = ((crc >> 3) ^ data) & 0x0F;
crc = (crc << 4) | tmp;
crc = crc ^ (tmp << 3);
crc &= 0x7F;

return crc;
}

//________________________________________________________________
//
// Обновляет контрольную сумму CRC-16 - x^16 + x^12 + x^5 + 1 
// Быстрый нетабличный вариант потетрадного вычисления
//
HAL_INLINE_FORCED
DWORD 
io_mmc_crc16(
DWORD data, 
DWORD crc)
{
DWORD tmp;

tmp = ((crc ^ (data << 8)) >> 12);
crc = (crc << 4) | tmp;
crc = crc ^ (tmp << 5);
crc = crc ^ (tmp << 12);

tmp = ((crc >> 12) ^ data) & 0x0F;
crc = (crc << 4) | tmp;
crc = crc ^ (tmp << 5);
crc = crc ^ (tmp << 12);

return crc & 0xFFFF;
}

Все проверено на практике - работает :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может, это SDHC?

Нет, не SDHC. Да и в 2-х из 3-х девайсов SDHC поддерживается.

Нашёл такое "Some MicroSD cards do not support SPI mode. " http://en.wikipedia.org/wiki/Secure_Digital

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл такое "Some MicroSD cards do not support SPI mode. " http://en.wikipedia.org/wiki/Secure_Digital

 

Похоже вообще беспредел на счёт SPI в SD:

"So far I have only found the cards supplied by Adata do not support SPI and so they will not work if that is the method you are using. "

http://www.microchip.com/forums/m349724-print.aspx

"The SPI support is an option and may be dropped by some manufacturers. "

http://forums.freescale.com/t5/68K-ColdFir...Card/td-p/54401

"So many manufacturers have removed the serial mode completely."

http://e2e.ti.com/support/microcontrollers...66/t/49553.aspx

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот поэтому перед тем, как закупать в наши девайсы в большом кол-ве microSD, мы потратились на 10-ок различных, оценили глючность/быстродействие/совместимость, где надо немного подрихтовали код и только потом делали закупку. На хорошем счету - Toshiba, Transcend. Kingston - ещё та девица, у кого хочет, у тех и покупает память, маркируя под себя. В итоге - от партии к партии может значительно отличаться скорость и наличие "камушков".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот поэтому перед тем, как закупать в наши девайсы в большом кол-ве microSD, мы потратились на 10-ок различных, оценили глючность/быстродействие/совместимость, где надо немного подрихтовали код и только потом делали закупку. На хорошем счету - Toshiba, Transcend. Kingston - ещё та девица, у кого хочет, у тех и покупает память, маркируя под себя. В итоге - от партии к партии может значительно отличаться скорость и наличие "камушков".

 

Мой опыт показывает что даже надписям на карте нельзя верить - что хотят то и пишут китайцы. А среди этого десятка были карты, которые вообще отказались работать по SPI?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой опыт показывает что даже надписям на карте нельзя верить - что хотят то и пишут китайцы. А среди этого десятка были карты, которые вообще отказались работать по SPI?

Нет, не было. А мы не надписям на карте верили. Считывали CID, CSD, проверяли по ним. Перед закупкой осведомлялись о наличии той же партиии у поставщика. Поставщик надёжный. Для отрекомендованных выше производителей никаких разбросов в пределах партии нет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ, аццы, подскажите плиз в этой теме, чтобы новую не заводить!

 

Я так понимаю в этой ветке в основном народ пользует SD карту в SPI режиме, в котором потребление карты не такое большое...

Пользую AT91SAM3U4. Пользую тамошний "High Speed Multimedia Card Interface", который о шести ногах: "CLK, CMD, DAT0, DAT1, DAT2, DAT3". Обратно пользую атмеловский пример работы с карточкой sdmmc_mci.c/sdmmc_mci.h, который идет в поставке с иаром. Вопрос в потреблении. После инициализации и чтении либо записи данных девайс начинает жрать на 20-30 мА больше, что собственно неприемлимо. Если "выключить" карточку командой Cmd12, то повышеное потребление прекращается. Но при этом для дальнейшей работы с карточкой необходимо заново её инициализировать. Выключение + инициализация в сумме занимают приличное время (по ощущениям на глаз). Есть какойто другой, быстрый способ снизить потребление SD карты кроме как командой Cmd12?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу поделиться своими результатами при работе с модулем TE-STM32F103 (красная). Мне нужно было запустить microSD через SDIO. Использую Keil v.4, файлы из библиотеки ST. При инициализации карты получила SD_INVALID_VOLTRANGE. Замерила U - оказалось на карту идет 1,8В! Это все транзистор Q3 оказался! Посадила PB0 на "0" - на карту пошло 3,3В.Это то что нужно). Потом пыталась прикрутить FATFS - но тут что-то не получилось...видела ошибку FR_NO_FILESYSTEM. Не без помощи добрых людей(Спасибо огромное Ивану Кузнецову!) в итоге Fatfs был укращен ))). Если кому нужно, могу поделиться проектом. http://narod.ru/disk/39273363001/microSD_FatFS.rar.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу поделиться своими результатами при работе с модулем TE-STM32F103 (красная). Мне нужно было запустить microSD через SDIO.

Спасибо за пример, для меня очень кстати. Мне тоже нужен microSD через SDIO для STM32F103VCT6. Осваивать SD карту, я начал по тому же принципу по которому "ищут не там где потерял, а там где светлее", т.е. через SPI, уж очень много по этой теме информации. А вот с SDIO маловато. :rolleyes:

В моем приложении требуется по возможности избегать прерываний (по крайней мере не трогать Systick), в вашем проекте disk_timerproc задушен, а SDIO обробатывается по прерыванию, интересно, можно ли SDIO сделать полингом?

А кто-нибудь пробывал делать стейт-машины для SD карт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть какойто другой, быстрый способ снизить потребление SD карты кроме как командой Cmd12?

CMD12, если мне не изменяет память, это STOP_TRANSMISSION. После нее не надо делать никакую инициализацию.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...