Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Драйвер для MICRO_SD карт

Вт авг 27, 2013 21:30:06

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

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

Re: Драйвер для MICRO_SD карт

Вт авг 27, 2013 21:48:12

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

Re: Драйвер для MICRO_SD карт

Вт авг 27, 2013 21:50:44

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


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

Re: Драйвер для MICRO_SD карт

Вт авг 27, 2013 22:53:19

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

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

Re: Драйвер для MICRO_SD карт

Вт авг 27, 2013 23:07:14

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


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

Re: Драйвер для MICRO_SD карт

Ср авг 28, 2013 00:05:35

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) ограничений для более агрессивной оптимизации кода

Re: Драйвер для MICRO_SD карт

Пт авг 30, 2013 11:32:15

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

Re: Драйвер для MICRO_SD карт

Пт сен 06, 2013 20:48:06

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

Re: Драйвер для MICRO_SD карт

Сб сен 07, 2013 19:21:21

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

Re: Драйвер для MICRO_SD карт

Сб сен 07, 2013 22:30:22

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

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

Re: Драйвер для MICRO_SD карт

Сб сен 07, 2013 23:35:35

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

Re: Драйвер для MICRO_SD карт

Вс сен 29, 2013 21:19:26

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

Re: Драйвер для MICRO_SD карт

Сб мар 28, 2015 23:48:48

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

Re: Драйвер для MICRO_SD карт

Сб май 16, 2015 01:30:42

Изображение

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

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

extern void SD_READ();


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


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

Re: Драйвер для MICRO_SD карт

Пн май 25, 2015 00:51:23

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
Зачастую это и короче, и понятнее, и надёжнее. Против старой привычки три новых достоинства.

Re: Драйвер для MICRO_SD карт

Ср янв 13, 2016 12:40:48

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

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

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

Re: Драйвер для MICRO_SD карт

Вт мар 01, 2016 03:17:44

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

Re: Драйвер для MICRO_SD карт

Чт дек 22, 2016 17:14:10

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

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

Re: Драйвер для MICRO_SD карт

Сб дек 24, 2016 09:49:02

В общем разобрался с картой.
Суть следующая, карта( если в течении 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

Re: Драйвер для MICRO_SD карт

Вт дек 27, 2016 08:40:46

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