0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
|
Помогите разобратся SD картами.09.11.2014, 13:35. Показов 8790. Ответов 17
Метки нет Все метки)
(
Начал знакомство с SPI и собственно с SD картами.
Почитал даташиты и спецификации на карты, вроде бы все понятно,мне показалось... Вообщем возникла пара вопросов: - Если циклически слать CMD0 ответ будет всегда одинаковый? (до инициализации карты) - Если на карту слать "ахинею" (FF, FF, FF, FF, FF, FF) вместо команд карта будет что ни будь отвечать? P.S. Может кто ни будь работал с TMS320С6455 ? и знает как натроить SPI без EDMA?)))))
0
|
09.11.2014, 13:35 | |
Ответы с готовыми решениями:
17
Помогите разобратся с #define Помогите разобратся с SWD протоколом Помогите разобратся с оптопарой и симистором. |
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
|
09.11.2014, 22:29 | |
О разобрался))))
Да на CMD0 приходит всегда 1 ответ, даже до инициализации. На "FF" карта никак не реагирует, что является отличным способом выдать тактирующую пачку. Вообщем в итоге сделал так(условные обозначения): send(CMD0) - 6 байт как и положено (40_00_00_00_00_95) send(0xFF) - Выроботка "пачки тактов" для подумать(обработки полученной команды). send(0xFF) - Выроботка "пачки тактов" для получения ответа(формат R1 -1 байт). 0xFF - 2 раза для получения 2-ух байтных ответов и т.д. Считываю данные с регистра приема. Контролировал процесс осцилом, все гуд) Теперь осталось поставить файловую систему)))))
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
10.11.2014, 01:44 | |
Для файловой системы пока рановато. Попробуйте пройти через всю инициализацию (причём не одной и той же карты, а разных типов).
Потом - попытайтесь прочитать сектор данных. Тогда, может быть, поймёте, о чём я говорил :-) Чёткий синхронный обмен (столько-то байт послать, столько-то получить в ответ) без повторных попыток и условных ветвлений в алгоритме - это возможно только с SPI-Ftosh, но не с SPI SD/MMC картой.
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
|
13.11.2014, 11:32 | |
Инициализация пройдена, организовано определение разных типов карт, индикация ошибок.
Но возникло несколько вопросов: 1) Почему то контроллер читает ответ позже чем отвечает флешка, приходится посылать просто пустые "FF" и естественно терять время. Почему так происходит? CMD0 и ответ R1 : http://s7.hostingkartinok.som/uptoods/thumbs/2014/11/333eb347b31659b4856489c0f451f203.png C N байтными и более ответами тоже самое, то есть N (размер байт ответа) + 5 раз приходится посылать "FF" , хотя судя по осциллограмме должно хватать N+1. 2) Как узнать диапазон доступных адресов блоков памяти? (английский не знаю и естественно очень тяжело читается даташит, и пока не наткнулся на такую инфу). 3) Можно ли как то узнать какие блоки заняты а какие свободны для записи не считывая всю флешку? (регистров подходящих не увидел в документации) 4) Также не удалось найти структура блока данных. Как я понял после CMD24 (запись 1 блока) жду ответа 0х00, и шлю данные(512 байт) + CRC7 но в 2 байтах (0x00##|0x01)? Подскажите пожалуйста или направьте в нужном направлении)
0
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|||||
13.11.2014, 15:10 | |||||
есть вот такой проект, проверенный годами: http://itm-chan.org/fsw/ff/00index_e.html .
есть там такая ссылка: Downtood: FatFs sample projects for various platforms. в ней есть пример работы с сд/ммц картой, по которому можно свериться с тем, что наделал ты.
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|||
13.11.2014, 18:25 | |||
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
|
16.11.2014, 15:11 | |
Уперся в очередной непонятный тупик(
Имеется 2 флешки: SD(2.X версии) и SDHC. Пишу 1 блок (512 байт) в разные адреса. SD нормально работает. SDHC пишет только в 0x0000, в остальные адреса ничего не записывает хотя в ответ шлет что все "ок" (0xE5 - данные приняты). Подскажите в чем может проблема? алгоритм записи: - иницилиазация - CMD24 (ответ "ок") - старт байт (0xFE) - data (512 байт) - ответ 0xE5 и линия в "0" ; - Жду когда линия поднимется в "1" и запись следующего сектора.
0
|
Oxford
|
|
16.11.2014, 15:17 | |
Я выкладывал драйвер. Скачайте изучите.
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
|||
16.11.2014, 15:46 | |||
Ну одна то флешка норм пишется же, разницы в записи сектора размером 512 байт в спецификациях 2.X и 3.X не обнаружил, значит должно все писатся.
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
16.11.2014, 16:28 | |
У sdHC-карт адресация на низком уровне - поблочная. А у не-HC карт - побайтовая (хотя и выравненная на границу блока 512 байт). То есть для чтения одного и того же сектора из SD и SDHC адресный параметр для последней должен быть в 512 раз меньше.
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
||
16.11.2014, 17:03 | ||
Но в доках не нашел упоминания об этом Оо Единственное что и раньше видел: "писать и читать можно только секторами по 512 байт". Кстати с посылкой байт и получением ответа проблем не возникало, как Вы писали выше.
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
||
18.11.2014, 15:33 | ||
Эх ну я и валенок, опять всплыл косяк который не могу осилить самостоятельно.
Вроде бы уже все прекрасно читается, пишется (по 1 блоку и мултиблочные операции). Естественно начал все прикручивать к практическому применению и все... В общем после записи или чтения (любой из операций) флешка перестает нормально отвечать на любые команды. На CMD0 вообще не реагирует, на прочие используемые команды выдает: SDHC - С1 3F SD - F0 4F Линия постоянно висит в "1" и с некоторым интервалом времени проскакивают указанные выше ответы. Пробовал в конце операция чтения/записи и CMD12 слать и STOP байт (FD) и их одновременно. Что это за ответы не понятно, так-как все форматы ответов должны начинаться с "0".
0
|
Oxford
|
|
18.11.2014, 15:59 | |
найдете. здесь на форуме много чего есть учитесь искать.
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
18.11.2014, 16:43 | ||
<ul>После CMD17 (READ_SINGLE_BLOCK) <li>карта должна была ответить 0x00 (не обязательно сразу),</li><li>потом ответить 0xFE (опять-таки не сразу),</li><li>а после собственно чтения 512 байт данных надо было</li><li>прочитать ещё два байта CRC,</li><li>снять сигнал выборки CS,</li><li>после чего "добить" транзакцию посылкой одного байта 0xFF в карту.</li></ul>
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
||||||
18.11.2014, 17:09 | ||||||
Вот допустим процедура чтения N секторов.
SD.iter - просто промежуточный подсчет шагов. while((*(int*)SPCR1&0x00000002)==0); Флаг готовности к чтению while((*(int*)SPCR1&0x00020000)==0); Флаг готовности к записи
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 270
|
|||
18.11.2014, 17:31 | |||
Есть интересные "ходы", обязательно запользую. Улыбнуло:
0
|
18.11.2014, 17:31 | |
Помогаю со студенческими работами здесь
18
Помогите разобратся с указателями на структуры и массивы. USART в ATmega8515. Помогите разобратся STM32F407 помогите разобратся с тактированием/таймерами Помогите разобратся реестр ПоМогиТе разобратся Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Как украсить новогоднюю елку с Q# и Qiskit
EggHead 24.06.2025
Что может быть необычнее, чем применить законы квантовой механики для украшения новогодней елки? Пока другие развешивают обычные гирлянды, я решил объединить свою страсть к квантовым вычислениям с. . .
|
Системы нулевого доверия на C#
UnmanagedCoder 24.06.2025
Традиционная архитектура безопасности работает по принципу средневекового замка: создаём высокие стены вокруг корпоративной сети, укрепляем ворота межсетевыми экранами и системами обнаружения. . .
|
Снова не мой путь. Циклическое среднее, я обеими руками за проверку условия, в ракурсе данной задачи - циклическое среднее в топку.
Hrethgir 24.06.2025
Привет. Такой вопрос - нужно выводить среднее математическое между двумя направлениями, интервал значений которых может лежать в диапазоне одного оборота по кругу. Проблема заключается в том, что. . .
|
Деплой Flask приложения
py-thonny 23.06.2025
За годы работы с Flask я натыкался на одни и те же грабли достаточно часто, чтобы наконец научится их обходить. И сегодня хочу поделится опытом, который сбережет вам немало нервных клеток. Начнем с. . .
|
WebAssembly и контейнеры в .NET Aspire для оркестрации распределенных архитектур
ArchitectMsa 23.06.2025
Я наблюдаю, как WebAssembly (или просто WASM) постепенно выходит за рамки своего первоначального предназначения — исполнения кода на стороне браузера. Теперь эта технология проникает в серверную. . .
|
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
|
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
|
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
|
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
|
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
|