реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> MMC по 1 байту, Работа с MMC на слабом MCU
Пришелец
сообщение Sep 24 2008, 09:19
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Добрый день! smile.gif

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

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

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



А то уж больно геморно с ней работать буфферы по 512 байт отводить.
Go to the top of the page
 
+Quote Post
bloodden
сообщение Sep 24 2008, 09:30
Сообщение #2


Бывалый
***

Группа: Validating
Сообщений: 375
Регистрация: 19-10-05
Из: Kiev, UA
Пользователь №: 9 853



А зачем всё хранить? Считывайте весь блок, а нужные данные сохраняйте.


--------------------
Заходите кому надо на мой сайт
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Sep 24 2008, 09:46
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Ха в том то и вопрос.

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

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

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

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

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

А скорость очень уж высокая и не требуется - готов пойти на потери скорости при побайтном считывании.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 24 2008, 09:53
Сообщение #4


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



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


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


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Sep 24 2008, 09:59
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Была такая мысль.

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

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


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

приёдтся экспепримент наверное ставить wacko.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 24 2008, 10:06
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



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


Правильно бы было покурить спецификацию. Потому как эксперимент может дать, например, положительный результат на всех карточках, которые есть под рукой, а на каких-нибудь других карточках (уже у заказчика) - отрицательный. Я в том смысле, что возможны недетсткие грабли...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Sep 24 2008, 10:34
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



мысль дельная a14.gif
Go to the top of the page
 
+Quote Post
etoja
сообщение Sep 24 2008, 10:58
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Длина блока зашита в карточку и работать с другой длиной блока не будет.
Читать карточку можно только блоками. С произвольного адреса - нельзя.
Для карточек более 2Гбайт размер блока может быть 1024 байта.
Не старайтесь решить задачу вывода изображения и звука на AVR.
Возьмите дешёвый ARM, например LPC2103. Сделаете гораздо быстрее.
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Sep 24 2008, 11:03
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



тогда смысл команды
установка длины блока

???
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 24 2008, 11:15
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Ну, теоретически карточка может ее поддерживать. Но на практике полагаться на это нельзя.
Go to the top of the page
 
+Quote Post
Ivan A-R
сообщение Sep 24 2008, 11:28
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 21-06-07
Из: Saint-Petersburg
Пользователь №: 28 607



По два байта я читал. Но учтите, что это будет очень-очень медленно.

Сообщение отредактировал Ivan A-R - Sep 24 2008, 11:29
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 24 2008, 11:29
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Читать карточку можно только блоками.

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

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


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 24 2008, 11:30
Сообщение #13


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(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.
Go to the top of the page
 
+Quote Post
KolyanV
сообщение Sep 24 2008, 19:13
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 1-06-05
Пользователь №: 5 621



Цитата(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=
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Sep 25 2008, 05:10
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Спасибо!!!!!!!

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


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

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

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

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

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

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


Ещё раз спасибо!

Сообщение отредактировал Пришелец - Sep 25 2008, 05:16
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 25 2008, 06:07
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



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


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Sep 25 2008, 06:22
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



ХМ...

А на каких картах не работало случайно размером не более 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 ничего не говорится.
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 25 2008, 07:31
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
А на каких картах не работало случайно размером не более 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).


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Sep 25 2008, 09:42
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Да согласен у меня даже на 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
Go to the top of the page
 
+Quote Post
Symbiosis
сообщение Sep 28 2008, 01:59
Сообщение #20





Группа: Участник
Сообщений: 6
Регистрация: 26-09-08
Пользователь №: 40 496



, ребята, то есть все таки можно подключить ммс или сд карточку к тини 2313 с 128 байтами озу ?
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Sep 28 2008, 09:03
Сообщение #21


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



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

А почему бы и нет? Нужно будет сделать программный SPI и всё. Полноценную поддержку файловой системы сделать нелегко, ну а если просто читать и писать файлы, то нет проблем.
Например:
http://toxygen.net/tmp/?en
Кстати, неплохой плеер, я его собирал на Tiny2313 без всяких изменений, FUSE выставил, и всё.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 29 2008, 15:32
Сообщение #22


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Пришелец @ Sep 24 2008, 12:46) *
Пример:
Вывод звука
Вывод графики на дисплей
Ну и работа с каким то файлом

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

Побайтово IMHO захлебнется от постоянного ганяния адресов. (накладных расходов на порядок больше чем полезных данных).
Если есть возможность, поставьте внешнюю память (RAM) или возьмите МК потолше (ARM c 16-64k ram), тогда можно будет сделать приличный пул буферов к примеру 50x512, на все про все хватит.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 14:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01571 секунд с 7
ELECTRONIX ©2004-2016