Поиск
Показаны результаты для тегов 'sd'.
-
Доброго времени суток, товарищи программисты. Тема имеет посредственное отношение к AVR, но не нашелся куда еще написать (надеюсь модераторы поправят если что) Ситуация следующая: имею плату с ATMega88, к которой прикручен разъем под микро SD карту (подключение по SPI, питание 3.3 В вся плата). Пользуясь разными источниками, накидал функции инициализации карточки и чтения блоков (запись пока не очень интересует). Вставляю отформатированную виндой в FAT32 флешку на 32 Гб. Инициализация проходит успешно, карта переходит в режим Idle, затем возвращает, что инициализирована и флаг HC, то есть до этого момента всё ожидаемо. Далее считываю блок по адресу 0, отправляю по UART буфер для контроля, сравниваю с тем, что прочел с этой же карты с помощью программы HxD, и данные отличаются. Причем очень. Более того, я выполнил поиск полученных данных по всей карте, и нашел этот кусок данных совсем в другом блоке, причем со смещением. То есть данные, которые идут в начале полученного по UART блока, располагаются совсем в другом блоке и не с нулевого смещения. Но что больше всего меня вводит в ступор, полученный по UART блок данных заканчивается стандартным 55 AA 😵 Резюмирую: Считанный авркой блок 512 байт по адресу 0: [кусок 1] [кусок 2] [55 AA]. Считанный HxD блок 512 байт по адресу не 0: [кусок ?] [кусок 1] [кусок ?] [55 AA]. Вставлял другую карту на 16 Гб, ситуация повторилась, правда я не искал полученные данные по всей карте. Но данные отличались. В симуляторе Proteus работает нормально, правда образ SD я ему подсовывал полученный в WinImage объемом в несколько десятков Мб. Пробовал взять готовый пример с SD картой, как есть откомпилил залил, всё тоже самое. Есть у кого нибудь мысли, как такое может быть? Я мог бы понять проблему со смещениями при передачи адреса блока, но я считываю нулевой блок, как ни крути, но это должно быть самое начало памяти карты.
-
Здравствуйте. Появилась следующая задача: к STM32F103C8T6 подключена SD карта по SPI. Библиотека FatFS. Микроконтроллер читает содержимое карты и выдает список файлов в USART. На ПК в терминальной программе я наблюдаю этот список. Но не могу понять как получить обратную связь от ПК, а именно как указать МК по USART что я выбрал какой либо файл? Пусть, например, на SD карте у меня 4 файла и одна папка. Я наблюдаю их в окне терминальной программы: ПАПКА1 Data1.txt SuperData.txt BigDataSuperMegaLog.txt Данные.txt Как дать понять МК что я выбрал файл "Данные.txt" ? Чтобы он его прочитал и также выдал содержимое в USART. Или что я выбрал ПАПКА1 и МК прочитал содержимое этой папки и так же выдал в USART список файлов в ней. Пересылать названия скорее всего не очень правильная идея. Организовать буфер в МК и присвоить каждому файлу свой номер - не хватит ОЗУ. Может есть в FatFS какие то индексы у файлов? Читаю список так:
-
Использую FatFS на картах памяти microSDHC. С картами памяти работаю на процессорах Freescale MK24 и NXP i.MX RT1050. Карты используются достаточно интенсивно (запись, чтение, удаление файлов) в нескольких потоках FreeRTOS одновременно. Через некоторое время работы таблица FAT ломается, один раз поймал, что 0-й блок затерт 0xFF. Пробовал убрать весь код, который вносит изменения в файловую систему (запись, удаление) (низкоуровневая функция записи блока на SD точно не вызывается), но со временем FAT все равно разрушается. Помогает только блокировка записи на уровне карты памяти.
-
Добрый день. Проблема такая. Использую SD-карту по SPI (SDIO нет и не будет), перевожу её в High Speed mode, всё успешно: статус-регистры возвращаются как надо. Тактовая частота карты: 48 МГц. Прикрутил Fat FS ревизия 87030. Файлы видятся, работает чтение. Но скорость чтения данных с файлов не радует. 6 файлов общим объёмом 10 МБ читаются в течение 5,5 секунд. SD карты 4-го и 10-го класса скоростей на ёмкость 16 ГБ. Для чтения применяю мульти-секторную команду чтения (Read Begin, Read Data, Read End). Пробовал закешировать первый мегабайт (начальные сектора карты) - не помогает, видать файлы находятся дальше. Читаю с помощью fread() Какие есть пути (программные) повышения скорости чтения данных файлов? Нужно именно быстрое чтение данных, запись вообще не треуется.