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

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

на CMD8 отвечает 00 00 00 02 00 FF

С какими параметрами посылается команда?

Надо так: 48 00 00 01 AA 87

Карточка рабочая? Есть другая карта?

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


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

С какими параметрами посылается команда?

Надо так: 48 00 00 01 AA 87

Карточка рабочая? Есть другая карта?

 

Карточек 3 штуки(одна-HC). Все на компе пишутся и читаются нормально.

 

Посылаю 255 клоков(сначала 100 клоков посылал)

Посылаю CMD0(40 00 00 00 00 95) ответ не проверяю

Посылаю 100 клоков

Посылаю CMD8 (48 00 00 01 AA 87)

жду 0 на CMD читаю ответ 00 00 00 02 00 FF

Посылаю 100 клоков

Посылаю CMD55 (77 00 00 00 00 65)

жду 0 на CMD читаю ответ 2С 00 00 00 00 7F

Посылаю 100 клоков

Посылаю ACMD41 (69 40 FF 80 00 17)

жду 0 на CMD читаю ответ 3F 81 FE 00 03 FF

Посылаю 100 клоков........

 

Пишу по фронту, читаю по спаду, все делаю медленно(частота невелика).

 

Может состояние линий во время пустых клоков у меня не правильное? Какое должно быть? Может с командами чего путаю?...

 

Спасибо.

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


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

А я и не претендовал на истину в последней инстанции. :biggrin:

Это для моей конкретной задачи. RAMа много, ROMа мало. Вот и выкручиваюсь как могу.

А как, простите, табличные данные оказываются в RAM? Они же из ROM копируются...

Так получается, что Вы и RAM и ROM занимаете. Или я что-то не понимаю?

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


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

Таки да: таблица генерируется, а не копируется.
Точно! А я не разглядел с первого раза. Оригинальный ход.

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


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

Точно! А я не разглядел с первого раза. Оригинальный ход.

Хм, весьма стандартный ход.

Неужели никогда не приходилось генерировать таблицы с предпросчитанными данными для исключения реалтаймовых вычислений?

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


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

Без кода программы сказать что либо сложно.

Здесь выкладывал исходники для начальной инициализации.

Версия рабочая 100%.

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


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

Без кода программы сказать что либо сложно.

Здесь выкладывал исходники для начальной инициализации.

Версия рабочая 100%.

 

Спасибо за ссылку. :rolleyes:

 

Пишу все на асме. Весь код кидать сюда наверное смысла нет.

Пересмотрю все что написал и напаял.

 

Чего-то надо ворошить. Сама не заработает.

 

Результат отпишу.... Спасибо. :rolleyes:

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


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

Вопрос тем кто реализовывал fatfs от чана на SD-карточках с помощью AT91SAM7 в режиме SPI.

Какую максимальную скорость записи в файл удалось получить?

Спасибо.

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


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

Доброе время суток..

 

Пытаюсь запустить известную всем FatFS на 1986ВЕ91Т (ядро Cortex-M3). Карта microSD 2 Gb подключена через SPI. Карта инициализируется, определяется ее тип и т.д., f_mount(..) выполняется успешно. Можно читать файлы и каталоги. Выполняется даже создание файла. НО! При попытке записи, закрытия файла или синхронизации - ошибка FR_DISK_ERR. Причина - в функции xmit_datablock - на переданный для записи блок данных карта отвечает 0xFF.

Если файл создать на компьютере, записать в него какие-либо данные, то через f_write() запись пройдет, но только в пределах размера файла, вызов f_sync() или f_close() приведет к той же ошибке... FatFS настроена без ограничений кроме LFN. Попробовал несколько разных microSD карт - на всех одинаковое поведение. Где могут быть грабли? Помогите разобраться.

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


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

Поднят FatFs на LPC2214. Частота SPI - 7.3728МГц, использую microSD Toshiba 2ГБ (FAT16). Всё работает. Провожу слудующий тест на запись:

1. открыл файл

2. f_lseek,

3. f_write

4. f_sync

5. вернуться к п.2

Записываю блок за блоком по 24 байта файл размером в 1МБайт. При таком тесте получаю скорость записи около 1400-2000Байт/с. Понимаю, что записываю блоками менее 512Байт, понимаю ограничение организации файловой системы и самой флэш-памяти. Хотелось бы узнать у уважаемых форумчан результаты аналогичного теста с малыми блоками.

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


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

А с какой скоростью у Вас будет идти запись полновесными блоками?

К примеру, по 4 - 8 килобайт?

 

Обязательно ли выполнять f_sync для каждых 24 байт?

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


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

sonycman

У меня логгер на работе, блоки больше 1040Байт не пробовал. Создам полоценный тест с разными размерами блоков в пн-вт. На 1040Байтах скорость была порядка 28-36КБайт/с. Есть утилита под винды, тестирует любой диск на запись методом: открыть файл, записать, закрыть (в описании сказано, по крайней мере). Она на данной флэхе выдавала похожие результаты:

Block= 64 B.  Speed=2.112 kB/s.
Block=128 B.  Speed=4.222 kB/s.
Block=256 B.  Speed=8.447 kB/s.
Block=512 B.  Speed=16.833 kB/s.
Block=  1 kB. Speed=33.778 kB/s.
Block=  2 kB. Speed=67.332 kB/s.
Block=  4 kB. Speed=134.629 kB/s.
Block=  8 kB. Speed=268.257 kB/s.
Block= 16 kB. Speed=546.677 kB/s.

 

Обязательно ли выполнять f_sync для каждых 24 байт?

Важно не потерять данные (сохранить как можно большее кол-во записей логгера) при отключении питания, а так же важна надёжность записи. Есть, конечно, варианты, проводить периодически по таймеру f_sync, но опасаюсь. Проблема в том, что поток данных непредсказуем, т.е. неизвестна частота появления событий для логгирования. Есть ещё варианты?

Изменено пользователем Altemir

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


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

Хм, весьма стандартный ход.

Неужели никогда не приходилось генерировать таблицы с предпросчитанными данными для исключения реалтаймовых вычислений?

Да таблицы были (тот же CRC и таблицы НСХ датчиков), но они не были в ROM а не в RAM.

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


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

У меня вопрос по записи данных на карту. Вроде все делаю как в даташите, шлю стартовый бит, команду записи, затем данные, crc16, end-bit, и жду по DAT_0 crc-статус. Но он почему то не приходит! По DAT_0 ловлю стартовый бит(0), который перед crc status должен быть, но ничего нет! Данные на карту записываются. Но если потом послать карте команду чтения, или еще записи, то ничего не происходит.

 

У меня вопрос по записи данных на карту. Вроде все делаю как в даташите, шлю стартовый бит, команду записи, затем данные, crc16, end-bit, и жду по DAT_0 crc-статус. Но он почему то не приходит! По DAT_0 ловлю стартовый бит(0), который перед crc status должен быть, но ничего нет! Данные на карту записываются. Но если потом послать карте команду чтения, или еще записи, то ничего не происходит.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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