Пришелец 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Добрый день! :) Может кто в курсе? Можно ли читать MMC по одному байту с любого адреса. Можно установить длину блока - есть такая команда. Вопрос в том адрес блока в этом случае считается с учётом установленной длины или он всё равно всегда кратен 512 байт? А то уж больно геморно с ней работать буфферы по 512 байт отводить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bloodden 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба А зачем всё хранить? Считывайте весь блок, а нужные данные сохраняйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Ха в том то и вопрос. Пример: Вывод звука Вывод графики на дисплей Ну и работа с каким то файлом одновременно. т.е. требуется 512 *3 полтора килобайта. Это много для микроконтроллера. Работать с линейной памятью удобнее в моём случае. А скорость очень уж высокая и не требуется - готов пойти на потери скорости при побайтном считывании. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба А скорость очень уж высокая и не требуется - готов пойти на потери скорости при побайтном считывании. Так может просто прочитать без записи в ОЗУ нужное количество байт в секторе да и все? А потом уже читать куда надо? Кривовато, но как вариант... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Была такая мысль. Но это уже больно накладно. При выводе звука 16 кгц каждые 64 мс по spi читать 512 байт не получится интересно всё таки. при длине блока 1 байт как вычисляется адрес блока? приёдтся экспепримент наверное ставить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба приёдтся экспепримент наверное ставить Правильно бы было покурить спецификацию. Потому как эксперимент может дать, например, положительный результат на всех карточках, которые есть под рукой, а на каких-нибудь других карточках (уже у заказчика) - отрицательный. Я в том смысле, что возможны недетсткие грабли... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба мысль дельная :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Длина блока зашита в карточку и работать с другой длиной блока не будет. Читать карточку можно только блоками. С произвольного адреса - нельзя. Для карточек более 2Гбайт размер блока может быть 1024 байта. Не старайтесь решить задачу вывода изображения и звука на AVR. Возьмите дешёвый ARM, например LPC2103. Сделаете гораздо быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба тогда смысл команды установка длины блока ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Ну, теоретически карточка может ее поддерживать. Но на практике полагаться на это нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iar 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 (изменено) · Жалоба По два байта я читал. Но учтите, что это будет очень-очень медленно. Изменено 24 сентября, 2008 пользователем Ivan A-R Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sensor_ua 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Читать карточку можно только блоками. Неправильно. См. описание параметра READ_BL_PARTIAL в регистре CSD Не старайтесь решить задачу вывода изображения и звука на AVR. Возьмите дешёвый ARM, например LPC2103. Сделаете гораздо быстрее. Я бы не был столь категоричен. http://pol-sem.narod.ru/polymuson/polymuson.htm Хотя сам бы делал на ARM:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Длина блока зашита в карточку и работать с другой длиной блока не будет. Читать карточку можно только блоками. С произвольного адреса - нельзя. Для карточек более 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 0 24 сентября, 2008 Опубликовано 24 сентября, 2008 · Жалоба Неправильно. См. описание параметра READ_BL_PARTIAL в регистре CSD Я бы не был столь категоричен. http://pol-sem.narod.ru/polymuson/polymuson.htm Хотя сам бы делал на ARM:) Есть еще такое: http://electronix.ru/forum/index.php?showtopic=43180&hl= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 25 сентября, 2008 Опубликовано 25 сентября, 2008 (изменено) · Жалоба Спасибо!!!!!!! т.е. можно для карт меньше 2 Гб по времени конечно да немного накладно получится 1. Установка длины блока (т.к. в других ф-циях длина нужна512) 2. CMD17 чтение одного ну или двух байт в среднем если на команду допустить передачу 10ти SPI байт то опять с запасом передать для доступа к байту нужно 30 байт при spi clock = CLC/2 при 16 МГЦ общее время получится примерно 15 мкс при прерываниях порядка 64 мкс вполне приемлимо!!! Может можно обойтись и без установки длины блока просто останавливать приём байт по SPI ??? - нужно будет почитать :) Ещё раз спасибо! Изменено 25 сентября, 2008 пользователем Пришелец Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться