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

 
 
 
Reply to this topicStart new topic
> SDcard & STM32, Mass Storage Device
sifadin
сообщение Apr 27 2014, 02:08
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Здравствуйте!

Скажите мне где взять работающий проект USB флэшки

чтобы SD или AT45, для STM

Я работаю с Atmel'ом но тама такого нет и большие проблемы с мультипакетом

Спасибо

Go to the top of the page
 
+Quote Post
Jekin
сообщение Apr 27 2014, 06:33
Сообщение #2


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

Группа: Свой
Сообщений: 91
Регистрация: 9-09-07
Из: Минск
Пользователь №: 30 406



Keil MDK имеет примеры USB mass storage device для своих демо-плат.
Вот один из них (для карты SD)

Прикрепленные файлы
Прикрепленный файл  SD_File.rar ( 63.02 килобайт ) Кол-во скачиваний: 33
 
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 27 2014, 08:46
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jekin @ Apr 27 2014, 12:33) *
Keil MDK имеет примеры USB mass storage device для своих демо-плат.
Вот один из них (для карты SD)

Да уж.... Чувствуется, что писали это настоящие "профи"... smile3046.gif
CODE
static BOOL ReadBlock (U32 bl, U8 *buf, U32 cnt) {
/* Read one or more 512 byte blocks from Flash Card. */
U32 i;

SDIO->DLEN = cnt * 512;
SDIO->DTIMER = cnt * DATA_RD_TOUT_VALUE;

SDIO->DCTRL = SDIO_DCTRL_DBLOCKSIZE_3 | SDIO_DCTRL_DBLOCKSIZE_0 |
SDIO_DCTRL_DMAEN | SDIO_DCTRL_DTDIR |
SDIO_DCTRL_DTEN ;

for (i = DMA_TOUT; i; i--) {
if (DMA2->LISR & DMA_LISR_TEIF3) {
break;
}

if (DMA2->LISR & DMA_LISR_TCIF3) {
if ((SDIO->STA & (SDIO_STA_DBCKEND|SDIO_STA_DATAEND)) == (SDIO_STA_DBCKEND|SDIO_STA_DATAEND)) {
/* Data transfer finished. */
return (__TRUE);
}
}
}
/* DMA Transfer timeout. */
return (__FALSE);
}

Интересно - зачем тут DMA?
Go to the top of the page
 
+Quote Post
hd44780
сообщение Apr 27 2014, 09:59
Сообщение #4


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



DMA обычно делают, чтобы разгрузить проц на время обмена и чтобы быстрее шёл обмен.
Если Вам оно не нужно, делайте без DMA. Работать должно и так и эдак.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 27 2014, 10:13
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(hd44780 @ Apr 27 2014, 15:59) *
DMA обычно делают, чтобы разгрузить проц на время обмена

Вот именно. А здесь DMA используется, а CPU не разгружается никак. Здесь DMA непонятно зачем
Go to the top of the page
 
+Quote Post
sifadin
сообщение Apr 27 2014, 13:54
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Спасибо, почитаю
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 27 2014, 17:21
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(jcxz @ Apr 27 2014, 14:13) *
А здесь DMA используется, а CPU не разгружается никак. Здесь DMA непонятно зачем

Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Apr 27 2014, 17:27
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(mantech @ Apr 27 2014, 18:21) *
Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее.

Толк есть всегда. Даже если и нет прерываний, что редко, то DMA наверняка закончит дело быстрее, чем процессор, которому нужно будет дергаться по каждому байту и двигать с места на место какие-то там указатели и счетчики.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 28 2014, 02:22
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(mantech @ Apr 27 2014, 23:21) *
Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее.

А если у меня устройство с батарейным питанием, то этот цикл будет тупо жрать и процессорное время (которое можно было
использовать для других задач, если-бы использовался семафор для ожидания) и электроэнергию (которую можно было-бы сэкономить, если ждать на
этом-же семафоре и класть CPU в сон в самом низкоприоритетном IDLE-процессе).
Go to the top of the page
 
+Quote Post
sifadin
сообщение Apr 28 2014, 15:58
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Цитата(hd44780 @ Apr 27 2014, 12:59) *
DMA обычно делают, чтобы разгрузить проц на время обмена и чтобы быстрее шёл обмен.
Если Вам оно не нужно, делайте без DMA. Работать должно и так и эдак.

Я честно говоря пока не прочитал, но у меня проблема в том что ПК запрашивает пакет больше чем буфер у МК
Он запрашивает целый кластер, а буфер в четыре раза меньше
Если запихнуть, то он выдает ошибку babble detected
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 29 2014, 11:14
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(sifadin @ Apr 28 2014, 19:58) *
Он запрашивает целый кластер, а буфер в четыре раза меньше
Если запихнуть, то он выдает ошибку babble detected


Вообще-то минимальная единица - 1сектор. Его размер может быть кратный 512 байтам, минимум 512.
Эти сведения хост получвает через IOCTL, после чего запрашивает согласно полученному значению.
Т.е. Если девайс выдал 512 байт сектор, то хост не имеет права затребовать большее.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:51
Рейтинг@Mail.ru


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