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

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


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Кристал селект ручками попробуйте дергать. У САМов были проблеммы с автоматическим дерганьем. Кристал селект не успевал уйти в ноль между посылками.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 4 2008, 10:45
Сообщение #92


Гуру
******

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



Цитата(Dron_Gus @ Nov 4 2008, 13:37) *
Кристал селект ручками попробуйте дергать. У САМов были проблеммы с автоматическим дерганьем. Кристал селект не успевал уйти в ноль между посылками.

Да он и так ручками дергается. Просто товарищ Вашему совету про оверраны и сброс приемника напрасно совершенно не внял.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 4 2008, 12:32
Сообщение #93


Местный
***

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



CS дергаю вручную
DESELECT();
Delay_mks (100);
SELECT();
Delay_mks (100);

Если и в этом месте убрать хоть одну задержку - команда не проходит.

Очень даже внял. Я же сказал "уже сделал".
Расшифруйте понятие оверран в данном контексте, пожалуйста.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 4 2008, 19:58
Сообщение #94


Гуру
******

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



Цитата(John Silver @ Nov 4 2008, 15:32) *
Очень даже внял. Я же сказал "уже сделал".

Тогда выложите получившийся вариант. И желательно без загадок типа "SPI_MODE".
Go to the top of the page
 
+Quote Post
Wano
сообщение Nov 4 2008, 21:03
Сообщение #95


Местный
***

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



Цитата(aaarrr @ Nov 4 2008, 21:58) *
Тогда выложите получившийся вариант. И желательно без загадок типа "SPI_MODE".


Кароче есть ещё офигенная фича: скорость инициализации карточки по SPI не более 200кГерц(у меня на 200 уже не пахало). Если сразу, после подачи питания, пихать данные карточке со скоростью 20МГц, она ничерта не принимает. Больше со своей стороны глюков не видел.В EFSL есть исходник для работы на атмеге.Заменить передачу/приём байтов на свой и усё как по маслу.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 4 2008, 22:19
Сообщение #96


Гуру
******

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



Цитата(Wano @ Nov 5 2008, 00:03) *
Кароче есть ещё офигенная фича: скорость инициализации карточки по SPI не более 200кГерц(у меня на 200 уже не пахало).

Такого ограничения нет. В режиме инициализации скорость должна быть не более 400kHz, но только для обеспечения совместимости с MMC, картам SD все равно.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 5 2008, 07:23
Сообщение #97


Местный
***

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



Вощем добил работу с картой. Испытал создание директории, создание файла, запись в файл.
Все работает только с задержками.
Скорость инициализации ставил от 188 до 400 кГц - все равно требует задержки.
Token отлавливаю софтовым SPI, как рекомендовал QuickWitted a14.gif (http://www.swordgreenline.narod.ru/BookReader.html), иначе все 3 мои карточки не отвечают нормально.
Использовал FatFs. Интерфейс карты портирован с EFSL.

Проц - SAM7S64
Плата - самопал
Карты - MMC Canon 16 MB, microSD SanDisk 512MB, SDHC Transdent 2MB
Дисплей - LS020 от Siemens S65
IDE - IAR 5.2

Проект сырой. Работает только в конфигурации Debug_Flash (еще не разобрался с ремапами). За стиль не ругайтесь сильно, это мой 2-ой проект.

Если, уважаемый aaarrr, посмотрите, буду весьма признателен.
Прикрепленный файл  CarController.rar ( 214.01 килобайт ) Кол-во скачиваний: 356
Go to the top of the page
 
+Quote Post
Wano
сообщение Nov 5 2008, 10:54
Сообщение #98


Местный
***

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



Цитата(aaarrr @ Nov 5 2008, 00:19) *
Такого ограничения нет. В режиме инициализации скорость должна быть не более 400kHz, но только для обеспечения совместимости с MMC, картам SD все равно.


Не может такого быть, я на SD как раз и пробовал, может какая старая была, ещё на 32 метра. Ставлю передачу больше 200 кГц и не инициализируется. Зато если инит на 150кГц, а уже потом 20МГц то всё ок.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 5 2008, 15:13
Сообщение #99


Гуру
******

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



Цитата(Wano @ Nov 5 2008, 13:54) *
Не может такого быть, я на SD как раз и пробовал, может какая старая была, ещё на 32 метра. Ставлю передачу больше 200 кГц и не инициализируется. Зато если инит на 150кГц, а уже потом 20МГц то всё ок.

В спецификации есть вполне конкретная цифра - 400kHz. И примечание, что сделано это для совместимости с MMC.

А у Вас дело, по всей видимости, в чем-то другом.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Nov 6 2008, 11:14
Сообщение #100


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Цитата(John Silver @ Nov 5 2008, 10:23) *
Проект сырой. Работает только в конфигурации Debug_Flash (еще не разобрался с ремапами). За стиль не ругайтесь сильно, это мой 2-ой проект.

Если, уважаемый aaarrr, посмотрите, буду весьма признателен.

Хотя просили и не меня... Посмотрел. У вас функция xmit_spi() оставляет после себя невычитаные данные. Если уж так хочется посылать и не ждать приема (хотя ждать там не долго) перепишите функцию отправки с приемом как-нибудь так
Код
static
BYTE rcvr_spi (char dat)
{
    char res;
    if (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF)
        res = (BYTE)( AT91C_BASE_SPI->SPI_RDR );
    while (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TDRE==0);
    AT91F_SPI_PutChar (AT91C_BASE_SPI, dat, 1);
    while (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF==0);
    res = (BYTE)( AT91C_BASE_SPI->SPI_RDR );
    Delay_mks(100);
    return  res;
}

Т.е. проверяйте, не осталось ли с прошлой посылки что-то непрочитанное.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 6 2008, 11:37
Сообщение #101


Местный
***

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



Спасибо за ответ.
Попробую, хотя меня берут сомнения в целесообразности. Ведь я пользуюсь только функцией rcvr_spi, и в конце всегда вычитываю буфер приема, откуда взяться невычитанным данным.
Или я что-то не учел?

Нашел баг в либе FatFs.
Код
Fres = f_getfree(0, &p1, &pfs);
    CardSize = (DWORD)(pfs->max_clust - 2) * pfs->csize / 2;
    FreeSize = p1 * pfs->csize / 2;
    BuzySize = CardSize - FreeSize;


Для MMC и SDv1 свободное место считает нормально. Для SDv2 - врет (карта почти пустая, а из 2 ГБ высчитывает свободных ~200 кБ).

Сообщение отредактировал John Silver - Nov 6 2008, 11:47
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 7 2008, 17:31
Сообщение #102


Местный
***

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



Контроль буфера приема перед новым чтением с карты, ситуацию не поменял.

Убрал задержки после изменения CS, оставил задержку только в фукции чтения SPI.
Уменьшил задержку:
80 мкс - все читает, SDv2 врет свободное место
60 мкс - все читает, SDv2 врет свободное место
50 мкс - SDv2 читает нормально свободное место
40 мкс - SDv2 читает нормально свободное место
25 мкс - не инициализирует
почистил контакты
30 мкс - все читает
20 мкс - не инициализирует
10 мкс - не инициализирует
Остановлся на 40мкс. Хотя раньше на 50мкс уже ничего не проходило.

Функция f_getfree(0, &p1, &pfs) нормально работает.

Вобщем мистика.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 7 2008, 18:13
Сообщение #103


Гуру
******

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



Таки да, мистика. Особенно вылезающие проблемы при увеличении задержки.

Карта случайно не пучком проводов подключена?
Go to the top of the page
 
+Quote Post
John Silver
сообщение Nov 7 2008, 23:14
Сообщение #104


Местный
***

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



Шлейф, примерно 10 см.
MOSI и CLK идут сначала на дисплей, с него на карту. MISO и CS сразу на карту.

Прикрепленное изображение
Прикрепленное изображение


На 400 кГц инициализация не проходит, всмысле, довольно низкая частота.
А вообще, конечно, надо будет напрямую к разъему подпаяться короткими проводами, авось сдесь собака и порылась.

Сообщение отредактировал John Silver - Nov 7 2008, 23:20
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 8 2008, 10:17
Сообщение #105


Гуру
******

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



Цитата(John Silver @ Nov 8 2008, 02:14) *
А вообще, конечно, надо будет напрямую к разъему подпаяться короткими проводами, авось сдесь собака и порылась.

Да уж, весьма вероятно sad.gif
И еще рекомендую поставить 10к pull-up'ы на все линии SD-карты, в том числе и неиспользуемые.
Go to the top of the page
 
+Quote Post

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

 


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


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