Перейти к содержанию
    

SDcard & STM32

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

 

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

 

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

 

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

 

Спасибо

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Keil MDK имеет примеры USB mass storage device для своих демо-плат.

Вот один из них (для карты SD)

SD_File.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Keil MDK имеет примеры USB mass storage device для своих демо-плат.

Вот один из них (для карты SD)

Да уж.... Чувствуется, что писали это настоящие "профи"... :smile3046:

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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если Вам оно не нужно, делайте без DMA. Работать должно и так и эдак.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DMA обычно делают, чтобы разгрузить проц на время обмена

Вот именно. А здесь DMA используется, а CPU не разгружается никак. Здесь DMA непонятно зачем

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А здесь DMA используется, а CPU не разгружается никак. Здесь DMA непонятно зачем

Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее.

Толк есть всегда. Даже если и нет прерываний, что редко, то DMA наверняка закончит дело быстрее, чем процессор, которому нужно будет дергаться по каждому байту и двигать с места на место какие-то там указатели и счетчики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее.

А если у меня устройство с батарейным питанием, то этот цикл будет тупо жрать и процессорное время (которое можно было

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

этом-же семафоре и класть CPU в сон в самом низкоприоритетном IDLE-процессе).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если Вам оно не нужно, делайте без DMA. Работать должно и так и эдак.

Я честно говоря пока не прочитал, но у меня проблема в том что ПК запрашивает пакет больше чем буфер у МК

Он запрашивает целый кластер, а буфер в четыре раза меньше

Если запихнуть, то он выдает ошибку babble detected

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он запрашивает целый кластер, а буфер в четыре раза меньше

Если запихнуть, то он выдает ошибку babble detected

 

Вообще-то минимальная единица - 1сектор. Его размер может быть кратный 512 байтам, минимум 512.

Эти сведения хост получвает через IOCTL, после чего запрашивает согласно полученному значению.

Т.е. Если девайс выдал 512 байт сектор, то хост не имеет права затребовать большее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...