Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MMC по 1 байту
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Пришелец
Добрый день! smile.gif

Может кто в курсе?

Можно ли читать MMC по одному байту с любого адреса.

Можно установить длину блока - есть такая команда.
Вопрос в том адрес блока в этом случае считается с учётом установленной длины или он всё равно всегда кратен 512 байт?



А то уж больно геморно с ней работать буфферы по 512 байт отводить.
bloodden
А зачем всё хранить? Считывайте весь блок, а нужные данные сохраняйте.
Пришелец
Ха в том то и вопрос.

Пример:
Вывод звука
Вывод графики на дисплей
Ну и работа с каким то файлом

одновременно.

т.е. требуется 512 *3 полтора килобайта.

Это много для микроконтроллера.

Работать с линейной памятью удобнее в моём случае.

А скорость очень уж высокая и не требуется - готов пойти на потери скорости при побайтном считывании.
Rst7
Цитата
А скорость очень уж высокая и не требуется - готов пойти на потери скорости при побайтном считывании.


Так может просто прочитать без записи в ОЗУ нужное количество байт в секторе да и все? А потом уже читать куда надо? Кривовато, но как вариант...
Пришелец
Была такая мысль.

Но это уже больно накладно.

При выводе звука 16 кгц каждые 64 мс по spi читать 512 байт не получится


интересно всё таки. при длине блока 1 байт как вычисляется адрес блока?

приёдтся экспепримент наверное ставить wacko.gif
Rst7
Цитата
приёдтся экспепримент наверное ставить


Правильно бы было покурить спецификацию. Потому как эксперимент может дать, например, положительный результат на всех карточках, которые есть под рукой, а на каких-нибудь других карточках (уже у заказчика) - отрицательный. Я в том смысле, что возможны недетсткие грабли...
Пришелец
мысль дельная a14.gif
etoja
Длина блока зашита в карточку и работать с другой длиной блока не будет.
Читать карточку можно только блоками. С произвольного адреса - нельзя.
Для карточек более 2Гбайт размер блока может быть 1024 байта.
Не старайтесь решить задачу вывода изображения и звука на AVR.
Возьмите дешёвый ARM, например LPC2103. Сделаете гораздо быстрее.
Пришелец
тогда смысл команды
установка длины блока

???
aaarrr
Ну, теоретически карточка может ее поддерживать. Но на практике полагаться на это нельзя.
Ivan A-R
По два байта я читал. Но учтите, что это будет очень-очень медленно.
sensor_ua
Цитата
Читать карточку можно только блоками.

Неправильно. См. описание параметра READ_BL_PARTIAL в регистре CSD
Цитата
Не старайтесь решить задачу вывода изображения и звука на AVR.
Возьмите дешёвый ARM, например LPC2103. Сделаете гораздо быстрее.

Я бы не был столь категоричен.
http://pol-sem.narod.ru/polymuson/polymuson.htm
Хотя сам бы делал на ARM:)
KRS
Цитата(etoja @ Sep 24 2008, 14:58) *
Длина блока зашита в карточку и работать с другой длиной блока не будет.
Читать карточку можно только блоками. С произвольного адреса - нельзя.
Для карточек более 2Гбайт размер блока может быть 1024 байта.
Не старайтесь решить задачу вывода изображения и звука на AVR.
Возьмите дешёвый ARM, например LPC2103. Сделаете гораздо быстрее.

Это все не так! Вам надо внимательней читать спецификацию
Если брать CSD версии 1.0 ( standart capacity)
то там есть параметр READ_BL_LEN он обычно 512 ( но для карт больше 1 гб т.е. в районе 2 GB это максимум для standart capacity READ_BL_LEN = 1024.
Но этот параметр не влияет на чтение, при чтении по умолчанию BLOCK_LEN = 512.
И больше 512 его устанавливать нельзя! (Block Length set by CMD16 can be set up to 512 bytes regardless of READ_BL_LEN.)
к тому же! ВЫ МОЖЕТЕ читать хоть по байту! Главное не пересекать границу 512 байтового сектора!
( у standart capacity для чтения выставляется абсолютный адрес байта! )
Block read is block oriented data transfer. The basic unit of data transfer is a block whose maximum
size is always 512 bytes. Smaller blocks whose starting and ending address are entirely contained
within 512 bytes boundary may be transmitted.
KolyanV
Цитата(sensor_ua @ Sep 24 2008, 14:29) *
Неправильно. См. описание параметра READ_BL_PARTIAL в регистре CSD

Я бы не был столь категоричен.
http://pol-sem.narod.ru/polymuson/polymuson.htm
Хотя сам бы делал на ARM:)

