Например TDA7294

Форум РадиоКот :: Просмотр темы - Драйвер для MICRO_SD карт
Форум РадиоКот
http://radiokot.ru/forum/

Драйвер для MICRO_SD карт
http://radiokot.ru/forum/viewtopic.php?f=59&t=91454
Страница 5 из 6

Автор:  Oxford [ Вт авг 27, 2013 21:30:06 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

[quote="drakon"]Oxford, проверил ваш кусок, все работает. выдает 0x200 = 512.
вся эта фат-информация лежит на моей флешке в секторе 32, посмотрел в WinFex. компилятор keil.

У меня код по умолчанию читает 0 сектор, так как по умолчанию 0 сектор, если это не загрузочный, тогда он пытается вытащить логический диск из MBR, если MBR не найдена или не смог определить логический диск тады возврат ошибки.

Автор:  drakon [ Вт авг 27, 2013 21:48:12 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Это в С++ можно где-угодно объявлять переменные, а в Си можно только так:
Код:
char FAT_INI(void){
short BytePerSec;
SD_READ(0);
BytePerSec = *((short *)&BUFFER[11]);
lcd_int(BytePerSec, 4, 0);
return BytePerSec;
}

Автор:  Oxford [ Вт авг 27, 2013 21:50:44 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

drakon писал(а):
Это в С++ можно где-угодно объявлять переменные, а в Си можно только так:
Код:
char FAT_INI(void){
short BytePerSec;
SD_READ(0);
BytePerSec = *((short *)&BUFFER[11]);
lcd_int(BytePerSec, 4, 0);
return BytePerSec;
}


У меня везде работает в любом месте и глобально обьявлял и локально одинаково работает.

Автор:  drakon [ Вт авг 27, 2013 22:53:19 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Цитата:
В языке Си все определения должны следовать перед операторами, составляющими тело функции. В языке Си++ это ограничение снято и определения могут находиться в любом месте программы.

если тип *.c поменять на *.cpp то объявлять можно где-угодно, когда-то проверял. попробуйте написать туда класс (в Си точно его нету), может, компилятор автоматически на C++ переходит.

Автор:  balmer [ Вт авг 27, 2013 23:07:14 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

drakon писал(а):
если тип *.c поменять на *.cpp то объявлять можно где-угодно, когда-то проверял.


Еще есть стандарт C99, там можно объявлять переменные где угодно.

Автор:  Oxford [ Ср авг 28, 2013 00:05:35 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

balmer писал(а):
drakon писал(а):
если тип *.c поменять на *.cpp то объявлять можно где-угодно, когда-то проверял.


Еще есть стандарт C99, там можно объявлять переменные где угодно.


Все верно
http://ru.wikipedia.org/wiki/C99

Новые возможности

В C99 было добавлено несколько новых возможностей, многие из которых уже были реализованы в качестве расширения в некоторых компиляторах:
встраиваемые функции (объявленные с ключевым словом inline)
Место, в котором возможно объявление переменных, больше не ограничено глобальной областью видимости и началом составного оператора (блока)
Несколько новых типов данных, включая long long int, дополнительные расширенные целые типы, явный логический тип данных, а также комплексный тип (complex) для представления комплексных чисел
Массивы переменной длины (variable-length arrays)
Поддержка однострочных комментариев, начинающихся с //, как в BCPL или C++
Новые библиотечные функции, как, например, snprintf
Новые заголовочные файлы, такие как stdbool.h и inttypes.h
Типовые математические функции (tgmath.h)
Улучшена поддержка стандарта IEEE 754-2008
Проектируемые инициализаторы
Составные константы
Поддержка вариативных макросов (макросов переменной арности)
Смягчение (restrict) ограничений для более агрессивной оптимизации кода

Автор:  Oxford [ Пт авг 30, 2013 11:32:15 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

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

Автор:  drakon [ Пт сен 06, 2013 20:48:06 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Oxford, как успехи с fat?

Автор:  Oxford [ Сб сен 07, 2013 19:21:21 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Занимаюсь еще. Реализовал сейчас длинные и короткие имена понимает. Сейчас маркую над навигацией. Работа с FAT будет немного иначе чем привыкли все.

Автор:  bishop-strip [ Сб сен 07, 2013 22:30:22 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Oxford писал(а):
Занимаюсь еще. Реализовал сейчас длинные и короткие имена понимает. Сейчас маркую над навигацией. Работа с FAT будет немного иначе чем привыкли все.

А что вы подразумеваете под НАВИГАЦИЕЙ? сам интерфейс использования функций в библиотеке?

Автор:  Oxford [ Сб сен 07, 2013 23:35:35 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Навигация это когда требуется отображать на дисплее дерево флешки. Т.е. перемещение по папкам, файлам, поиск и т.д. Это будет реализовано внутри драйвера т.е. так как это удобно драйверу для работы с картой, а программисту будет предоставлен простой API.

Автор:  drakon [ Вс сен 29, 2013 21:19:26 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

может, выложите пока без навигации?

Автор:  Oxford [ Сб мар 28, 2015 23:48:48 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

FAT пока закрытая для своих проектов.

Автор:  DmitriyVovk [ Сб май 16, 2015 01:30:42 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Изображение

Помогите запустить. Я вроде уже запускал ваш код, но теперь лыжи не едут.

Заголовочный файл MICROSD.h лежит в MICROSD.c
В главном main.c прописано

extern void SD_READ();


Если подключить заголовочный MICROSD.h в main.c то компилятор ругается на множественное обьявление BUFFER R1 R2 ... и т.д.


Что он от меня хочет(( я да, я еще нуб, помогите!

Автор:  B@R5uk [ Пн май 25, 2015 00:51:23 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Galizin писал(а):
Цитата:
short BytePerSec = *((short *)&BUFFER[11]);

Попробуйте присвоить по 1 байту
Код:
short BytePerSec;
((char*)&BytePerSec)[0] = BUFFER[11];
((char*)&BytePerSec)[1] = BUFFER[12];

Должно заработать
Плохая идея. Индексация -- это куча накладных расходов, если только компилятор не с адовой сообразительностью (но тогда могут возникнуть другие проблемы). Чем меньше обращений, тем быстрее.


Вопрос к Oxford, а почему вы не используете вот эти замечательные типы данных:
Код:
int8_t   uint8_t
int16_t  uint16_t
int32_t  uint32_t
int64_t  uint64_t
Зачастую это и короче, и понятнее, и надёжнее. Против старой привычки три новых достоинства.

Автор:  Oxford [ Ср янв 13, 2016 12:40:48 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

B@R5uk писал(а):


Вопрос к Oxford, а почему вы не используете вот эти замечательные типы данных:
Код:
int8_t   uint8_t
int16_t  uint16_t
int32_t  uint32_t
int64_t  uint64_t
Зачастую это и короче, и понятнее, и надёжнее. Против старой привычки три новых достоинства.

Особой разницы нет. Использую тоже.

Автор:  Oxford [ Вт мар 01, 2016 03:17:44 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

DmitriyVovk, Скоро выложу драйвер обновленный :tea: . KEIL да капризный. :kill:

Автор:  Oxford [ Чт дек 22, 2016 17:14:10 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

Ребятушки всем привет. На данный момент попалась карточка 8G class 4 нонейм. Капризная карта, зависает иногда. Я с ней уже несколько дней войну веду. До этого в плеере стояла 16G class 10, проблем не было.
На данный момент отлаживаю драйвер. После выяснения будет выложен апдейт.

P.S. Карта скорее всего не зависает, а засыпает. Процедуру пробуждения отлажу. Некоторые карты автоматически уходят в спячку.
Временный костыль, вызывать инициализацию при открытии файла.

Автор:  Oxford [ Сб дек 24, 2016 09:49:02 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

В общем разобрался с картой.
Суть следующая, карта( если в течении 5мс ничего не происходит) уходит в энергосберегающий режим, таймаут у карт разный. В этот момент команда CMD17 на чтение не доступна. В этом режиме доступны следующие команды CMD0, CMD1, CMD41 и CMD58

Поэтому перед чтением нужно разбудить карту и дальше в штатном режиме работать.

Fix следующий:


//ЧИТАЕТ СЕКТОР ДАННЫЕ В BUFFER: РЕЗУЛЬТАТ 1 - ОШИБКА 0 - НЕТ ОШИБОК
uint8_t SD_READ(uint32_t sector)
{

SPI_CMD(1, 0, 0); //Выход из спящего режима; доступные команды: CMD0, CMD1, CMD41 и CMD58

if (SD_VERSION != SPISD_VER2HC)
sector *= 512; //LBA

Автор:  Oxford [ Вт дек 27, 2016 08:40:46 ]
Заголовок сообщения:  Re: Драйвер для MICRO_SD карт

При открытии файла, всегда вызывать новую инициализацию карты. Некоторые карты без этого впадают в спячку и не отвечают даже на пробуждение, реинит пробуждает ее. В противном случае при чтении вернет ошибку, пока ее не переинитят.

Страница 5 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/