Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2019, 23:03

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 224 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 19 мар 2015, 05:46 
Старожил
Аватара пользователя

Зарегистрирован: 17 дек 2014, 23:08
Сообщения: 599
Откуда: Nowhere
Oxford писал(а):
Т.е. получается в функции записи, вы сразу отправляете команду CMD24/25 и потом данные передаете? Никаких других команд не отправляете?

Да, если размер блока 512, то single block команда, иначе multiple block. И по окончании передачи, если размер более 512, то еще CMD12, чтобы остановить передачу.

Размер блока устанавливается при инициализации карты, нет необходимости каждый раз это делать. Меня удивляло, зачем у ST перед каждым чтением дается команда на размер блока, похоже, это сделано для того, чтобы гарантированно работали чтение/запись, т.к. есть пара функций, которые меняют размер блока (чтение SCR и чтение статуса, который 512 бит). Надо просто помнить об этом... А команда с количетсвом блоков на передачу (CMD23), насколько я помню, поддерживается не всеми картами и введена для очень быстрых скоростей, типа UHS, чтобы хост не парился с таймингами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 19 мар 2015, 15:59 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
А почему прерывания не срабатывают? Я уже всяко пробывал настраивать. Ни в какую.
Ни от SDIO ни от DMA их нет. Хотя другие прерывания у меня работают. Допустим SPI с DMA работает.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 19 мар 2015, 17:05 
Старожил
Аватара пользователя

Зарегистрирован: 17 дек 2014, 23:08
Сообщения: 599
Откуда: Nowhere
Работают прерывания от SDIO. Я их не использую, но при отладке было дело. Сбрасывал нужные биты в SDIO_ICR, в SDIO_MASK ставил единички на нужных прерываниях и все работало.
Ну и DMA само собой. DMA TC срабатывает раньше, чем окончание передачи по SDIO, т.к. DMA забивает FIFO буфер и отваливается с прерыванием TC, а SDIO еще занят передачей того, что у него в FIFO.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 мар 2015, 19:38 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
А каким макаром вы обрабатываете мультисекторность? Какая фат у вас поддерживает это?
Ведь размер сектора фиксирован у карточек MicroSD и жесткие диски и он равняется 512, карточки не дают изменить размер сектора больше 512.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 мар 2015, 22:37 
Старожил
Аватара пользователя

Зарегистрирован: 17 дек 2014, 23:08
Сообщения: 599
Откуда: Nowhere
Не совсем понял вопрос про мультисекторность. Даже если FAT сектор 32к, то работа с карточкой все равно кусками по 512 байт. А логику работы с секторами уже берет на себя код работы с FAT. Я лично использую DOSFS by "Lewin A.R.W. Edwards". В свое время не смог завести FatFS из-за косяков кокоса, перепробовал несколько других реализаций, больше всего понравилась эта. Подправил косячки с FAT12, добавил пару фишек: время доступа к файлу и определение свободного места. Работает, мне хватает.
Также заводил USB MSC - там хост всем рулит, не помню уже как там это все устроено, но даже если сектор FAT большой, то чтение/запись на карту все равно по 512 байт. Просто если сообразить размер буфера под это дело побольше, то можно выиграть немного в скорости за счет мультиблочных инструкций.

Oxford писал(а):
карточки не дают изменить размер сектора больше 512.

2Гб SDSC карты, кажется, позволяют до килобайта задать размер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 мар 2015, 22:43 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5655
LonelyWolf писал(а):
В свое время не смог завести FatFS из-за косяков кокоса

