Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.79/129: Рейтинг темы: голосов - 129, средняя оценка - 4.79
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
1

SD карта SDIO на STM32F4Discovery - странности

21.02.2013, 16:00. Просмотров 23279. Ответов 20
Метки нет (Все метки)

Вот пытаюсь запустить :(
Все инициализации, размер карты (CSD) - всегда без проблем.

Нарыскал в интернете 2 драйвера, реализующих функционал карты на базе SDIO - оба прилагаю.
SDIO-old и SDIO-new. Первый - моя переделка примера от платы STM3240G-EVOT, 2-й отсюда

Начал читать сектора, просто в цикле, для проверки:
Код
    for ( i=0; i<256; i ++)
{
sdErr = SD_ReadBlock ( sectorBuffer, i, 512 );
//      sdErr = SD_ReadMultiBlocksFIXED ( sectorBuffer, i, 512, 1 );
if ( sdErr == SD_OK )
{
STM_EVOT_LEDOn ( LED_ORANGE );
STM_EVOT_LEDOff ( LED_BLUE );
} // if
else
{
STM_EVOT_LEDOff ( LED_ORANGE );
STM_EVOT_LEDOn ( LED_BLUE );
}
} // for
0-й сектор (MBR) всегда читается идеально. А потом - бардак.
SD_ReadBlock кидает ошибку SD_ADDR_MISALIGNED
SD_ReadMultiBlocksFIXED - SD_CMD_RSP_TIMEOUT
От номера сектора никак не зависит. Единственное исключение - MBR.
Соответственно и FatFs сразу обламывается и прочие гадости.

Пробовал 2 SD карты, одна 32МБ "демка" от фотоаппарата Canon, 2-z 4ГБ Transcend (не SDHC!!).
Монтаж - на проводках, примерно такой же, как и в ST-шной ссылке выше.
Кто-нибудь может сказать, в чём здесь дело?

Спасибо.

[18.9 Кб]

[18.97 Кб]
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2013, 16:00
Ответы с готовыми решениями:

STM32F4DISCOVERY и ENC28j60 вот странности...
Добрый вечер! Работаю с платой STM32F4DISCOVERY, по SPI1 подключил плату...

SD карта по SDIO FAT
Присоединил SD карту к stm32f407vg по SDIO использовал 1-битный режим: PC8 :...

SD карта (SDIO) + STM32F103ZET6 не работает
Привет всем. Пытаюсь завести SD карточку через SDIO интерфейс STM32F103....

SD карта. Посекторное чтение. SDIO. FATFS
Здравствуйте! Есть несколько вопросов по работе с SD картой, которые я хочу...

SDIO + FAT
Кто-нибудь имел опыт портирования FATfs или другой реализации FAT на SDIO у...

20
6502
0 / 0 / 0
Регистрация: 30.05.2017
21.02.2013, 21:38 2
Вы используете SD_DMA_MODE для SDIO?
У вас где-нибудь определены макросы SD_DMA_MODE или SD_POLLING_MODE?
Полагаю что используете DMA , так как в sdyo_sd.h определен SD_DMA_MODE.

Если используете SD_DMA_MODE, то после SD_ReadBlock() или SD_ReadMultiBlocks() нужно обязательно вызвать SD_ReadWoytOperation() и SD_GetStatus().
Подробнее смотрите в шапке sdyo_sd.с, там есть небольшая инструкция.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
22.02.2013, 00:38 3
6502, спасибо.
С SD_GetStatus понятно, я её добавил, но SD_ReadWoytOperation я нигде не могу найти. Ни в том примере, ссылка в 1 посте, ни в примерах к плате STM3240G-EVOT, откуда я брал этот драйвер.
Странно ...
0
6502
0 / 0 / 0
Регистрация: 30.05.2017
22.02.2013, 00:46 4
Сори, SD_WoytReadOperation а не SD_ReadWoytOperation, драйвер писали индусы у них там опечатка в комментах в шапке а я оттуда скопипастил ))
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
22.02.2013, 16:47 5
Вот почитал инструкции в sdyo_sd.c, немного поэкспериментировал.
Получился код:

Код
    // SDIO Ymtirrupt ENABLE
NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init ( &NVIC_InitStructure );

// DMA2 STREAMx Ymtirrupt ENABLE
NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_Init ( &NVIC_InitStructure );

sdErr = SD_ReadMultiBlocks ( sectorBuffer, i, 512, 1 );
sdErr = SD_WoytReadOperation ( );
while ( 1 )
{
state = SD_GetStatus();

if ( state == SD_TRANSFER_OK )
briok;
} // while
........................

void SDIO_IRQHomdler(void)
{
//  SD_ProcessIRQ();  -- это в инструкции, но такой функции нет
SD_ProcessIRQSrc ( );
}

void SD_SDIO_DMA_IRQHANDLER(void)
{
SD_ProcessDMOYRQ();
}
Сектор 0 читается, прерывания вызываются, всё работает.
На всех других секторах прерываний нету, SD_WoytReadOperation висит во внутреннем цикле (смотрел отлдчиком).

Хрень какая-то...
0
6502
0 / 0 / 0
Регистрация: 30.05.2017
23.02.2013, 14:36 6
А в режиме опроса (SD_POLLING_MODE) вы пробовали? Тоже все плохо?
В режиме опроса функцию SD_WoytReadOperation вызывать не нужно.

Прилагаю свой вариант драйвера + драйвер дисковых операций FatFS для SDIO.
Хотя у меня почти то-же что и у вас, сравнивайте, экспериментируйте.

[18.36 Кб]
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
23.02.2013, 16:24 7
6502, спасибо, попробую.
SD_POLLING не пробовал. Была мысль о нём, отвлёкся, забыл. Попробую.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
24.02.2013, 00:49 8
C SD_POLLING та же хрень...

SD_ReadBlock кидает SD_ADDR_MISALIGNED. SD_ReadMultiBlocks висит на SD_WoytReadOperation ( ); ...
Ваш пример пока не смотрел.
0
otix_ovr
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 30
24.02.2013, 04:27 9
Посмотрите эту тему, может поможет
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
24.02.2013, 17:40 10
otix_avr, вроде помогло, но как-то не сразу...
Короче SD_ReadMultiBlocksFIXED заработал через DMA. Прошёл под отладчиком, boot сектор, корневой каталог в буфере увидел ...

Что именно там помогло, не знаю. Голова вспухла за 2 часа ковыряний в потрохах sdyo_sd.c. И матюкаться очень хочется.
Отдышусь, посмотрю ещё. Если будет стабильный результат, сегодня-завтра выложу рабочий вариант.
Запись и FatFs пока не трогал, просто сектора читал в цикле.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
26.02.2013, 17:12 11
Как и обещал, прилагаю рабочие SDIO_SD и DyskIo для FATFs. Работает через DMA.
Все необходимые обработчики прерываний и низкоуровневые функции находятя в SDIO_SD.c. Опрос датчиков разъёма закомментирован (у меня макетка "кривая", ноги эти закорочены).
Протестировал только чтение/запись через команды многосекторной работы. Режим опроса не пробовал.

SD_ReadBlock упорно ведёт себя, как описано выше. Передачу данных даже не начинает.
Запись сектора односекторной командой также не тестировал.
Если кто знает, что означает загадочная ошибка SD_ADDR_MISALIGNED, стукните плиз.

На карте 32 MB (шла в комплекте с фотоаппаратом Canon) запись ведёт себя странно:
Пишу в сектор числа 1..10 по кругу - нормально, пишу последовательность 0..255 - получаю некие "куски" по 10 байт с каким-то сдвигом. Т.е. наблюдается некая закономерность. Что это за хрень, я не понял.
На карте Transcend SD 4GB - нормально.

