sifadin 0 27 апреля, 2014 Опубликовано 27 апреля, 2014 · Жалоба Здравствуйте! Скажите мне где взять работающий проект USB флэшки чтобы SD или AT45, для STM Я работаю с Atmel'ом но тама такого нет и большие проблемы с мультипакетом Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jekin 0 27 апреля, 2014 Опубликовано 27 апреля, 2014 · Жалоба Keil MDK имеет примеры USB mass storage device для своих демо-плат. Вот один из них (для карты SD) SD_File.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 27 апреля, 2014 Опубликовано 27 апреля, 2014 · Жалоба 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 27 апреля, 2014 Опубликовано 27 апреля, 2014 · Жалоба DMA обычно делают, чтобы разгрузить проц на время обмена и чтобы быстрее шёл обмен. Если Вам оно не нужно, делайте без DMA. Работать должно и так и эдак. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 27 апреля, 2014 Опубликовано 27 апреля, 2014 · Жалоба DMA обычно делают, чтобы разгрузить проц на время обмена Вот именно. А здесь DMA используется, а CPU не разгружается никак. Здесь DMA непонятно зачем Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sifadin 0 27 апреля, 2014 Опубликовано 27 апреля, 2014 · Жалоба Спасибо, почитаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 27 апреля, 2014 Опубликовано 27 апреля, 2014 · Жалоба А здесь DMA используется, а CPU не разгружается никак. Здесь DMA непонятно зачем Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 27 апреля, 2014 Опубликовано 27 апреля, 2014 · Жалоба Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее. Толк есть всегда. Даже если и нет прерываний, что редко, то DMA наверняка закончит дело быстрее, чем процессор, которому нужно будет дергаться по каждому байту и двигать с места на место какие-то там указатели и счетчики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 28 апреля, 2014 Опубликовано 28 апреля, 2014 · Жалоба Что значит - никак? Если у вас прога не использует процессы в прерываниях - тогда дма бестолку, а если нет, тогда при использовании дма закрузка с флехи пойдет заметно быстрее. А если у меня устройство с батарейным питанием, то этот цикл будет тупо жрать и процессорное время (которое можно было использовать для других задач, если-бы использовался семафор для ожидания) и электроэнергию (которую можно было-бы сэкономить, если ждать на этом-же семафоре и класть CPU в сон в самом низкоприоритетном IDLE-процессе). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sifadin 0 28 апреля, 2014 Опубликовано 28 апреля, 2014 · Жалоба DMA обычно делают, чтобы разгрузить проц на время обмена и чтобы быстрее шёл обмен. Если Вам оно не нужно, делайте без DMA. Работать должно и так и эдак. Я честно говоря пока не прочитал, но у меня проблема в том что ПК запрашивает пакет больше чем буфер у МК Он запрашивает целый кластер, а буфер в четыре раза меньше Если запихнуть, то он выдает ошибку babble detected Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 29 апреля, 2014 Опубликовано 29 апреля, 2014 · Жалоба Он запрашивает целый кластер, а буфер в четыре раза меньше Если запихнуть, то он выдает ошибку babble detected Вообще-то минимальная единица - 1сектор. Его размер может быть кратный 512 байтам, минимум 512. Эти сведения хост получвает через IOCTL, после чего запрашивает согласно полученному значению. Т.е. Если девайс выдал 512 байт сектор, то хост не имеет права затребовать большее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться