Arduino + SD + FAT16

Вопросы и ответы связанные с цифровым управлением, аналоговой автоматикой и их элементами
Сообщение
Автор
Аватара пользователя
Василий
Модератор
Сообщения: 9441
Зарегистрирован: Чт мар 06, 2008 9:03 am
Имя: Василий Васильчиков
Откуда: Северо-западное Болото
Благодарил (а): 344 раза
Поблагодарили: 458 раз
Контактная информация:

Arduino + SD + FAT16

#1 Непрочитанное сообщение Василий »

Коллеги, для одной из своих задумок пишу читалку файлов с SD карточки отформатированной в FAT16.
Так как полноценные библиотеки для чтения SD и FAT достаточно объемные, я реализовал лишь некоторые необходимые функции.

По SD картам
1. Инициализация SD по SPI
2. Минимальный обмен позволяющий читать одиночные сектора по 512 байт (пока только для старых карт)

По FAT16
1. Чтение необходимой информации для поиска файлов в корневой директории
2. Поиск файла в корневой директории по имени
3. Чтение найденного файла блоками по 512 байт

Заточено под Arduino Pro Mini.

Ограничения - только FAT16, файлы только 8.3, файлы размещаются только в корневом каталоге (512 штук максимум)

Размер кода вместе с достаточно объемным отладочным выводом - порядка 4.5 килобайт. После уборки мусора и оптимизации будет меньше.

В общем вопрос - выкладывать код?
UPDATE:UPDATE:UPDATE:UPDATE:UPDATE:UPDATE:UPDATE:UPDATE:UPDATE:UPDATE:UPDATE
Часть первая, подключение и чтение блоков.
Использовано:
1. Arduino Pro mini - Atmega 328 5V 16MHz
2. Разъем для SD карты.
3. Карта Transcend 2GB (старая, это важно чуть ниже расскажу почему)

Подключение:
Выводы карточки в режме SPI
4.jpg
Соответственно соединяем
выводы Ардуино - карточка (у меня разъем)
5V - VCC (через понижалку в 3.3V)
GND - GND
11 - MOSI
12 - MISO
13 - SCK
9 - CS (можно поменять, смотреть #define CS_PIN )
DHSDReader.rar
(2.35 КБ) 538 скачиваний
Распаковываем скетч. Компилим, загружаем :)
Основная функция SDRead. Читает по одному 512 байтному блоку за раз, в заранее объявленный буфер (512 байт длиной! :) ).

Теперь про "старые"/"новые" карты. Дело в том, что на т.н. старых картах, до 2GB включительно, адресация блоков (по 512 байт) отличается от адресации на новых. На новых картах, блок адресуется просто по номеру. То есть 0 это нулевой блок, 1 первый и так далее. На старых, блоки адресуются по первому байту 512 байтного блока (i*0x200). Т.е. 0 блок - адрес 0, 1 блок - 0x200 (то есть адрес начала блока), 2 блок 0x400 и так далее.

Соответственно в SDRead нужно скармливать адреса в зависимости от типа карты.
Если в функции убрать комментарии, то при каждом чтении блока, в компорт будет выводиться содержимое считанного блока.

На указанной конфигурации, получена скорость чтения блоков (последовательно 2048 блоков, 4887400 микросекунд), что составляет примерно 1706 kbps.

В случае если сразу не заводится, имеет смысл поменять значение делителя SPI на самый маленький:
SPI.setClockDivider(SPI_CLOCK_DIV128); и последовательно менять в сторону увеличения.
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!

Федюнь
Сообщения: 1430
Зарегистрирован: Вс фев 19, 2012 7:18 am
Имя: Фарид
Откуда: Узбекистан Ташкент
Поблагодарили: 1 раз
Контактная информация:

Re: Arduino + SD + FAT16

#2 Непрочитанное сообщение Федюнь »

Код выкладывать.Ведь готовый почти звуковой декодер)))))
Есть вопрос, а какой формат файлов на SD?

shalex
Сообщения: 286
Зарегистрирован: Сб июн 06, 2015 3:26 pm
Благодарил (а): 26 раз
Поблагодарили: 10 раз

Re: Arduino + SD + FAT16

#3 Непрочитанное сообщение shalex »

Код и схему обязательно выкладывать! :)

Есть вопрос: сколько код чтения занимает в % от доступного на atmega328?

Аватара пользователя
Василий
Модератор
Сообщения: 9441
Зарегистрирован: Чт мар 06, 2008 9:03 am
Имя: Василий Васильчиков
Откуда: Северо-западное Болото
Благодарил (а): 344 раза
Поблагодарили: 458 раз
Контактная информация:

Re: Arduino + SD + FAT16

#4 Непрочитанное сообщение Василий »

Ok. Причешу, откомментирую и выложу :)