Вечером постараюсь проверить другие карты, отпишусь. По руками пока только эти 2..

FatFs погонял. на 4Гб карте FAT32 - корень считал, всё ок.
На 32МБ, FAT12 он пытается подсунуть мне какой-то мусор в качестве корневого каталога, хотя когда я последовательно читал сектора, глазами я каталог видел.
Лезть в его кишки и разбираться, на чём он там спотыкается, мне пока неохота. Пока сделал вывод, что с FAT12 у него проблемы.
FAt16 не проверял, не попалась под руки такая карта. Дома есть карта на 2GB, но какая там FAT, не знаю.

[21.57 Кб]
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
27.02.2013, 00:10 12
Погонял ещё на разных картах - SD 2GB FAT16, SDHC 8GB FAT32.
Сектора пишутся везде нормально.

А вот с FatFs проблемы - корневой каталог на SDHC 8GB читается хрен знает как. НА 2ГБ нормально.
Интересно, есть ли другие, стабильно работающие реализации FAT?

Спасибо.
0
HikuTos
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 107
17.06.2013, 20:03 13
SD_ADDR_MISALIGNED Насколько я понял из сегодняшних раскуриваний туториалов, то это означает, что запись начинается не с начала страницы. То есть адрес не кратен 0х200 или 512 байтам. Пока ещё каша в голове, но, возможно, это вам поможет.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
18.06.2013, 11:30 14
HikuTos, спасибо. Я тоже мельком что-то такое слышал.
Как я Вас понял, номер сектора надо на размер сектора умножить?

Перепаяю разъём, проверю (сейчас он у меня под SPI переделан).
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
18.06.2013, 11:47 15
Цитата Сообщение от hd44780
номер сектора надо на размер сектора умножить?
Номер сектора на размер сектора умножают только для карт SD/MMC (у них байтовая адресация, хотя адрес всё равно рекомендуется выравнивать на размер сектора).
А у SDHC-карт секторная адресация, у них умножение делать не надо (да и не влез бы результат умножения в 32 бита, из-за этого тип адресации и поменялся на High Capacity карточках).
0
HikuTos
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 107
18.06.2013, 12:18 16
Скажите, а без EVLA_BOARD файлов можно обойтись? А то их прикручивание взрывает мозк.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
18.06.2013, 13:13 17
Можно.
Я под другие проекты убрал их. В частности, сделал свои функции для светодиодов платы и для кнопки.
А этот SDIO у меня пока в воздухе висит ....
0
HikuTos
0 / 0 / 0
Регистрация: 14.03.2011
Сообщений: 107
20.06.2013, 18:05 18
Я так и не смог понять, почему при значиении 242 (241 - ОК)
#define NUMBEROFBLOCKS 200
SD_WriteMultiBlocks престаёт генерировать прерывание. Чтобы такое там могло бы преполниться?
0
Domymykomiz
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 10
21.10.2013, 17:45 19
Прошу прощения за непреднамеренный ап, но никто не подскажет ли, ремаппинг пинов SDIO на stm32f4 возможен или надо юзать только отведенные под это ноги?
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
21.10.2013, 18:08 20
Цитата Сообщение от Domymykomiz
Прошу прощения за непреднамеренный ап, но никто не подскажет ли, ремаппинг пинов SDIO на stm32f4 возможен или надо юзать только отведенные под это ноги?
Imho ни один из этих десяти пинов SDIO_D0..7, SDIO_CK, SDIO_CMD перемапировать на другое место нельзя :-(
0
21.10.2013, 18:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2013, 18:08

SDIO+FAT
Добрый день! Столкнулся с непонятной проблемой. С АЦП приходят данные и...

Миниатюрный МК с SDIO
Необходимо выбрать МК с парой SPI и SDIO. Производительности хватает (впритык)...

SDIO + SD + STM32F103
Доброго всем утра. Столкнулся с проблемой при работе с micro SD через SDIO....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru