AVR+WAv

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

если байт с карты передаётся дольше, чем воспроизводится, то буфер уже не поможет (не будет успевать заполняться), а если быстрее, то и не нужен, буфер нужен, если возможны задержки при передаче или если большим пакетом передавать быстрее,
потому я и спросил про фрагментацию, буфер помог бы продержаться, пока на карте ищется следующий кусок файла.
ПС: из предыдущего сообщения без большой нужды обычно не цитируют (и так понятно, что сообщение без цитаты - ответ на предыдущее)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

А можете подсказать ссылку или выложить документацию,чтобы посмотреть за какое время можно читать данные на SD карте.
Пока еще все таки не совсем представляю про буфер.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

старенький benchmark SD/MMC:
I examined the read/write performance of some MMC/SDC with a cheap 8 bit MCU (ATmega64 @9.2MHz) on the assumption that an embedded system with limited memory size. For reason of memory size, write() and read() ware performed in 2048 bytes at a time. The result is: Write: 77kB/sec, Read: 328kB/sec on the 128MB SDC, Write: 28kB/sec, Read: 234kB/sec on the 512MB SDC and Write: 182kB/sec, Read: 312kB/sec on the 128MB MMC.
отсюда:
http://elm-chan.org/docs/mmc/mmc_e.html
старый велосипед:
http://elm-chan.org/works/sd8p/report.html
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Не понимаю суть вот этой статьи: http://chipenable.ru/index.php/programming-avr/item/212



Итак, аналоговые напряжения будут формироваться с помощью ШИМ функции аппаратного таймера Т0, но как разнести процесс чтения данных с процессом воспроизведения? Считывать с SD карты по одной выборке сигнала с частотой 22 кГц не получится, микроконтроллер не будет успевать это сделать.

Я подбирал размер буфера следующим образом. Задал максимальную частоту SPI модуля микроконтроллера atmega16 и посмотрел сколько времени затрачивается на чтение данных с SD карты. То есть сколько времени выполняется функция pf_read(..).

При тактовый частоте Fcpu = 6 МГц эта функция выполнялась ~2.5 мс, но иногда попадались циклы по 5 мс (наверное из-за чтения на границе секторов .. напишите в комментариях, если знаете). Причем это время не зависело от количества данных - и 32, и 64, и 128 байт читались за одно и то же время.

Затем я посчитал сколько данных будет передано в ЦАП за время 5 мс. Частота нашего псевдо ЦАП`a = 23437 Гц, соответственно период = 42.6 мкс. Делим 5 мс на 42.6 и получаем искомую цифру.

n = 0.005/(1/23437) = 117

То есть за 5 мс микроконтроллер выдаст 117 выборок сигнала, при этом за это же время успеет прочитать с карты 128 выборок. Получается, что если взять буфер размером 256 байт микроконтроллер будет успевать выполнять обе задачи и даже остается небольшой запас времени. Он, кстати, необходим, потому что в процесс чтения данных с SD карты, будут вклиниваться прерывания таймера Т0.
Ответе мне почему он пишет что он не сможет по одной выборке читать,ведь у него за 5 мс 117 выборок проиграется,и за 5 мс 128 прочтется с sd карты,так поидеи можно в прерывании читать байт на карте каждые 42.6 мкс ,а чтение самого байта составит 39 мкс судя что у него 128 выборок за 5мс,тоесть 39 мкс читается байт в самом прерывании с карты и через 3 мкс опять выполнется прерывание,все укладывается,в чем суть?
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

oleg110592 писал(а):старенький benchmark SD/MMC
это не совсем по теме... Petit FatFS физически работает только посекторно, т.е. никогда меньше 512 байт не читает и не пишет. нормальная FatFS от Чена, по-моему, тоже действует аналогично...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

по теме (imho):
подсказать ссылку или выложить документацию,чтобы посмотреть за какое время можно читать данные на SD карте
по ссылке (перевод):
Я изучил производительность чтения / записи некоторых MMC / SDC с дешевым 8-битным MCU (ATmega64 @ 9.2MHz), исходя из предположения, что встроенная система с ограниченным объемом памяти . По причине объема памяти, write () и read (), выполняемые в 2048 байт за раз.
можно там же пройдя по ссылке увидеть в виде графика для ATmega1284/20MHz with MMC (1/128/4096 байт):
СпойлерИзображение
тест я понимаю этот - "функция проверки для модуля ввода / вывода низкого уровня диска":
http://elm-chan.org/fsw/ff/res/app4.c
вполне достаточно информации за какое время можно читать данные.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Ответе мне почему он пишет что он не сможет по одной выборке читать,ведь у него за 5 мс 117 выборок проиграется,и за 5 мс 128 прочтется с sd карты,так поидеи можно в прерывании читать байт на карте каждые 42.6 мкс ,а чтение самого байта составит 39 мкс судя что у него 128 выборок за 5мс,тоесть 39 мкс читается байт в самом прерывании с карты и через 3 мкс опять выполнется прерывание,все укладывается,в чем суть?
Разобрался сам уже,после чтения 512 байт SD карточки,в карточке тратиться время более 500 мкс, я так понял что эта время тратится чтобы заполнить ОЗУ карточки,для этого собственно и нужно нам делать буфер чтобы не было остановки музыки в этом промежутке паузы.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="sirha",url="/forum/viewtopic.php?p=3443680#p3443680"]Разобрался сам уже,после чтения 512 байт SD карточки,в карточке тратиться время более 500 мкс[/uquote]
после 512 байт считывается 2 байта CRC и ожидается готовность следующих данных, но не 500 мкс, это происходит достаточно быстро, можно не создавать буфер. Ссылку давали ранее:
Ввиду малого объема SRAM у ATtiny2313 невозможно создать буфер для предварительного чтения данных, поэтому данные из файла напрямую выдаются на воспроизведение. Соответственно, нет возможности (не хватает времени) выполнять поиск фрагментов файла по таблице FAT. Другими словами, файлы, записанные на карту, должны быть не фрагментированы.
http://www.getchip.net/posts/087-attiny ... ng-device/
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

но не 500, ожидается готовность следующих данных
Покажите мне документацию или достойный аргумент, http://www.getchip.net это не документация,даташит есть ?,где можно четко увидеть скоко она времени тратит после чтения 512 байт???,хотелось бы для старой SD карточки не более 2 гб,буфер для этого ставят иначе нету его смысла),кстати attiny2313 имеет 128 RAM, и скоре всего автор мог организовать кольцевой буфер))
Ввиду малого объема SRAM у ATtiny2313 невозможно создать буфер для предварительного чтения данных, поэтому данные из файла напрямую выдаются на воспроизведение. Соответственно, нет возможности (не хватает времени) выполнять поиск фрагментов файла по таблице FAT
А тут иммеется ввиду что автор не пользуется FAT,а просто читает напрямую,тоесть он полностью форматирует карту памяти и заново кладет туда музыку ,а говорит он про буфер для использования FAT,это про другой буфер))),КОНТРОЛЛЕР не сможет использовать FAT без определённого буфера))),исходника на СИ нету,буфер для воспроизведения нужен в любом случае.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

4.6.2.1 Read (чтение). Для карт стандартного объема (Standard Capacity SD Memory Card) времена, после которых возникает условие таймаута операций чтения, составят (независимо от карты) либо в 100 раз больший интервал, чем типичное время доступа для этих операций, либо меньше или равно 100 мс (меньшее из этих двух величин времени). Время доступа чтения (read access time) определено как сумма двух времен, полученных в параметрах TAAC и NSAC регистра CSD (см. Главу 5.3). В случае одиночной операции чтения эти параметры карты определяют типичную задержку между последним битом (end-бит) команды чтения и начальным битом (start-бит) блока данных. В случае операции множественного чтения (Multiple Block Read) они также определяют типичную задержку между конечным битом блока данных и начальным битом следующего блока данных.
Карты повышенной емкости (High Capacity SD Memory Card, SDHC) показывают параметры TAAC и NSAC как фиксированные величины. Хост должен использовать таймаут 100 мс (минимум) для операций одиночного и множественного чтения вместо использования TAAC и NSAC.
далее см. Главу 5.3
http://microsin.net/programming/file-sy ... r-200.html
Никто не мешает и опытным путем. У меня была поделка для заказчика (до сих пор продается) - проигрывает звук тини13 с SD (256Mb и 512Mb тогда больше не было) без всяких буферов и без щелчков (покупатели не жаловались). Карточка форматировалась и писалась стандартно на ПК со стандартным FAT.
А тут иммеется ввиду что автор не пользуется FAT
пользуется - там исходник на АБ
Изображение
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

без всяких буферов
Действительно решил проверить играет отлично без буфера)))) :shock: ,а вообще зачем тогда люди применяют wav проигрывателях буфер? :))
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

буфер нужен где файлы на SD фрагментированы. Выше ссылка была на Чена плеер на тини25 с Petit-FatFs
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Спасибо,теперь понял :) .
А кто-нибудь может подсказать как правильно перелистывать музыку для Fat16?,алгоритм расчета поэтапно,систему fat16 представляю :) ,нужно ли для этого использовать таблицы fat1 fat2?
Ответить

Вернуться в «AVR»