Вот здесь бы одуматься и забросить кокос, но мыши упертые и продолжают жрать кактус... :)))))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 мар 2015, 22:47 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
LonelyWolf писал(а):
Не совсем понял вопрос про мультисекторность. Даже если FAT сектор 32к, то работа с карточкой все равно кусками по 512 байт. А логику работы с секторами уже берет на себя код работы с FAT. Я лично использую DOSFS by "Lewin A.R.W. Edwards". В свое время не смог завести FatFS из-за косяков кокоса, перепробовал несколько других реализаций, больше всего понравилась эта. Подправил косячки с FAT12, добавил пару фишек: время доступа к файлу и определение свободного места. Работает, мне хватает.
Также заводил USB MSC - там хост всем рулит, не помню уже как там это все устроено, но даже если сектор FAT большой, то чтение/запись на карту все равно по 512 байт. Просто если сообразить размер буфера под это дело побольше, то можно выиграть немного в скорости за счет мультиблочных инструкций.

Oxford писал(а):
карточки не дают изменить размер сектора больше 512.

2Гб SDSC карты, кажется, позволяют до килобайта задать размер.


Пробывал даже 16G карта не изменяет.
Ну если читать буфер размером 16384 это 32 блока.
Т.е. за один вызов функцией ReadMultiBlock она должна прочитать 32 * 512 блоков.
FAT в таком случае должна правильно высчитывать адресацию секторов с учетом буфера.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 мар 2015, 23:22 
Старожил
Аватара пользователя

Зарегистрирован: 17 дек 2014, 23:08
Сообщения: 599
Откуда: Nowhere
Oxford писал(а):
Пробывал даже 16G карта не изменяет.

И не должна, 16G - это SDHC, у них сектор зажат в 512 байт. Я говорил именно про SDSC (SD standard capacity) объемом 1-2G, они позволяют размер блока до килобайта задать.

dosikus_2 писал(а):
Вот здесь бы одуматься и забросить кокос, но мыши упертые и продолжают жрать кактус... :)))))))

Откуда столько ненависти к кокосу? Ну был косяк у чуваков, почему-то для STM32L1 с кешем до 128к они код инициализации bss и data закомментировали. От этого FatFS при старте в hardfault выпадал. Зато разобрался... Ну и нравится мне редактор кода из Eclipse.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 мар 2015, 23:34 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
CooCox рулит.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 мар 2015, 23:45 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5655
LonelyWolf писал(а):
Ну и нравится мне редактор кода из Eclipse.


Собственно причем здесь кокос ? Не хватает мозгов осилить настройку проекта под клипсину? :)))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 мар 2015, 23:54 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
У вас SDIO на STM32 переключается в режим 4 бита?
Возможно увидеть осцилограммы линий SDIO в режиме 4 бита и записи буфера 2048 в режиме мультиблок?
У меня не переключается, вот осцилограмма http://rghost.ru/6MTCJ75fg.view
Драйвер используется стандартный от STM.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 21 мар 2015, 00:04 
Старожил
Аватара пользователя

Зарегистрирован: 17 дек 2014, 23:08
Сообщения: 599
Откуда: Nowhere
Oxford писал(а):
А каким макаром вы обрабатываете мультисекторность? Какая фат у вас поддерживает это?

Кажется, понял в чем вопрос был... DOSFS мультиблочный трансфер не использует, там только по одной штуке за раз.
А вот где мультиблок себя показал - это в USB MSC. Там комп просит писать/читать куски до 16Кбайт за раз. Вот тут оно и пригодилось. Например чтение: хост дает стартовый адрес и объем данных. Контроллер дает команду карте на мультиблок чтение и вычитывает данные в свой буфер. Попутно, по мере поступления данных, выплевывает их в USB. Таким образом получается прирост в скорости, т.к. нет ожидания между блоками по 512 байт, как это было бы в случае single block передачи.
У карты есть понятие блока - объем данных, которым она оперирует, а сектор - это уже организация более высокого уровня (FAT) и он не имеет прямого отношения к карте памяти... как-то так.

Oxford писал(а):
У вас SDIO на STM32 переключается в режим 4 бита?

Да, переключается. Таким вот образом:
Код:
if (SDCard.Type != SDCT_MMC) {
   // MMC умеет либо 1, либо 8 бит...
   // SCR регистр вычитывается при инициализации, а здесь проверям, умеет ли карта 4-бит шину
   if (SDCard.SCR[1] & 0x05) SD_SetBusWidth(SD_BUS_4BIT); // ACMD6
}

