|
|
  |
SDcard & STM32, Mass Storage Device |
|
|
|
Apr 27 2014, 06:33
|
Частый гость
 
Группа: Свой
Сообщений: 91
Регистрация: 9-09-07
Из: Минск
Пользователь №: 30 406

|
Keil MDK имеет примеры USB mass storage device для своих демо-плат. Вот один из них (для карты SD)
|
|
|
|
|
Apr 27 2014, 08:46
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Jekin @ Apr 27 2014, 12:33)  Keil MDK имеет примеры USB mass storage device для своих демо-плат. Вот один из них (для карты SD) Да уж.... Чувствуется, что писали это настоящие "профи"... 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?
|
|
|
|
|
Apr 28 2014, 15:58
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698

|
Цитата(hd44780 @ Apr 27 2014, 12:59)  DMA обычно делают, чтобы разгрузить проц на время обмена и чтобы быстрее шёл обмен. Если Вам оно не нужно, делайте без DMA. Работать должно и так и эдак. Я честно говоря пока не прочитал, но у меня проблема в том что ПК запрашивает пакет больше чем буфер у МК Он запрашивает целый кластер, а буфер в четыре раза меньше Если запихнуть, то он выдает ошибку babble detected
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|