Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SDcard & STM32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sifadin
Здравствуйте!

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

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

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

Спасибо

Jekin
Keil MDK имеет примеры USB mass storage device для своих демо-плат.
Вот один из них (для карты SD)
jcxz
Цитата(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?
hd44780
DMA обычно делают, чтобы разгрузить проц на время обмена и чтобы быстрее шёл обмен.
Если Вам оно не нужно, делайте без DMA. Работать должно и так и эдак.
jcxz
Цитата(hd44780 @ Apr 27 2014, 15:59) *
DMA обычно делают, чтобы разгрузить проц на время обмена

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

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

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

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

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


Вообще-то минимальная единица - 1сектор. Его размер может быть кратный 512 байтам, минимум 512.
Эти сведения хост получвает через IOCTL, после чего запрашивает согласно полученному значению.
Т.е. Если девайс выдал 512 байт сектор, то хост не имеет права затребовать большее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.