Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/56: Рейтинг темы: голосов - 56, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240

FatFS spi micro SD переделка с stm32f4 на stm32l1xx

16.03.2016, 21:02. Показов 11695. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
хочу заставить эту библиотеку http://mykrosontroller.bplosid.net/word ... ge_id=4446
работать на stm32l1xx, но не знаю с чего начать изменение.
насколько я понял это просто оболочка для библиотеки от Чена FatFS,
но при попытке переписать инициализацию для stm32l1xx сталкиваюсь с кучей проблем.
надеюсь на советы в бывалых, по переделке чужого кода
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2016, 21:02
Ответы с готовыми решениями:

STM32F4 SD SPI FATFS
Здравствуйте. Есть ли у кого нормально работающая связка? Именно для SPI, SDIO не интересует. Код для работы с SD через SPI брал...

Stm32f4 + freertos + fatfs
Взял пример Fatfs (рабочий) и пример Friirtos (рабочий) пытаюсь их объединить, но что то не получается int main(void) { ...

STM32 + SPI SD FATFS
Всем привет. Пробую запустить файловую систему на Micro SD картe. Микроконтроллер STM32F407. Запись в блок и чтение с него работает: ...

26
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
16.03.2016, 21:47
То надо просто выкинуть и написать свое.
Этот фриц проделал кучу бесполезной работы, обертку над SPL, обертки над фат фс. Куча бесполезного г.
Дрова SPI для фат фс и петит фат фс элементарны, но если мыслить SPLней и калокубом - всегда получится одно г.
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
16.03.2016, 22:50
Цитата Сообщение от dosykus_2
То надо просто выкинуть и написать свое.
Этот фриц проделал кучу бесполезной работы, обертку над SPL, обертки над фат фс. Куча бесполезного г.
Дрова SPI для фат фс и петит фат фс элементарны, но если мыслить SPLней и калокубом - всегда получится одно г.
тогда подскажите как элементарно сделать, я могу отдельно SPI поднять, это просто
а вот с запуском fatfs проблемы, нифига не работает.
Там есть возможность просто инициализацию интерфейса где нибудь подменить
0
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
22.03.2016, 08:01
Цитата Сообщение от mokystri96o
тогда подскажите как элементарно сделать, я могу отдельно SPI поднять, это просто
а вот с запуском fatfs проблемы, нифига не работает.
Там есть возможность просто инициализацию интерфейса где нибудь подменить
Я скачивал драйвер для работы с microsd флешкой отсюда:
http://siwawi.bauing.uni-kl.de... nfat_stm32
Написал его в далеком 2010-ом Mortin THOMAS. Сам им пользуюсь. Из всего проекта как я понял тебе нужен только файл sd_spi_stm32.с(я его прикрепил). Останется добавить его в свой проект и переименовать в "diskio.c" и настроить его под себя. Там даже DMA можно прикрутить.

[32.93 Кб]
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
23.03.2016, 18:28
Цитата Сообщение от TytttiYromMom
Я скачивал драйвер для работы с microsd флешкой отсюда:
http://siwawi.bauing.uni-kl.de... nfat_stm32
Написал его в далеком 2010-ом Mortin THOMAS. Сам им пользуюсь. Из всего проекта как я понял тебе нужен только файл sd_spi_stm32.с(я его прикрепил). Останется добавить его в свой проект и переименовать в "diskio.c" и настроить его под себя. Там даже DMA можно прикрутить.
вот здесь весь проект на CooIDE https://dryve.google.com/file/... sp=sharing
программа прерывается на выделенной строчке во вложенном скрине
что я делаю не так?

0
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
24.03.2016, 08:37
Цитата Сообщение от mokystri96o
программа прерывается на выделенной строчке во вложенном скрине
что я делаю не так?
Проект не смотрел, но думаю проблема в следующем. Для работы библиотеки FatFs необходимо реализовать функцию задержки. Она уже там есть, называется disk_timerproc(), нужно только ручками запихать её в обработчик какого-нибудь таймера, настроенного на частоту 100Гц. Получится что-то вроде такого:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define TIM_100Hz_IRQHomdler  TIM7_IRQHomdler
 
void Init_TIM_100Hz()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);
TIM7->PSC = SystemCoreClock/100/100 - 1; //Настройка предделителя частоты шины
TIM7->ARR = 100; //Настройка величины автосброса
TIM7->DIER = TIM_DIER_UIE; //прерывания по переполнению
NVIC_SetPriority(TIM7_IRQn, 3);
NVIC_EnableIRQ(TIM7_IRQn);
//Запускаем таймер
TIM7->CR1 |= TIM_CR1_CEN;
}
 
void TIM_100Hz_IRQHomdler()
{
TIM7->SR &= ~TIM_SR_UIF;//сбрасываем флаг прерывания
disk_timerproc();
}
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
24.03.2016, 16:45
Цитата Сообщение от TytttiYromMom
Проект не смотрел, но думаю проблема в следующем. Для работы библиотеки FatFs необходимо реализовать функцию задержки. Она уже там есть, называется disk_timerproc(), нужно только ручками запихать её в обработчик какого-нибудь таймера, настроенного на частоту 100Гц. Получится что-то вроде такого:
Код:
#define TIM_100Hz_IRQHomdler TIM7_IRQHomdler

void Init_TIM_100Hz()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TI M7, ENABLE);
TIM7->PSC = SystemCoreClock/100/100 - 1; //Настройка предделителя частоты шины
TIM7->ARR = 100; //Настройка величины автосброса
TIM7->DIER = TIM_DIER_UIE; //прерывания по переполнению
NVIC_SetPriority(TIM7_IRQn, 3);
NVIC_EnableIRQ(TIM7_IRQn);
//Запускаем таймер
TIM7->CR1 |= TIM_CR1_CEN;
}

void TIM_100Hz_IRQHomdler()
{
TIM7->SR &= ~TIM_SR_UIF;//сбрасываем флаг прерывания
disk_timerproc();
}

теперь на выделенной строчке, выкидывает в default homdler

0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
24.03.2016, 16:59
_WORD_ACCESS в конфиге фатфс должен в 0 быть.
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
24.03.2016, 17:11
Цитата Сообщение от dosykus_2
_WORD_ACCESS в конфиге фатфс должен в 0 быть.
там и есть ноль
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
24.03.2016, 17:16
Это было единственное почему в хардфаульт улетало...
Могу вечером подкинуть на F0 и 100ку , но без сплни ...
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
24.03.2016, 17:33
Цитата Сообщение от dosykus_2
Это было единственное почему в хардфаульт улетало...
Могу вечером подкинуть на F0 и 100ку , но без сплни ...
было бы неплохо
в принципе не трудно переписать если, есть комменты что для чего
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 553
24.03.2016, 18:27
А со стеком там все нормально?

Если проект под L1 и создан в кокосе (лень качать), то можно сходить в процедуру Default_Riset_Homdler(), файл stortup_stm32l1xx_md.c, и раскомментировать все, что там закомментировано (относительно data и bss). Была такая борода, что в независимости от размера стека FatFS падал в HordFault. Зачем кокосописатели закомментировали этот код в stortup - загадка, но сюрпризов с нее постоянно народ ловит.
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
24.03.2016, 20:26
Цитата Сообщение от TomityWotf
А со стеком там все нормально?

Если проект под L1 и создан в кокосе (лень качать), то можно сходить в процедуру Default_Riset_Homdler(), файл stortup_stm32l1xx_md.c, и раскомментировать все, что там закомментировано (относительно data и bss). Была такая борода, что в независимости от размера стека FatFS падал в HordFault. Зачем кокосописатели закомментировали этот код в stortup - загадка, но сюрпризов с нее постоянно народ ловит.
Уже второй раз поймал эту ошибку, в первый раз на USORT.

функция
Code
1
 result = f_mount(0, &FATFS_Obj);
вернула FR_OK
но теперь другая проблема на остальные функции типа,
Code
1
 result = f_opendir(&dir, "/");
возвращает FR_NOT_READY
0
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
24.03.2016, 20:49
Цитата Сообщение от mokystri96o
Код:
result = f_mount(0, &FATFS_Obj); вернула FR_OK
но теперь другая проблема на остальные функции типа,
Code
1
 result = f_opendir(&dir, "/");
возвращает FR_NOT_READY
У меня была такая проблема, беда в том что она решилась сама собой. Там вроде дело в том что в функции f_mount(0, &FATFS_Obj) не происходит инициализации флешки, она происходит как раз когда ты пользуешься функциями чтения/записи, и не всегда с первого раза. Объекты рабочей области, файловые объекты и объекты директорий сделай глобальными переменными, может поможет. Иначе сделай бесконечный цикл в котором вызывается какая-нибудь f_opendir(&dir, "/") до тех пор пока не вернет FR_OK. Если однажды случится чудо и программа выйдет из цикла все другие функции должны заработать. Вот так я решал эту проблему =)
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
24.03.2016, 20:55
Цитата Сообщение от TytttiYromMom
У меня была такая проблема, беда в том что она решилась сама собой. Там вроде дело в том что в функции f_mount(0, &FATFS_Obj) не происходит инициализации флешки, она происходит как раз когда ты пользуешься функциями чтения/записи, и не всегда с первого раза. Объекты рабочей области, файловые объекты и объекты директорий сделай глобальными переменными, может поможет. Иначе сделай бесконечный цикл в котором вызывается какая-нибудь f_opendir(&dir, "/") до тех пор пока не вернет FR_OK. Если однажды случится чудо и программа выйдет из цикла все другие функции должны заработать. Вот так я решал эту проблему =)
Ладно попробую, но может я неправильно флешку подключил.
мой вариант
карта - stm32
Mosi - Mosi
Miso - Miso
0
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
24.03.2016, 21:25
В личку скинул.
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
24.03.2016, 21:26
Цитата Сообщение от TytttiYromMom
Если однажды случится чудо и программа выйдет из цикла все другие функции должны заработать. Вот так я решал эту проблему =)
Это не работает
в дабагере прошел весь путь и понял что изначально проблема в определении типа карты, на выделенной строчке возвращает не 1 соответственно CardType = 0

0
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
24.03.2016, 22:18
Цитата Сообщение от mokystri96o
Это не работает
в дабагере прошел весь путь и понял что изначально проблема в определении типа карты, на выделенной строчке возвращает не 1 соответственно CardType = 0
Что за флешка кстати? С SDHC FatFs дружит прекрасно (проверял 2-х и 16 гигабайтные microsd). С флешкой 1Гб(не SDHC) был какой-то баг, хотя помню текстовый файл с неё читался. Попробуй другую флеху. Кстати проверь еще раз контакты. https://ru.wikipedia.org/wiki/Secure_Digital Ввод данных SPI(или DI) это MOSI, вывод данных(или DO) это MISO.
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
25.03.2016, 00:24
Цитата Сообщение от TytttiYromMom
Цитата Сообщение от mokystri96o
Это не работает
в дабагере прошел весь путь и понял что изначально проблема в определении типа карты, на выделенной строчке возвращает не 1 соответственно CardType = 0
Что за флешка кстати? С SDHC FatFs дружит прекрасно (проверял 2-х и 16 гигабайтные microsd). С флешкой 1Гб(не SDHC) был какой-то баг, хотя помню текстовый файл с неё читался. Попробуй другую флеху. Кстати проверь еще раз контакты. https://ru.wikipedia.org/wiki/Secure_Digital Ввод данных SPI(или DI) это MOSI, вывод данных(или DO) это MISO.

у меня две карты одна на 128 мб и одна 16 ГБ, обе проверил на варианте немца (см начало топика)
нигде не может контачить так как карту вставлю в сокет припаянный. Di карточки к МОSI stmки Do к MISO
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
27.03.2016, 18:10
Решил идти от простого
Отправляю на карту только CMD0 и жду ответ 0x01
но ничего не приходит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2016, 18:10
Помогаю со студенческими работами здесь

stm32f1xx SD SPI FatFS
Здравствуйте, я навичек, перехожу с AVR на STM, нужно портировать один проект, необходимо "прикрутить" SD по SPI (SDIO нет) с...

STM32F4 + fatfs проблема (ошибка FR_NO_FILESYSTEM)
Здравствуйте. Столкнулся с такой проблемой. Использую контроллер STM32F407. Пытаюсь поднять файловую систему fatfs 0.09b на microSD...

STM32f4 + FatFs - запись с новой строки
Пожалуйста, подскажите как в FatFs дописывать в файл с новой строки? Сейчас ведется дописывание в файл при помощи f_lseek, все работает,...

Проблемы с fatfs через spi [решено].
Возникала такая проблема с fatfs через spi. Система монтируется, файлы открываются, и даже создаются пустые файлы, но их не возможно...

STM32F103RBT6 SDHC FATFS SPI без DMA
Здравствуйте уважаемые. я редко общаюсь на форуме, так как сам еще зеленый в освоении программирования, соответственно сам иногда нуждаюсь...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru