|
SD card: 512 blocks limit. |
|
|
|
 |
Ответов
|
May 7 2015, 21:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(pitt @ May 7 2015, 23:44)  sometimes(5%) access time is more than 10 times greater than average. I guess it is normal. I did not ever bother to test access time for each of that small blocks because I needed *highest* possible write speed which is achievable with BIG chunks only (got over 100 Mbps with regular class-10 or UHS-I cards). Цитата(pitt @ May 7 2015, 23:44)  And the last thing: as soon as I'm trying to write >512 blocks I'm getting instantly FEIF... You'd better try STMcube HAL. It works (with some issues time to time discussed here). Also you can try Chibios alone with its HAL.
|
|
|
|
|
May 8 2015, 00:00
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(Dr.Alex @ May 7 2015, 17:26)  You'd better try STMcube HAL. It works (with some issues time to time discussed here). Also you can try Chibios alone with its HAL. Подобное творение - STMcube HAL, можно рассматривать исключительно как референс, что я и делал, но ответов на многочисленные вопросы, никак не раскрытые в Reference Manual оно не дает. Chibios тоже использую, но предпочитаю освоить "материальную часть", а не полагаться на других. Пример: Код #if (defined(STM32F4XX) || defined(STM32F2XX)) /* Wait until DMA channel enabled to be sure that all data transferred.*/
/***********************************************/ while (sdcp->dma->stream->CR & STM32_DMA_CR_EN); /***********************************************/
/* DMA event flags must be manually cleared.*/ dmaStreamClearInterrupt(sdcp->dma);
SDIO->ICR = STM32_SDIO_ICR_ALL_FLAGS; SDIO->DCTRL = 0; osalSysUnlock();
/* Wait until interrupt flags to be cleared.*/ /*while (((DMA2->LISR) >> (sdcp->dma->ishift)) & STM32_DMA_ISR_TCIF) dmaStreamClearInterrupt(sdcp->dma);*/ #else Ну да, прекрасный образчик лупа: пусть остальные занимаются прерываниями пока мы ждем-с... И, кстати, а зачем флаги ошибок проверять, когда можно все почистить? Может у меня не свежая версия или ну фантазии, например, не хватает... Могу и другие примеры привести... Если у Вас есть код/образчик многоблоковой записи через DMA, буду очень признателен за возможность ознакомиться: есть вопросы с очередностью операций и, особенно, с флагом FEIE. Спасибо за ответ.
Сообщение отредактировал pitt - May 8 2015, 00:21
--------------------
|
|
|
|
|
May 8 2015, 12:30
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(AHTOXA @ May 8 2015, 00:18)  Ссылка на отличные примеры по работе с SDIO: вот. Мне они очень помогли. Thank you. I've seen that but didn't find some answers: Цитата //Check if the DMA is disabled (SDIO disables the DMA after it is done with it) Could you please point me where this is in RM? Код //Check if the DMA is disabled (SDIO disables the DMA after it is done with it) while (DMA2_Stream3->CR & DMA_SxCR_EN) {}; Very nice loop Код if (DMA2->LISR & (DMA_LISR_TCIF3 | DMA_LISR_TEIF3 | DMA_LISR_DMEIF3 | DMA_LISR_FEIF3)) { if (!(DMA2->LISR & DMA_LISR_TCIF3)) {//A DMA error has occured. Panic! Always have FEIF set!!! Why? How to get rid of it? Keil example doesn't look at this flag at all. Thank you for replay though. Цитата(jcxz @ May 8 2015, 03:44)  Thank you. This is the snippet from my code: Код void DMA2_Stream3_IRQHandler (void) { event_dma = true; *(uint8_t *)&dma_isr = DMA2->LISR>>DMA_ISR_STREAM_3; if (_sdio->dma_isr != NULL) (*_sdio->dma_isr)(_sdio); DMA2->LIFCR &= (DMA_LIFCR_CTCIF3|DMA_LIFCR_CHTIF3|DMA_LIFCR_CTEIF3|DMA_LIFCR_CDMEIF3|DMA_LIF CR_CFEIF3); DMA2_Stream3->CR &= ~(DMA_SxCR_TCIE |DMA_SxCR_TEIE); DMA2_Stream3->FCR &= ~DMA_SxFCR_FEIE; } _sdio->dma_isr is NULL When event_dma is noticed dma_isr has only FEIF set but DMA->LISR has FEIF and TCIF even they both were cleaned in the handler...
Сообщение отредактировал pitt - May 8 2015, 13:23
--------------------
|
|
|
|
|
May 8 2015, 18:31
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(pitt @ May 8 2015, 17:30)  Could you please point me where this is in RM? 31.3.2 SDIO APB2 interface. Там пример транзакции DMA. Да это и логично, ведь в случае с SDIO у нас периферийный модуль является flow controller-ом. Цитата(pitt @ May 8 2015, 17:30)  Very nice loop  Ой, да ладно. Понятно же, что это в целях упрощения примера. Никто не мешает включить прерывание и взводить там какой-то флаг. Цитата(pitt @ May 8 2015, 17:30)  Always have FEIF set!!! Why? How to get rid of it? Keil example doesn't look at this flag at all. Посмотрел у себя - я тоже не смотрю на этот флаг.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
pitt SD card: 512 blocks limit. May 7 2015, 20:44     pitt Цитата(AHTOXA @ May 8 2015, 14:31) 31.3.2... May 8 2015, 19:42      AHTOXA Цитата(pitt @ May 9 2015, 00:42) This fla... May 8 2015, 19:53       pitt Цитата(AHTOXA @ May 8 2015, 15:53) Я не с... May 8 2015, 20:22        AHTOXA Цитата(pitt @ May 9 2015, 01:22) Wait a m... May 9 2015, 06:04         pitt Поздравляю всех с днем нашей общей Победы. Вечная ... May 9 2015, 12:10       pitt Цитата(AHTOXA @ May 8 2015, 15:53) Я не с... May 10 2015, 14:49        AHTOXA Да, конечно же я имел в виду, что больше 512 блоко... May 10 2015, 14:58         pitt Цитата(AHTOXA @ May 10 2015, 10:58) Да, к... May 11 2015, 02:21          AHTOXA Цитата(pitt @ May 11 2015, 07:21) Можно, ... May 12 2015, 04:06 jcxz Цитата(pitt @ May 8 2015, 02:44) I don... May 8 2015, 07:44 Golikov A. Тоже хочу делать роботов на гусенках.... даже могу... May 8 2015, 20:44 jcxz Цитата(Golikov A. @ May 9 2015, 02:44) То... May 9 2015, 11:20 Golikov A. они торопятся с чипами, так что их не хватает, оши... May 11 2015, 09:40 pitt Цитата(Golikov A. @ May 11 2015, 05:40) .... May 11 2015, 17:02 Golikov A. ссылки...
ну типа
http://forum.easyelectronics.ru... May 12 2015, 05:01 pitt Проблема в том, что я не могу просимулировать ошиб... May 12 2015, 10:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|