Есть еще такое: http://electronix.ru/forum/index.php?showtopic=43180&hl=
Пришелец
Спасибо!!!!!!!

т.е. можно для карт меньше 2 Гб


по времени конечно да немного накладно получится

1. Установка длины блока (т.к. в других ф-циях длина нужна512)
2. CMD17 чтение одного ну или двух байт

в среднем если на команду допустить передачу 10ти SPI байт

то опять с запасом передать для доступа к байту нужно 30 байт
при spi clock = CLC/2 при 16 МГЦ общее время получится примерно 15 мкс

при прерываниях порядка 64 мкс вполне приемлимо!!!

Может можно обойтись и без установки длины блока просто останавливать приём байт по SPI ???
- нужно будет почитать smile.gif


Ещё раз спасибо!
sensor_ua
Повторюсь - параметр READ_BL_PARTIAL в регистре CSD определяет возможный тип чтения - произвольный доступ внутри блока или только от начала блока.
ЗЫ. Мне для одного изделия, считавшего, что доступ всегда произвольный, пришлось оббегать весь радиорынок, чтобы найти завалявшиеся старые карточки. (Попутно негромко, но выразительно, передавал привет программисту той штуки).
Пришелец
ХМ...

А на каких картах не работало случайно размером не более 2Гб?

"
NOTE 1. Data address for media =<2GB is a 32bit byte address and data address for media > 2GB is a 32bit sector (512B)
address.
"

Хотя о явной связи этого примечания и READ_BL_PARTIAL ничего не говорится.
sensor_ua
Цитата
А на каких картах не работало случайно размером не более 2Гб?

512МВ старые работали, новее - нет, 1GB уже ниодной с произвольным доступом не досталось, 128МВ и 256МВ не попадалось без произвольного доступа. Все были MMCmobile (в основном Transcend), потому как обычных MMC просто не знаю, где ещё бывают.
Вот на столе валяется в упаковке TS512MRMMC4 Transcend - у неё произвольного доступа нет.
ЗЫ. Программиста уже перенапрягли и он родил правильную фирмварю. Но неприятный осадок остался8-P Так что эта карточка будет использованаwink.gif Но не для воспроизведения звука.

Цитата
Хотя о явной связи этого примечания и READ_BL_PARTIAL ничего не говорится.

Смотри описание полей регистра CSD - там однозначно описано, что размер блока определяется READ_BL_LEN(Table 3-16), возможность произвольного чтения внутри блока READ_BL_PARTIAL (Table 3-17).
Пришелец
Да согласен у меня даже на 32МБ READ_BL_PARTIAL=0 crying.gif


Но вот про SD прочитал вот что!!!

"
READ_BL_PARTIAL— READ_BL_PARTIAL is always set to 1 in the SD Card. Partial Block Read is always
allowed in the SD Card. It means that smaller blocks can be used as well. The minimum block size is one byte.
"
ProdManualSDCardv1.9.pdf


Может ещё есть надежда? 08.gif




08.gif 08.gif 08.gif 08.gif 08.gif 08.gif 08.gif 08.gif


Кажись работает!!!!!!!!!!!!!
SD

и говорят они дешевле MMC 1 ГБ около 100 р - ОБАЛДЕТЬ


08.gif 08.gif 08.gif 08.gif 08.gif 08.gif 08.gif 08.gif
Symbiosis
, ребята, то есть все таки можно подключить ммс или сд карточку к тини 2313 с 128 байтами озу ?
Nanobyte
Цитата(Symbiosis @ Sep 28 2008, 05:59) *
, ребята, то есть все таки можно подключить ммс или сд карточку к тини 2313 с 128 байтами озу ?

А почему бы и нет? Нужно будет сделать программный SPI и всё. Полноценную поддержку файловой системы сделать нелегко, ну а если просто читать и писать файлы, то нет проблем.
Например:
http://toxygen.net/tmp/?en
Кстати, неплохой плеер, я его собирал на Tiny2313 без всяких изменений, FUSE выставил, и всё.
defunct
Цитата(Пришелец @ Sep 24 2008, 12:46) *
Пример:
Вывод звука
Вывод графики на дисплей
Ну и работа с каким то файлом

одновременно.
Это много для микроконтроллера.

Побайтово IMHO захлебнется от постоянного ганяния адресов. (накладных расходов на порядок больше чем полезных данных).
Если есть возможность, поставьте внешнюю память (RAM) или возьмите МК потолше (ARM c 16-64k ram), тогда можно будет сделать приличный пул буферов к примеру 50x512, на все про все хватит.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.