Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.08.2008, 01:32
|
|
Прописка
Регистрация: 06.09.2007
Сообщений: 122
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Проблема при чтении аудио данных c SD карты
Мне нужно оргонизовать чтение 8 битного звука с SD карты с чатотой 22050гц.
При попытке чтения командой CMD17 то есть читать по одному блоку между блоками происходит небольшая задержка, которая в данном случае не приемлима, т.к. от этого страдает звук.
В карточках есть комада CMD18 - последовательное чтение блоков, пока не появиться команда CMD12(Стоп). Но только между блоками каточка тоже выдаёт какие то байты, которые не относяться к содержимому следующего блока.
Как опредилить начало следующего блока в этой команде? И как вообще правильно использовать данныую команду, что бы можно было читать аудио данные, без существенных задержек?
|
|
|
|
03.08.2008, 20:37
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Интересуюсь по данному вопросу, хотя накачено данных масса .
Не только по выше названной проблеме но и вообще - по иницилизации карточек , чтение/запись MMC/SD.
__________________
Осторожно , злой кот
|
|
|
|
04.08.2008, 00:05
|
|
Прописка
Регистрация: 20.12.2005
Сообщений: 117
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
|
кеш/буфер и ассинхронная работа поможет.
|
|
|
|
04.08.2008, 14:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,545
Сказал спасибо: 700
Сказали Спасибо 4,327 раз(а) в 1,981 сообщении(ях)
|
Сообщение от VDG
|
кеш/буфер и ассинхронная работа поможет.
|
Мдя, ответ из серии "рация на башне"
|
|
|
|
04.08.2008, 15:28
|
|
Прописка
Регистрация: 05.02.2008
Сообщений: 251
Сказал спасибо: 34
Сказали Спасибо 7 раз(а) в 6 сообщении(ях)
|
Сообщение от Kabron
|
Сообщение от VDG
|
кеш/буфер и ассинхронная работа поможет.
|
Мдя, ответ из серии "рация на башне"
|
Предварительно считывать в буфер нужно обязательно. Чтение с флеш карт не может идти с постоянной скоростью и без задержек. Так что организовываем в памяти микроконтроллера (или чем там считываеться карточка) буффер и туда записываем данные с упреждением, ну а от туда уже потихоньку выводим звук с нужной скоростью.
|
|
|
|
04.08.2008, 15:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,545
Сказал спасибо: 700
Сказали Спасибо 4,327 раз(а) в 1,981 сообщении(ях)
|
Я так понимаю, что агитировать за буферизацию никого и не надо.
Автор спрашивал как границы блоков опознавать. Это действительно интересно.
|
|
|
|
04.08.2008, 16:20
|
|
Прописка
Регистрация: 20.12.2005
Сообщений: 117
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Сообщение от Kabron
|
Я так понимаю, что агитировать за буферизацию никого и не надо.
|
Надо. Так как это не сделано. Раньше наверняка использовал команду побайтного чтения и упреждающее чтение следующего блока делала микросхема. Сейчас он читает блоками по 512 байт. Упреждающего чтения в кеш следующего блока микросхема за него не делает (что правильно).
Сообщение от Kabron
|
Автор спрашивал как границы блоков опознавать. Это действительно интересно.
|
Автор такую чушь не спрашивал. Он поблочно читает. Какой блок запросил, такой и считал. Какие ещё такие границы ему не известны?
|
|
|
|
04.08.2008, 16:26
|
|
Прописка
Регистрация: 20.12.2005
Сообщений: 117
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Re: Проблема при чтении аудио данных c SD карты
Сообщение от IgorAVR2
|
Но только между блоками каточка тоже выдаёт какие то байты, которые не относяться к содержимому следующего блока.
Как опредилить начало следующего блока в этой команде? И как вообще правильно использовать данныую команду, что бы можно было читать аудио данные, без существенных задержек?
|
Нет таких данных которые карта может выдавать, не относящиеся к блоку. Писали небось по 1024 байта, а считывание делаете по 1050 (если в цифре не ошибаюсь).
Вот Вам отсюда и "левые" данные и якобы "задержка" и мнимые "границы" при потоковом чтении блоков.
При потоковых операциях микросхема делает упреждающее чтение (правда если карте не 100 лет) следующего блока/байта.
Чтобы не было "мусора" читайте и пишите командами на блоки равной длины - либо на 1024 байт, либо на 1050 байт.
Вобщем, читать даташит на протокол надо очень внимательно. Там каждая буква важна.
|
|
|
|
05.08.2008, 11:35
|
|
Прописка
Регистрация: 06.09.2007
Сообщений: 122
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Так, в вопросе я разобрался (помогли в другом месте), результаты следующие.
Меня действительно интересовало как опознать начало следующего блока в команде CMD18 и как выяснилось что в конце бока идут два байта CRC считанного блока (что из даташита я так и не понял). Имено их я считал левыми байтами. А дальше, что бы опрелделить начало следующего блока, ждём от карты FE, после чего идут данные самого блока.
За буферизацию агетировать я думаю не надо, т.к. до этого варианта я сам то же догадался, но он не всегда приемлим, т.к. требует совершенно других вичислительных ресурсов. А они не всегда имеются.
Я же пока сделал без буферизации, для голоса качество получилось вполне приличное, хотя не большая задержка между блоками есть, но на слух при воспроизведении голоса или даже музыки это не слышно.
|
|
|
|
05.08.2008, 11:49
|
|
Прописка
Регистрация: 06.09.2007
Сообщений: 122
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Проблема при чтении аудио данных c SD карты
Сообщение от VDG
|
Писали небось по 1024 байта, а считывание делаете по 1050 (если в цифре не ошибаюсь).
|
А разве размер блока может быть больше 512байт? Если можно ткните носом, где это написано. Потому что мне помница то что не больше 512 байт?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:52.
|
|