Вместе со всей текстовой ботвой и "лишними" функциями сейчас код в районе 7% занимает.
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!

BR95009
Сообщения: 121
Зарегистрирован: Пн мар 28, 2016 12:03 pm
Благодарил (а): 25 раз
Поблагодарили: 11 раз
Контактная информация:

Re: Arduino + SD + FAT16

#5 Непрочитанное сообщение BR95009 »

Для декодера нужен многоканальный звук. А тут одноканальный.

Аватара пользователя
И.К.С.
Сообщения: 3895
Зарегистрирован: Пн мар 17, 2008 9:57 am
Имя: Ĩ.Ĉ.Š. мӧҗҥҩ ҧрѻҫҭҩ мӥҫҭҿӄѣ Ӥ.Ҟ.Ҫ іљі Ҝѻӊҫҭѩңҭӥԋъ
Откуда: У.Г.Ж.Д. 13 верста( U.M.M.R.R 13 km)
Благодарил (а): 203 раза
Поблагодарили: 130 раз
Контактная информация:

Re: Arduino + SD + FAT16

#6 Непрочитанное сообщение И.К.С. »

BR95009 писал(а):
Чт июн 01, 2017 4:24 pm
Для декодера нужен многоканальный звук. А тут одноканальный.
смешно пошутил.
Ничего что это разные подсистемы ввода-вывода?

Изображение
HOe.N.Z? . . G.Oe.HO! ПолHOля , эNка и кое-что ещё. Люблю У.Г.Ж.Д. особенно 13 версту и вообще 1 эпоху.
Изображение
Изображение
Изображение

Аватара пользователя
Василий
Модератор
Сообщения: 9441
Зарегистрирован: Чт мар 06, 2008 9:03 am
Имя: Василий Васильчиков
Откуда: Северо-западное Болото
Благодарил (а): 344 раза
Поблагодарили: 458 раз
Контактная информация:

Re: Arduino + SD + FAT16

#7 Непрочитанное сообщение Василий »

BR95009 писал(а):
Чт июн 01, 2017 4:24 pm
Для декодера нужен многоканальный звук. А тут одноканальный.
Очень такое заявление, мягко говоря ни на чем не основанное :)

Тут будет лишь читалка файла с SD карты. Никто не мешает читать 2, 3 или 6 файлов. Весь вопрос лишь в скорости обмена МК с карточкой.

Федюнь был вообще-то был прав. Я делаю именно звуковой декодер. И декодер по сути двухканальный. Планирую звуки двигателя воспроизводить через модуль VS1053, а допзвуки через DFPlayer.
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!

Аватара пользователя
Василий
Модератор
Сообщения: 9441
Зарегистрирован: Чт мар 06, 2008 9:03 am
Имя: Василий Васильчиков
Откуда: Северо-западное Болото
Благодарил (а): 344 раза
Поблагодарили: 458 раз
Контактная информация:

Re: Arduino + SD + FAT16

#8 Непрочитанное сообщение Василий »

И.К.С. писал(а):
Чт июн 01, 2017 6:59 pm
смешно пошутил.
Ничего что это разные подсистемы ввода-вывода?
Да ладно тебе.. Не всем же интересно и нужно знать чего там внутри :)

Кстати, а вот у ЕСУ звук действительно многоканальный может быть? В смысле куча выходов на которые можно повесить кучу динамиков и из каждого будет свой звук воспроизводиться? Или просто микс из разных источников и вывод в одну говорилку?
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!

Федюнь
Сообщения: 1430
Зарегистрирован: Вс фев 19, 2012 7:18 am
Имя: Фарид
Откуда: Узбекистан Ташкент
Поблагодарили: 1 раз
Контактная информация:

Re: Arduino + SD + FAT16

#9 Непрочитанное сообщение Федюнь »

Вывод как в одну говорилку так и в несколько поддерживается.Декодеры звуковые могут быть как одноканальные так и многоканальные.Не надо спорить,хотя в споре рождается истина.Звук в декодере можно выводить разными способами,кому как захочется.В основном зависит от скорости обработки и качества воспроизведения.

BR95009
Сообщения: 121
Зарегистрирован: Пн мар 28, 2016 12:03 pm
Благодарил (а): 25 раз
Поблагодарили: 11 раз
Контактная информация:

Re: Arduino + SD + FAT16

#10 Непрочитанное сообщение BR95009 »

Василий писал(а):
Чт июн 01, 2017 7:08 pm
Тут будет лишь читалка файла с SD карты. Никто не мешает читать 2, 3 или 6 файлов. Весь вопрос лишь в скорости обмена МК с карточкой.
А как воспроизвести одновременно эти 6 файлов? Вот вопрос.

Ответить

Вернуться в «Цифровое управление, Аналоговая автоматика и их элементы»