Слесарь 9 26 сентября, 2014 Опубликовано 26 сентября, 2014 · Жалоба Здравствуйте! Столкнулся с проблемой, надо как-то сделать голосовые сообщения для электронного устройства. Самое простое SD карта + МК + MP3декодер. Попытался проникнуться в работу SDкарты, оказалось что из карты надо вычитывать данные блоками по 512 байт. Правильно ли я понял? А меньше блоки нельзя? Вычитывать то не проблема, но у меня в МК после всего что я в него внедрил не так много осталось оперативной памяти. Скажу больше, осталось всего 464 байта. Конечно можно попробовать провести чистку и выявить утечки, где-то для двух не работающих вместе функционалов выделять общую память, но боюсь это проблемы не решит, так как может на этот дело память найдется, а вот если еще что-то понадобится... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 5 26 сентября, 2014 Опубликовано 26 сентября, 2014 · Жалоба ..а если выкачать все, а в память класть сколько места есть, а потом выдавать тот де блок но окно сдвигать и так пока блок не кончиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 сентября, 2014 Опубликовано 26 сентября, 2014 · Жалоба Чтение частями блока работало на картах до 2 ГБ. SDHC уже не поддерживают. Так что морально готовьтесь к расширению/доработке контроллера. А самого маленького ARM вполне хватает... Илы Вас PIC мучает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Слесарь 9 26 сентября, 2014 Опубликовано 26 сентября, 2014 · Жалоба Можно конечно попробовать повесить SD карту на отдельную шину SPI и вычитывать медленно, допустим для MP3 декодера требуются блоки по 32 байта, 32 байта и пауза пока не обработается, потом снова 32 байта, но столько свободных выводов для отдельного SPI найти тож не просто. Да и не красиво это. ..а если выкачать все, а в память класть сколько места есть, а потом выдавать тот де блок но окно сдвигать и так пока блок не кончиться. Интересная идея! Буду иметь в виду как вариант. Чтение частями блока работало на картах до 2 ГБ. SDHC уже не поддерживают. Так что морально готовьтесь к расширению/доработке контроллера. А самого маленького ARM вполне хватает... Илы Вас PIC мучает? Мне для старого устройства в единичном экземпляре и старых SD карт. ПИК не мучает, пишу почти с нуля, по этому модели ПИК несколько лет давности появления на свет осваиваются полностью с несколько лет запозданием. На борту устройства есть еще внешние ОЗУ, там можно смело отрезать 1600 байт без ухудшения функционирования других задач, но оно сидит на общей для всего SPI шине, как понимаю, по одной SPI, из SD в микруху ОЗУ напрямую без полного буфера в МК никак не перекинуть? Не хочется тратить процессорное время, которого и так не много, перегоняю воздух, эмитируя вычитывание из SD 512 байт, а реально записывая всего 32 байта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 26 сентября, 2014 Опубликовано 26 сентября, 2014 · Жалоба Читать блоки частями - это очень сильно терять в скорости. Некоторые карточки умеют "тупить" и при чтении. Без хорошего буфера реалтайм звук не получить. Но для себя, да в единичном варианте... можно попробовать. PS. По уму, еще бы и кусок FAT неплохо в ОЗУ держать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Слесарь 9 27 сентября, 2014 Опубликовано 27 сентября, 2014 · Жалоба Чищу память. 512 байт уже есть, но продолжаю чистить. Думаю запас будет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 28 сентября, 2014 Опубликовано 28 сентября, 2014 · Жалоба Чищу память. 512 байт уже есть, но продолжаю чистить. Думаю запас будет... А какой МК? Может, поменять на pin2pin совместимый, но с бОльшим ОЗУ? Затея-то штучная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 79 28 сентября, 2014 Опубликовано 28 сентября, 2014 · Жалоба http://www.ebay.com/itm/New-WT588D-16p-IC-...o-/201079696145 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Слесарь 9 28 сентября, 2014 Опубликовано 28 сентября, 2014 · Жалоба А какой МК? Может, поменять на pin2pin совместимый, но с бОльшим ОЗУ? Затея-то штучная. PIC18F67j60 Нет. Большая часть устройства уже спаяна и работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 28 сентября, 2014 Опубликовано 28 сентября, 2014 · Жалоба Хочу уточнить один вопрос - что мешает при чтении блока с SD-карты сделать во время считывания паузу, проиграть прочитанную часть, а потом продолжить считывание дальше? Какая разница, 512 байт в блоке или 8192 ? Что здесь нас заставляет считывать блок целиком и сразу? Я бы поняла проблему, если бы это была не SD-карта, а хард-диск. У последнего действительно приходится считывать сектор целиком (а то и кластер), т.к. блин крутится и ждать не станет (хотя нынче все хард-диски имеют встроенную кэш-память). Но SD-карта на физическом уровне опрашивается побайтно (я бы даже сказала побитно, т.к. у нее обычно SPI-интерфейс), а скорость опроса строго не регламентирована (допускает широкий разброс). Да и никакие другие приложения в данном случае (плеера) не торопят поскорее освободить доступ. Тогда для чего спешить? Или есть какие-то опасения, что SD-карта может разорвать конyект по таймауту по собственной инициативе? Что-то сомнительно - слишком уж она глупая для этого :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Слесарь 9 28 сентября, 2014 Опубликовано 28 сентября, 2014 · Жалоба Хочу уточнить один вопрос - что мешает при чтении блока с SD-карты сделать во время считывания паузу, проиграть прочитанную часть, а потом продолжить считывание дальше? Какая разница, 512 байт в блоке или 8192 ? Что здесь нас заставляет считывать блок целиком и сразу? Общая шина данных. Прочитал с SD и сохранил в буфер, когда для MP3 проигрывателя потребуется новые 32 байта банных, переключить SPI на MP3 и передать для MP3 новую порцию. Лично я планирую и реализовываю, перегонять все данные аудиофайла из SPI SD в 32 КБ SPI SRAM, а потом проигрывать перегоняя из SRAM в MP3 по мере необходимости. Ну это связано со страшилками, что SD может отказаться вовремя отдавать данные, а для MP3 новые 32 байта могут понадобиться каждые 1/1500 часть секунды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 28 сентября, 2014 Опубликовано 28 сентября, 2014 · Жалоба Ну это связано со страшилками, что SD может отказаться вовремя отдавать данные, а для MP3 новые 32 байта могут понадобиться каждые 1/1500 часть секунды. На мой взгляд, куда вероятнее, что сбой произойдет при переходе на чтение следующего блока, т.к. в этом месте всегда есть какое-то запаздывание. А тогда, когда блок уже начал читаться и на какую-то часть уже прочитан, я вообще не вижу возможности для возникновения паузы со стороны SD-карты. Хотя бы уже потому, что в этом процессе идет чистый обмен без ожидания каких-либо событий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Слесарь 9 28 сентября, 2014 Опубликовано 28 сентября, 2014 · Жалоба Ну так если не промежуточный буфер, например на 512 байт, к SD придется обращаться каждые 1/1500 раз в секунду для вычитывания очередных 32 байт для проигрывателя MP3. Поддерживает ли такое частое обращение SD карта? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oljarus 0 29 сентября, 2014 Опубликовано 29 сентября, 2014 · Жалоба Крутая задача. Любопытно, а почему не спросить у самих производителей, в чем смысл спрашивать на форуме? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 8 29 сентября, 2014 Опубликовано 29 сентября, 2014 · Жалоба Ну так если не промежуточный буфер, например на 512 байт, к SD придется обращаться каждые 1/1500 раз в секунду для вычитывания очередных 32 байт для проигрывателя MP3. Поддерживает ли такое частое обращение SD карта? я понял (и одобряю), что предполагается останавливать тактовый сигнал - наверняка не по SD интерфейсу, а по SPI с картой работаете - тогда просто CS приподнимать, а после передачи куска 32, 64 или сколько влезет, хоть 1 байт - продолжать операцию чтения блока с SD то есть количество обращений не вырастет, ну и про 1.5кГц сами то как думаете (с)? на эти SD указывают скорость записи - например класс 6 - 6МБ/с, то есть карта все-время в бизи, а у интерфейса, то есть ограничение чтения, даже если SPI, скорость выше. скорее будет ограничиваться тактовой SPI в ПИКе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться