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

 
 
15 страниц V  « < 6 7 8 9 10 > »   
Reply to this topicStart new topic
> SD Card - програмная реализация интерфейса, У кого нибудь есть примеры реализации взаимодействия с SD Card?
zltigo
сообщение Nov 8 2008, 10:27
Сообщение #106


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(John Silver @ Nov 8 2008, 02:14) *

C этих фотографий и следовало начинать, а не морочить голову....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 8 2008, 13:32
Сообщение #107


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Укоротил провода.
Поставил задержку 20 мкс - не инициализирует.
Прикрепленное изображение


1. На 400 кГц - 10 см это не длина.
2. Задержка стоит после посылки каждых 8 бит, т.е. 8 бит проходят нормально, а потом вдруг длинные провода начинаю искажать сигнал?
3. Задержка на всех частотах одинаковая. Написал это и подумал, что надо сделать разные задержки для разных частот, может это даст пищу для размышлений.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 8 2008, 15:49
Сообщение #108


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Проверил.
Во время инициализации поставил задержку 40 мкс (уменьшать не пробовал).
После инициализации задержку поставил 0 мкс (т.е. только вызов Delay_mks(0)).

После перепайки картоприемника, при вставке SDv2, вешается дисплей, видимо много жрет и просаживает питание. Потом надо будет навешать кондеров.

Вощем уже можно нормально работать.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 8 2008, 16:04
Сообщение #109


Гуру
******

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



Цитата(John Silver @ Nov 8 2008, 16:32) *
1. На 400 кГц - 10 см это не длина.

Дело не в килогерцах, а в быстрых фронтах. Такой дизайн работать не должен вообще.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 8 2008, 23:29
Сообщение #110


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



ИМХО в данном случае дело не в проводах. Как сделаю целевую плату обязательно отпишусь.

Вы лучше скажите, многоуважаемые гуру, как происходит работа с картой в библиотеке FatFs.
Основной вопрос: как и как часто происходит перезапись FAT?
При каждой записи в файл, или при пересечении границ сегмента, или только при вызове f_sync (FIL*)?
Я чет пока немогу вкурить все эти FAT, MBR, PBR....

У меня задача логить ~100 байт в файл с интервалом в 10с. Возникает вопрос: долго карта выдержит?
Go to the top of the page
 
+Quote Post
Wano
сообщение Nov 9 2008, 16:22
Сообщение #111


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Цитата(John Silver @ Nov 9 2008, 01:29) *
У меня задача логить ~100 байт в файл с интервалом в 10с. Возникает вопрос: долго карта выдержит?



Друг в Минске работает на конторе, пишут нижний уровень для контроллеров карточек SD. Говорит, там имеются алгоритмы слежения за числом обращений к секторам. Миллион циклов перезаписи вполне может быть и не пределом.По этому поводу хочу спросить про такую идею:
Если заранее создать файл n-ого размера и заполнить его нулями. Значит FAT таблица будет создана и при последующей записи в этот файл она меняться не будет. Выходит это 100% защита от повреждения FAT таблиц при пропадания питания . Также это уменьшение обращений к таблицам, что экономит ресурс. Или чего-то не так smile.gif ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2008, 06:12
Сообщение #112


Гуру
******

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



Цитата(Wano @ Nov 9 2008, 19:22) *
Или чего-то не так smile.gif ?

Все почти так, только с таким файлом на PC не очень удобно работать, и 100% защиты от повреждения FAT при пропадании питания это, конечно, не дает.
Go to the top of the page
 
+Quote Post
LordVader
сообщение Nov 11 2008, 09:37
Сообщение #113


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418



Может кому будет полезно... Иногда бывают проблемы с инициализацией. ВРоде бы всё по даташитам, но конкретная карточка не инициализируется, хоть убей. Иногда помогает инициализация на низких скоростях, как в этом топике обсуждается.

Но есть методы борьбы без снижения скорости: один метод предложен и проверен тут: http://dlcorp.ucoz.ru/_fr/2/MMCSDCard.pdf (страница 5, сверху). Другой метод - настоить ваш SPI так, чтобы последний переданный бит оставался на выходе SPI MOSI после конца обмена. Тоже помогает, но может статься, что это невозможно в данном МК. Тогда первый метод из ПДФки прокатывает.

PS: оба эти метода проверил и применяю лично. Помогают.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 11 2008, 10:21
Сообщение #114


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Честно говоря меня этот код из даташита настораживает, никаких проверок Response, только b!=0xFF. Как то нехорошо...
В чем суть метода? Ловить 0xFF перед проверкой Response?
Хотя это не для меня, у меня вечный 0xFF в ответе.

Кстати по последнему разбору, у меня требуется задержка только для команды CMD0.
Чет у меня впечатление, что с питанием нехорошо, на выходных посмотрю.
Go to the top of the page
 