Осциллограммы сам бы хотел увидеть, но, к сожалению, нет прибора, чтобы посмотреть :(
То, что переключается - уверен, т.к. скорость увеличивается и если дать карте команду на переход в 4-бит режим, а периферию SDIO не перевести, то дальше ничего не работает.
Ну и в регистре каком-то у карты видно, что она в 4-бит режим перешла (не помню только уже где это смотреть).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 21 мар 2015, 00:46 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
LonelyWolf писал(а):
Oxford писал(а):
А каким макаром вы обрабатываете мультисекторность? Какая фат у вас поддерживает это?

Кажется, понял в чем вопрос был... DOSFS мультиблочный трансфер не использует, там только по одной штуке за раз.
А вот где мультиблок себя показал - это в USB MSC. Там комп просит писать/читать куски до 16Кбайт за раз. Вот тут оно и пригодилось. Например чтение: хост дает стартовый адрес и объем данных. Контроллер дает команду карте на мультиблок чтение и вычитывает данные в свой буфер. Попутно, по мере поступления данных, выплевывает их в USB. Таким образом получается прирост в скорости, т.к. нет ожидания между блоками по 512 байт, как это было бы в случае single block передачи.
У карты есть понятие блока - объем данных, которым она оперирует, а сектор - это уже организация более высокого уровня (FAT) и он не имеет прямого отношения к карте памяти... как-то так.

Oxford писал(а):
У вас SDIO на STM32 переключается в режим 4 бита?

Да, переключается. Таким вот образом:
Код:
if (SDCard.Type != SDCT_MMC) {
   // MMC умеет либо 1, либо 8 бит...
   // SCR регистр вычитывается при инициализации, а здесь проверям, умеет ли карта 4-бит шину
   if (SDCard.SCR[1] & 0x05) SD_SetBusWidth(SD_BUS_4BIT); // ACMD6
}

Осциллограммы сам бы хотел увидеть, но, к сожалению, нет прибора, чтобы посмотреть :(
То, что переключается - уверен, т.к. скорость увеличивается и если дать карте команду на переход в 4-бит режим, а периферию SDIO не перевести, то дальше ничего не работает.
Ну и в регистре каком-то у карты видно, что она в 4-бит режим перешла (не помню только уже где это смотреть).


Статусный регистр последние два бита.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 21 мар 2015, 02:54 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
Вот так выглядит анализ SDIO в режиме 4 бита.
http://rghost.ru/8WcZjRkJ4.view

_________________
RADIOWOLF.RU


Последний раз редактировалось Oxford 24 мар 2015, 16:12, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 24 мар 2015, 16:04 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
Мои функции чтения с помощью DMA, надеюсь кому то будет полезно:

Код:

//Отправляет команду
void SDIO_CMD(uint32_t arg, uint8_t cmd, uint16_t resp)
{
  SDIO->ARG = arg;
  SDIO->CMD = resp | cmd | SDIO_CMD_CPSMEN;
  if (resp = 0)
     while (!(SDIO->STA & (SDIO_STA_CMDSENT))); //Без ответа
  else
     while (!(SDIO->STA & (SDIO_STA_CMDREND))); //Ждать ответа

}

// Режим одиночного блока
SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize)
{
  SDIO->DTIMER = SD_DATATIMEOUT;
  SDIO->DLEN   = 512;
  SDIO->DCTRL  = SDIO_DCTRL_DTDIR | (9 << 4) | SDIO_DCTRL_DTEN | SDIO_DCTRL_DMAEN;

  if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) ReadAddr >>= 9;

  //Отправляем команду CMD17
  SDIO_CMD(ReadAddr, SD_CMD_READ_SINGLE_BLOCK, SDIO_CMD_WAITRESP_0);

  //Настраиваем DMA
  DMA2_Channel4->CNDTR = BlockSize / 4;
  DMA2_Channel4->CPAR = &SDIO->FIFO;
  DMA2_Channel4->CMAR = readbuff;
  DMA2_Channel4->CCR = (DMA_CCR4_MINC | DMA_CCR4_PL_1 | DMA_CCR4_MSIZE_1 | DMA_CCR4_PSIZE_1 | DMA_CCR4_EN);

  //Ждем пока не будет закончен прием данных
  while ((SDIO->STA & SDIO_STA_RXACT));

  //Выключаем DMA
  DMA2_Channel4->CCR &= ~DMA_CCR4_EN;
  SDIO->DCTRL = 0;
}

//Режим мультичтения, 1 блок читается.
SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize)
{
     SDIO->DTIMER = SD_DATATIMEOUT;
     SDIO->DLEN   = 512;
     SDIO->DCTRL  = SDIO_DCTRL_DTDIR | (9 << 4) | SDIO_DCTRL_DTEN | SDIO_DCTRL_DMAEN;

     if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) ReadAddr >>= 9;

     //Отправляем команду CMD17
     SDIO_CMD(ReadAddr, SD_CMD_READ_MULT_BLOCK, SDIO_CMD_WAITRESP_0);

     //Настраиваем DMA
     DMA2_Channel4->CNDTR = BlockSize / 4;
     DMA2_Channel4->CPAR = &SDIO->FIFO;
     DMA2_Channel4->CMAR = readbuff;
     DMA2_Channel4->CCR = (DMA_CCR4_MINC | DMA_CCR4_PL_1 | DMA_CCR4_MSIZE_1 | DMA_CCR4_PSIZE_1 | DMA_CCR4_EN);

     //Ждем пока данные будут приняты
     while ((SDIO->STA & SDIO_STA_RXACT));
     //Останавливаем передачу
     SDIO_CMD(0, SD_CMD_STOP_TRANSMISSION, SDIO_CMD_WAITRESP_0);

     //Выключаем DMA
     DMA2_Channel4->CCR &= ~DMA_CCR4_EN;
     SDIO->DCTRL = 0;
}



Функции проверены и работают на STM32F103. необходимый минимум и пример какой алгоритм должен выполняться(не сто процентный), но пока работает.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 29 мар 2015, 01:20 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2348
Oxford писал(а):
не обязательно SPL, камень STM32F103RET6. Поделитесь проектом где отлично пишит, а то тут умников хватает.
дабы потестировать SDIO с мультиблоком.
Любой работающий проект на камне 103 через SDIO с мультизаписью.
Мне скорость нужна 5мб/сек, так как записываем MJPEG видео с камеры.

У меня по SPI на частоте 36мгц запись 256кб в секунду с DMA.
А чтение 1МБ в секунду.

Ну я вроде разобрался, мультиблочная запись работает в режиме 4b, могу поделиться.
Карта на 2 Гига.
Но интересные вылезли косяки, при использовании FreeRTOS.
Создал три потока с ожиданиями while и бесконечными циклами, а один поток звук воспроизводит с карточки (wav) - начались проблемы!
Зависать стал где то на опросе флага DMA при чтении.
Почитал маленько про настройку FreeRTOS, вставил, где возможно - переключение на другие потоки - вроде работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 30 мар 2015, 07:34 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2348
После попытки считать из файла за раз больше, чем 1024 байт - ничего не считалось, а файл был "запорот".
Это баг или фича?
Или это только у меня такое?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 30 мар 2015, 07:37 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2348
Oxford писал(а):
Мои функции чтения с помощью DMA, надеюсь кому то будет полезно:

Код:

//Отправляет команду
void SDIO_CMD(uint32_t arg, uint8_t cmd, uint16_t resp)
{
  SDIO->ARG = arg;
  SDIO->CMD = resp | cmd | SDIO_CMD_CPSMEN;
  if (resp = 0)
     while (!(SDIO->STA & (SDIO_STA_CMDSENT))); //Без ответа
  else
     while (!(SDIO->STA & (SDIO_STA_CMDREND))); //Ждать ответа

}

// Режим одиночного блока
SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize)
{
  SDIO->DTIMER = SD_DATATIMEOUT;
  SDIO->DLEN   = 512;
  SDIO->DCTRL  = SDIO_DCTRL_DTDIR | (9 << 4) | SDIO_DCTRL_DTEN | SDIO_DCTRL_DMAEN;

  if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) ReadAddr >>= 9;

  //Отправляем команду CMD17
  SDIO_CMD(ReadAddr, SD_CMD_READ_SINGLE_BLOCK, SDIO_CMD_WAITRESP_0);

  //Настраиваем DMA
  DMA2_Channel4->CNDTR = BlockSize / 4;
  DMA2_Channel4->CPAR = &SDIO->FIFO;
  DMA2_Channel4->CMAR = readbuff;
  DMA2_Channel4->CCR = (DMA_CCR4_MINC | DMA_CCR4_PL_1 | DMA_CCR4_MSIZE_1 | DMA_CCR4_PSIZE_1 | DMA_CCR4_EN);

  //Ждем пока не будет закончен прием данных
  while ((SDIO->STA & SDIO_STA_RXACT));

  //Выключаем DMA
  DMA2_Channel4->CCR &= ~DMA_CCR4_EN;
  SDIO->DCTRL = 0;
}

//Режим мультичтения, 1 блок читается.
SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize)
{
     SDIO->DTIMER = SD_DATATIMEOUT;
     SDIO->DLEN   = 512;
     SDIO->DCTRL  = SDIO_DCTRL_DTDIR | (9 << 4) | SDIO_DCTRL_DTEN | SDIO_DCTRL_DMAEN;

     if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) ReadAddr >>= 9;

     //Отправляем команду CMD17
     SDIO_CMD(ReadAddr, SD_CMD_READ_MULT_BLOCK, SDIO_CMD_WAITRESP_0);

     //Настраиваем DMA
     DMA2_Channel4->CNDTR = BlockSize / 4;
     DMA2_Channel4->CPAR = &SDIO->FIFO;
     DMA2_Channel4->CMAR = readbuff;
     DMA2_Channel4->CCR = (DMA_CCR4_MINC | DMA_CCR4_PL_1 | DMA_CCR4_MSIZE_1 | DMA_CCR4_PSIZE_1 | DMA_CCR4_EN);

     //Ждем пока данные будут приняты
     while ((SDIO->STA & SDIO_STA_RXACT));
     //Останавливаем передачу
     SDIO_CMD(0, SD_CMD_STOP_TRANSMISSION, SDIO_CMD_WAITRESP_0);

     //Выключаем DMA
     DMA2_Channel4->CCR &= ~DMA_CCR4_EN;
     SDIO->DCTRL = 0;
}



Функции проверены и работают на STM32F103. необходимый минимум и пример какой алгоритм должен выполняться(не сто процентный), но пока работает.



if (resp = 0)
while (!(SDIO->STA & (SDIO_STA_CMDSENT))); //Без ответа
else
while (!(SDIO->STA & (SDIO_STA_CMDREND))); //Ждать ответа


Это ошибка (нужно ==) или Вы тут действительно присваиваете значение переменной?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 30 мар 2015, 08:41 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
Просто проверяю на ноль. Молодец, внимательный.)

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 30 мар 2015, 10:32 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2348
Oxford писал(а):
Просто проверяю на ноль. Молодец, внимательный.)

А по поводу этого?
Цитата:
После попытки считать из файла за раз больше, чем 1024 байт - ничего не считалось, а файл был "запорот".
Это баг или фича?
Или это только у меня такое?


Ща вообще карта сдохла (поработала немного ещё)!
Может просто в ней причина?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 30 мар 2015, 11:29 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
Ну через SDIO врядли вы ее убьете или еще что-то сделаете неправильным кодингом.
Либо питание или скачки напряжения либо карта такая бракованная.
А вы попробуйте ее вставьте в кардридер и форматните в виндовс. Может оживет.
Если карта целая, а данные у FAT повреждены, то проверяйте код.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 30 мар 2015, 20:30 
Старожил
Аватара пользователя

Зарегистрирован: 17 дек 2014, 23:08
Сообщения: 599
Откуда: Nowhere
Провел эксперимент на скорость чтения (камень STM32L1 32MHz, SDIO 4-бит).
Чтение single block (512байт):
16МГц 1.774МБ/с
24МГц 1.927МБ/с
повышение частоты SDIO почти в два раза дает очень слабый прирост.
Чтение multiple block (2048байт):
16МГц 3.401МБ/с
24МГц 3.401МБ/с
гм, разницы вообще нет.
Чтение multiple block (24MГц):
блок 8кБайт 4.682МБ/с
блок 16кБайт 4.997МБ/с
блок 32кБайт 5.170МБ/с

итог: multiple block рулит :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 30 мар 2015, 22:40 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4274
Откуда: Кемеровская область, Киселевск
SDIO по спецификации на частоте 25мгц максимум 6МБ/сек, дальше идет переключение HighSpeed 50мгц
Есть еще высокоскоростные MMC карты, там и 8 бит можно и скорости поинтересней на 25мгц.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 апр 2015, 19:56 
Только пришел

Зарегистрирован: 20 апр 2015, 19:17
Сообщения: 10
Sorry, I don't have russian keyboard...
I'm trying to write example program to access SDHC card without external libraries. Yes, it is the requirement.
Was able to talk to my cards and gather information but unable to read single block. Could you please help me to figure this issue out?
Here is the code which isn't working:
Код:
uint8_t rd_abs_block (uint32_t *buf, uint32_t blk) {
  uint8_t    i, err;
  uint32_t   r1;
 
  SDIO->DLEN    = CARD_BLOCK_SIZE;
  SDIO->DTIMER  = CARD_BLOCK_SIZE * DATA_RD_TMO_VALUE;
  SDIO->DCTRL   = SDIO_BLK_SIZE_512 | SDIO_DCTRL_RD | SDIO_DCTRL_DTEN;
  if ((err = sdio_cmd(SDIO_COMMAND_READ_BLOCK, blk, &r1)) != SDIO_LOW_LEVEL_SUCCESS) return err;

  for (;;) {
    r1 = SDIO->STA;
    if (r1 & SDIO_STA_DTIMEOUT) {
      err = SDIO_LOW_LEVEL_DATA_TMO;
      break;
    }
    if (r1 & SDIO_STA_DCRCFAIL) {
      err = SDIO_LOW_LEVEL_DCRC_FAIL; // this is the error I'm getting and it is always after 0x82 bytes
      break;
    }
    if (r1 & SDIO_STA_RXOVERR) {
      err = SDIO_LOW_LEVEL_RXOVERR;
      break;
    }
    if (r1 & SDIO_STA_STBITERR) {
      err = SDIO_LOW_LEVEL_START_BIT_ERR;
      break;
    }
    if (r1 & SDIO_STA_RXFIFOHF)
      for (i = 0; i < SD_FIFO_SIZE/4; i++) *buf++ = SDIO->FIFO;
    if (r1 & SDIO_STA_RXDAVL) *buf++ = SDIO->FIFO;
    if (r1 & SDIO_STA_DBCKEND) {
      err = SDIO_LOW_LEVEL_SUCCESS;
      break; // for
    }
  }
  SDIO->ICR = SDIO_STA_STATIC;
  return err;
}



Thanks in advance.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SDIO interface for SD card
СообщениеДобавлено: 20 апр 2015, 22:26 
Старожил
Аватара пользователя

Зарегистрирован: 17 дек 2014, 23:08
Сообщения: 599
Откуда: Nowhere
Harvest писал(а):
err = SDIO_LOW_LEVEL_DCRC_FAIL; // this is the error I'm getting and it is always after 0x82 bytes

Is SDIO hardware flow control disabled? If not, try to disable it (bit HWFC_EN in the SDIO->CLKCR register).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 224 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: dosikus_2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB