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

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

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

хочу заставить эту библиотеку http://mykrosontroller.bplosid.net/word ... ge_id=4446
работать на stm32l1xx, но не знаю с чего начать изменение.
насколько я понял это просто оболочка для библиотеки от Чена FatFS,
но при попытке переписать инициализацию для stm32l1xx сталкиваюсь с кучей проблем.
надеюсь на советы в бывалых, по переделке чужого кода
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2016, 21:02
Ответы с готовыми решениями:

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

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

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

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

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

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

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

0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
24.03.2016, 08:37 6
Цитата Сообщение от mokystri96o
программа прерывается на выделенной строчке во вложенном скрине
что я делаю не так?
Проект не смотрел, но думаю проблема в следующем. Для работы библиотеки FatFs необходимо реализовать функцию задержки. Она уже там есть, называется disk_timerproc(), нужно только ручками запихать её в обработчик какого-нибудь таймера, настроенного на частоту 100Гц. Получится что-то вроде такого:
Код
#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
mokystri96o
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
24.03.2016, 16:45 7
Цитата Сообщение от TytttiYromMom
Проект не смотрел, но думаю проблема в следующем. Для работы библиотеки FatFs необходимо реализовать функцию задержки. Она уже там есть, называется disk_timerproc(), нужно только ручками запихать её в обработчик какого-нибудь таймера, настроенного на частоту 100Гц. Получится что-то вроде такого:
Код:
#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();
}

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

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

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

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

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

0
TytttiYromMom
0 / 0 / 0
Регистрация: 02.10.2015
Сообщений: 77
24.03.2016, 22:18 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
mokystri96o
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
25.03.2016, 00:24 19
Цитата Сообщение от 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
mokystri96o
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 240
27.03.2016, 18:10 20
Решил идти от простого
Отправляю на карту только CMD0 и жду ответ 0x01
но ничего не приходит
0
27.03.2016, 18:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2016, 18:10

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

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

Скорость FatFs по SPI у STM32F105 и SDHC Class 10 (8Гб) ?
Всем привет! Дино: STM32F105 + SDHC, Ctoss 10, 8Гб по SPI. Взял FatFs...


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

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

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