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

Проигрывание файлов с SD карты

Здравствуйте!

Столкнулся с проблемой, надо как-то сделать голосовые сообщения для электронного устройства. Самое простое SD карта + МК + MP3декодер.

Попытался проникнуться в работу SDкарты, оказалось что из карты надо вычитывать данные блоками по 512 байт. Правильно ли я понял? А меньше блоки нельзя?

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

 

Скажу больше, осталось всего 464 байта. Конечно можно попробовать провести чистку и выявить утечки, где-то для двух не работающих вместе функционалов выделять общую память, но боюсь это проблемы не решит, так как может на этот дело память найдется, а вот если еще что-то понадобится...

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


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

..а если выкачать все, а в память класть сколько места есть, а потом выдавать тот де блок но окно сдвигать и так пока блок не кончиться.

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


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

Чтение частями блока работало на картах до 2 ГБ. SDHC уже не поддерживают. Так что морально готовьтесь к расширению/доработке контроллера. А самого маленького ARM вполне хватает... Илы Вас PIC мучает?

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


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

Можно конечно попробовать повесить SD карту на отдельную шину SPI и вычитывать медленно, допустим для MP3 декодера требуются блоки по 32 байта, 32 байта и пауза пока не обработается, потом снова 32 байта, но столько свободных выводов для отдельного SPI найти тож не просто. Да и не красиво это.

 

..а если выкачать все, а в память класть сколько места есть, а потом выдавать тот де блок но окно сдвигать и так пока блок не кончиться.

 

Интересная идея! Буду иметь в виду как вариант.

 

Чтение частями блока работало на картах до 2 ГБ. SDHC уже не поддерживают. Так что морально готовьтесь к расширению/доработке контроллера. А самого маленького ARM вполне хватает... Илы Вас PIC мучает?

 

Мне для старого устройства в единичном экземпляре и старых SD карт. ПИК не мучает, пишу почти с нуля, по этому модели ПИК несколько лет давности появления на свет осваиваются полностью с несколько лет запозданием.

 

На борту устройства есть еще внешние ОЗУ, там можно смело отрезать 1600 байт без ухудшения функционирования других задач, но оно сидит на общей для всего SPI шине, как понимаю, по одной SPI, из SD в микруху ОЗУ напрямую без полного буфера в МК никак не перекинуть?

 

Не хочется тратить процессорное время, которого и так не много, перегоняю воздух, эмитируя вычитывание из SD 512 байт, а реально записывая всего 32 байта.

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


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

Читать блоки частями - это очень сильно терять в скорости. Некоторые карточки умеют "тупить" и при чтении. Без хорошего буфера реалтайм звук не получить. Но для себя, да в единичном варианте... можно попробовать.

 

PS. По уму, еще бы и кусок FAT неплохо в ОЗУ держать.

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


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

Чищу память. 512 байт уже есть, но продолжаю чистить. Думаю запас будет...

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


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

Чищу память. 512 байт уже есть, но продолжаю чистить. Думаю запас будет...

А какой МК? Может, поменять на pin2pin совместимый, но с бОльшим ОЗУ? Затея-то штучная.

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


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

А какой МК? Может, поменять на pin2pin совместимый, но с бОльшим ОЗУ? Затея-то штучная.

 

PIC18F67j60

 

Нет. Большая часть устройства уже спаяна и работает.

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


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

Хочу уточнить один вопрос - что мешает при чтении блока с SD-карты сделать во время считывания паузу, проиграть прочитанную часть, а потом продолжить считывание дальше? Какая разница, 512 байт в блоке или 8192 ? Что здесь нас заставляет считывать блок целиком и сразу?

 

Я бы поняла проблему, если бы это была не SD-карта, а хард-диск. У последнего действительно приходится считывать сектор целиком (а то и кластер), т.к. блин крутится и ждать не станет (хотя нынче все хард-диски имеют встроенную кэш-память). Но SD-карта на физическом уровне опрашивается побайтно (я бы даже сказала побитно, т.к. у нее обычно SPI-интерфейс), а скорость опроса строго не регламентирована (допускает широкий разброс). Да и никакие другие приложения в данном случае (плеера) не торопят поскорее освободить доступ. Тогда для чего спешить? Или есть какие-то опасения, что SD-карта может разорвать конyект по таймауту по собственной инициативе? Что-то сомнительно - слишком уж она глупая для этого :).

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


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

Хочу уточнить один вопрос - что мешает при чтении блока с SD-карты сделать во время считывания паузу, проиграть прочитанную часть, а потом продолжить считывание дальше? Какая разница, 512 байт в блоке или 8192 ? Что здесь нас заставляет считывать блок целиком и сразу?

 

Общая шина данных. Прочитал с SD и сохранил в буфер, когда для MP3 проигрывателя потребуется новые 32 байта банных, переключить SPI на MP3 и передать для MP3 новую порцию.

Лично я планирую и реализовываю, перегонять все данные аудиофайла из SPI SD в 32 КБ SPI SRAM, а потом проигрывать перегоняя из SRAM в MP3 по мере необходимости.

Ну это связано со страшилками, что SD может отказаться вовремя отдавать данные, а для MP3 новые 32 байта могут понадобиться каждые 1/1500 часть секунды.

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


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

Ну это связано со страшилками, что SD может отказаться вовремя отдавать данные, а для MP3 новые 32 байта могут понадобиться каждые 1/1500 часть секунды.

 

На мой взгляд, куда вероятнее, что сбой произойдет при переходе на чтение следующего блока, т.к. в этом месте всегда есть какое-то запаздывание. А тогда, когда блок уже начал читаться и на какую-то часть уже прочитан, я вообще не вижу возможности для возникновения паузы со стороны SD-карты. Хотя бы уже потому, что в этом процессе идет чистый обмен без ожидания каких-либо событий.

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


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

Ну так если не промежуточный буфер, например на 512 байт, к SD придется обращаться каждые 1/1500 раз в секунду для вычитывания очередных 32 байт для проигрывателя MP3.

Поддерживает ли такое частое обращение SD карта?

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


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

Крутая задача.

Любопытно, а почему не спросить у самих производителей, в чем смысл спрашивать на форуме?

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


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

Ну так если не промежуточный буфер, например на 512 байт, к SD придется обращаться каждые 1/1500 раз в секунду для вычитывания очередных 32 байт для проигрывателя MP3.

Поддерживает ли такое частое обращение SD карта?

 

я понял (и одобряю), что предполагается останавливать тактовый сигнал - наверняка не по SD интерфейсу, а по SPI с картой работаете - тогда просто CS приподнимать, а после передачи куска 32, 64 или сколько влезет, хоть 1 байт - продолжать операцию чтения блока с SD

то есть количество обращений не вырастет, ну и про 1.5кГц сами то как думаете (с)? на эти SD указывают скорость записи - например класс 6 - 6МБ/с, то есть карта все-время в бизи, а у интерфейса, то есть ограничение чтения, даже если SPI, скорость выше. скорее будет ограничиваться тактовой SPI в ПИКе

 

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


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

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

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

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

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

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

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

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

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

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