+Quote Post
LordVader
сообщение Nov 11 2008, 11:04
Сообщение #115


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418



Цитата(John Silver @ Nov 11 2008, 13:21) *
Честно говоря меня этот код из даташита настораживает, никаких проверок Response, только b!=0xFF. Как то нехорошо...
В чем суть метода? Ловить 0xFF перед проверкой Response?
Хотя это не для меня, у меня вечный 0xFF в ответе.

Кратко суть такова:
послать команду
поймать респонс как по даташиту
перед посылкой следующей команды слать ФФ, пока в ответ тоже не придёт ФФ

Цитата
Кстати по последнему разбору, у меня требуется задержка только для команды CMD0.
Чет у меня впечатление, что с питанием нехорошо, на выходных посмотрю.

Именно, проблема только при инициализации, насколько я помню,
Go to the top of the page
 
+Quote Post
Leopold111
сообщение Nov 11 2008, 17:13
Сообщение #116





Группа: Участник
Сообщений: 8
Регистрация: 23-01-08
Пользователь №: 34 363



Всем спасибо!!! Вопрос решил. Сделал внешнее питание (от USB) на lm317. Все пошло!!! Инициаллизируется CMD1. Все отвечает и принимает. Оказалось карточка отвечает и без питания. Чудо, но факт! Отрубаю питание и возвращаюсь в старое состояние. Так что смотрите питание.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 11 2008, 17:51
Сообщение #117


Гуру
******

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



Цитата(Leopold111 @ Nov 11 2008, 20:13) *
Оказалось карточка отвечает и без питания. Чудо, но факт! Отрубаю питание и возвращаюсь в старое состояние.

Совсем без питания она отвечать не может, естественно. Просто карта у Вас запитывается паразитным образом через линии интерфейса.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Dec 23 2008, 09:23
Сообщение #118


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Цитата(John Silver @ Nov 9 2008, 01:29) *
Как сделаю целевую плату обязательно отпишусь.


Таки сделал плату.
Теперь задержка понадобилась и в CMD16.

Задержка после каждых 8 бит
CMD0:
10 мкс - не проходит
20 мкс - не проходит
30 мкс - Ок
40 мкс - Ок
CMD16:
0 мкс - не проходит
10 мкс - не проходит
20 мкс - не проходит
30 мкс - Ок
40 мкс - Ок
Остальные команды:
0 мкс - Ок
07.gif
Go to the top of the page
 
+Quote Post
Hermes
сообщение Dec 24 2008, 20:20
Сообщение #119


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 17-11-08
Пользователь №: 41 692



Цитата(aaarrr @ Dec 28 2006, 19:50) *
А мои - бесплатными. cool.gif Новый год, все-таки. santa2.gif.
Вот оно - [attachment=8919:attachment]Пишите, если будут вопросы.

а можно и мне ? smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 24 2008, 21:16
Сообщение #120


Гуру
******

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



Цитата(Hermes @ Dec 24 2008, 23:20) *
а можно и мне ? smile.gif

Те исходники уже не откопаю, но могу предложить наиболее полезную часть, на которую так любят забивать в "бесплатных примерах" - подсчет CRC для команд и данных.

Код
//******************************************************************************

u_int sd_crc7(u_char *buff, u_int len)
{
    u_int a, crc = 0x00;

    while(len--)
    {
        crc ^= *buff++;
        a = 0x08;
        do
        {
            crc <<= 0x01;
            if(crc & 0x100) crc ^= 0x12;
        } while(--a);
    }
    return (crc & 0xfe);
}

//******************************************************************************

const u_short sd_crc16_table_a[0x10] =
{
    0x0000, 0x1231, 0x2462, 0x3653,
    0x48c4, 0x5af5, 0x6ca6, 0x7e97,
    0x9188, 0x83b9, 0xb5ea, 0xa7db,
    0xd94c, 0xcb7d, 0xfd2e, 0xef1f
};

const u_short sd_crc16_table_b[0x10] =
{
    0x0000, 0x1021, 0x2042, 0x3063,
    0x4084, 0x50a5, 0x60c6, 0x70e7,
    0x8108, 0x9129, 0xa14a, 0xb16b,
    0xc18c, 0xd1ad, 0xe1ce, 0xf1ef
};

u_int sd_crc16(u_char *buff, u_int len)
{
    u_char data;
    u_short crc = 0x00;

    while(len--)
    {
        data = *buff++ ^ (crc >> 0x08);
        crc = (sd_crc16_table_a[(data & 0xf0) >> 4] ^ sd_crc16_table_b[data & 0x0f]) ^ (crc << 8);
    }
    return crc;
}

//******************************************************************************
Go to the top of the page
 
+Quote Post

15 страниц V  « < 6 7 8 9 10 > » 
Reply to this topicStart new topic
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:47
Рейтинг@Mail.ru


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