Arduino + SD + FAT16
- Василий
- Модератор
- Сообщения: 9436
- Зарегистрирован: Чт мар 06, 2008 9:03 am
- Имя: Василий Васильчиков
- Откуда: Северо-западное Болото
- Благодарил (а): 342 раза
- Поблагодарили: 455 раз
- Контактная информация:
Re: Arduino + SD + FAT16
Можно вопрос, вы только не обижайтесь - с какой целью и на каком уровне, так сказать, понимания вопроса интересуетесь? В том смысле, что вы знаете, хотя бы приблизительно, как это все работает внутри? Или на уровне пообщаться за кофейком?
Если на уровне кофейка, то ответ - несложно.
Если на уровне внутреннего устройства - все зависит от возможностей микроконтроллера. Как с точки зрения быстродействия, так и с точки зрения доступных ресурсов. Можно прикинуть - на ардуине мини, без каких либо изысков можно получить скорость чтения с SD - 1120 Kbps.. Для звука скажем в виде нежатого WAV 44100Hz, 8bit, 1 канал, скорость составляет 352.80 Kbps, хотя и это на мой взгляд очень хорошо для маленьких динамиков. То есть даже для мелкой и тупой ардуины вполне по силам читать 2 файла и микшировать их относительно сложным алгоритмом с вычислением уровней в пределах 512 байт файла.
Если взять равноценный по цене (100-150р за плату) МК на stm32 показатели вырастут если не на порядок, то в несколько раз точно. Ну а если МК будет подороже, ну примерно как STM32F103VET6, то в принципе реализуемы не только миксинг каких-то 6 файлов, но и преферанс с институтками.
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
- Василий
- Модератор
- Сообщения: 9436
- Зарегистрирован: Чт мар 06, 2008 9:03 am
- Имя: Василий Васильчиков
- Откуда: Северо-западное Болото
- Благодарил (а): 342 раза
- Поблагодарили: 455 раз
- Контактная информация:
Re: Arduino + SD + FAT16
Так, пока с FAT-ом есть некоторые вопросы, в первом сообщении темы выкладываю код для инициализации и чтения блоков с SD карточки. С пояснениями и комментариями
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
- Василий
- Модератор
- Сообщения: 9436
- Зарегистрирован: Чт мар 06, 2008 9:03 am
- Имя: Василий Васильчиков
- Откуда: Северо-западное Болото
- Благодарил (а): 342 раза
- Поблагодарили: 455 раз
- Контактная информация:
Re: Arduino + SD + FAT16
Что-то загнулась идея. Не получается сделать быстрее и меньше чем существующие библиотеки. Либо быстрее и больше, либо меньше и медленнее
Посему принято решение не выпендриваться и хранить все что нужно на SD карте без файловой системы. Вернее с очень-очень упрощенной реализацией. Типа номер файла, размер, номер сектора с которого лежит. Файлы буду храниться в последовательных секторах без дырок. Для задач ардуины более чем достаточно.
Но это уже совсем другая история, которая будет освещена в другой теме.
Посему принято решение не выпендриваться и хранить все что нужно на SD карте без файловой системы. Вернее с очень-очень упрощенной реализацией. Типа номер файла, размер, номер сектора с которого лежит. Файлы буду храниться в последовательных секторах без дырок. Для задач ардуины более чем достаточно.
Но это уже совсем другая история, которая будет освещена в другой теме.
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
- Василий
- Модератор
- Сообщения: 9436
- Зарегистрирован: Чт мар 06, 2008 9:03 am
- Имя: Василий Васильчиков
- Откуда: Северо-западное Болото
- Благодарил (а): 342 раза
- Поблагодарили: 455 раз
- Контактная информация:
Re: Arduino + SD + FAT16
Проблема в мелкой ардуине. Памяти маловато.
Если конкретно, то для скорости нужно бы некоторые вещи хранить в памяти, например цепочки кластеров, а не читать каждый раз "по необходимости". Соответственно все это в память не лезет. А при чтении по необходимости, очень сильно падает производительность.
Если конкретно, то для скорости нужно бы некоторые вещи хранить в памяти, например цепочки кластеров, а не читать каждый раз "по необходимости". Соответственно все это в память не лезет. А при чтении по необходимости, очень сильно падает производительность.
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
-
- Сообщения: 286
- Зарегистрирован: Сб июн 06, 2015 3:26 pm
- Благодарил (а): 26 раз
- Поблагодарили: 10 раз
Re: Arduino + SD + FAT16
А если рядом поставить тиньку, которая будет перекачивать с карты в какую нить быструю память? В свою же, напримерВасилий писал(а): ↑Пн сен 25, 2017 8:54 pmПроблема в мелкой ардуине. Памяти маловато.
Если конкретно, то для скорости нужно бы некоторые вещи хранить в памяти, например цепочки кластеров, а не читать каждый раз "по необходимости". Соответственно все это в память не лезет. А при чтении по необходимости, очень сильно падает производительность.
p.s. Интересная задача для программера, на мой взгляд - сделать внешний буфер на МК. Вот только хватит ли скорости обмена между главным МК и МК-буфером?
- Василий
- Модератор
- Сообщения: 9436
- Зарегистрирован: Чт мар 06, 2008 9:03 am
- Имя: Василий Васильчиков
- Откуда: Северо-западное Болото
- Благодарил (а): 342 раза
- Поблагодарили: 455 раз
- Контактная информация:
Re: Arduino + SD + FAT16
Да все можно запилить. Вон тут читал статейку как на 128-ю тиню - simm принайтовали Только зачем? Проверить чисто теоретическую возможность?
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
-
- Сообщения: 286
- Зарегистрирован: Сб июн 06, 2015 3:26 pm
- Благодарил (а): 26 раз
- Поблагодарили: 10 раз
Re: Arduino + SD + FAT16
Ну, если будет хорошее качество воспроизведения, то не и не жалко две Нано поставить, по стоимости нормальный звуковой одноголосый шилд (на VS1053B) ощутимо дороже стоит.
- Василий
- Модератор
- Сообщения: 9436
- Зарегистрирован: Чт мар 06, 2008 9:03 am
- Имя: Василий Васильчиков
- Откуда: Северо-западное Болото
- Благодарил (а): 342 раза
- Поблагодарили: 455 раз
- Контактная информация:
Re: Arduino + SD + FAT16
Так я под эту микруху VS1053 и пилю Только я сами чипы россыпью купил. По цене сопоставимо с наной
In der Grosse Familie nicht der клювом клац-клац!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
--------------------------------------------------------------------------
Не натягивайте сову на глобус!
- Engineer_Keen
- Сообщения: 313
- Зарегистрирован: Ср фев 24, 2010 11:15 am
- Имя: Василий
- Откуда: Москва
- Поблагодарили: 5 раз
Re: Arduino + SD + FAT16
Я так понимаю, цель использования SD-карточки в том, что в отличии от отдельной микросхемы флеш-памяти, карточку проще достать, и файлы на нее можно залить быстро с компа, да и объемы у них поприличнее? Тогда есть еще вариант:
1) отдельной прогой (которую конечно придется написать) для компа собираем все нужные файлы в один, в заголовке которого будет необходимая информация ("упрощенная FAT")- адреса (смещение) отдельных файлов, их ID или какую-либо еще инфу;
2) карточку форматируем;
3) копируем этот большой файл на флешку - должно получится без фрагментирования;
4) контроллером при старте читаем FAT флешки, проверяем что нет фрагментирования,
находим заголовок большого файла и читаем в память нужные данные ("упрощенную FAT").
Так для каждого файла нужно будет всего 5-6 байт оперативки (4 на адрес, и сколько угодно для любой информации).
Хотя конечно карточка все равно сильно уступает отдельной микросхеме (той же AT45) в простоте и скорости доступа...
1) отдельной прогой (которую конечно придется написать) для компа собираем все нужные файлы в один, в заголовке которого будет необходимая информация ("упрощенная FAT")- адреса (смещение) отдельных файлов, их ID или какую-либо еще инфу;
2) карточку форматируем;
3) копируем этот большой файл на флешку - должно получится без фрагментирования;
4) контроллером при старте читаем FAT флешки, проверяем что нет фрагментирования,
находим заголовок большого файла и читаем в память нужные данные ("упрощенную FAT").
Так для каждого файла нужно будет всего 5-6 байт оперативки (4 на адрес, и сколько угодно для любой информации).
Хотя конечно карточка все равно сильно уступает отдельной микросхеме (той же AT45) в простоте и скорости доступа...