STM32F4Discovery + SPI2 + DMA + SDCard + FatFs

vanyaacido
Сообщения: 9
Зарегистрирован: Вс дек 14, 2014 9:36 pm
Откуда: Россия
Контактная информация:

STM32F4Discovery SPI2 DMA SDCard FatFs

Сообщение vanyaacido » Пт янв 16, 2015 11:38 pm

Собственно есть плата STM3240G-EVAL на базе контроллера STM32F407IG на ней установлен LCD модуль на базе LCD контроллера ILI9325, подключенный к модулю FSMC микроконтроллера, есть также внешняя SRAM16Мбит подключенная тоже к модулю FSMC. Также есть камера OV2640 подключенная к камерному модулюDCMI. Собственно вопрос можно ли организовать буфер через DMA для захват кадров с камеры во внешнюю SRAM. И выводить кадры при необходимости на LCD дисплей. Все мои попытки считывать по DMA кадры в SRAM а потом запись оттуда в LCD модуль по DMA или просто через команды процессора приводили к неправильной работе LCD модуля. Буду признателен за примеры кода. Прилагаю user manual на плату.

Syscall
Сообщения: 7
Зарегистрирован: Чт май 21, 2015 8:07 am

Re: STM32F4Discovery + SPI2 + DMA + SDCard + FatFs

Сообщение Syscall » Пн июн 01, 2015 5:32 am

Ребят...столкнулся с такой вот проблемой:
f_read error = FR_NOT_READY,/* (3) The physical drive cannot work */
Читать из файла совсем не хочет, прикрепляю проект. Код написан кривовато, не судите строго, писать начал недавно. МК STM32F4 Discovery, флешка подключена через SPI, инициализация проходит нормально, открытие файла проходит нормально, на чтении ошибка.....пробовал 2 разных флешки, эффекта нуль.
На форуме одном вычитал, что
///* Manley EK-STM32F board does not offer socket contacts -> dummy values: */
#define SOCKPORT 1 /* Socket contact port */
#define SOCKWP 0 /* Write protect switch (PB5) */
#define SOCKINS 0 /* Card detect switch (PB4) */
Должно быть так, типа программно переназначили пины, на которых идет определение защиты от записи и также определение карты. CS вешал и на PB5 и на PB4, карта не инициализировалась, сейчас CS висит на PB12, из мануала вычитал, мол сюда цеплять надо....вроде работает, кроме чтения, атрибуты для функции f_open стоят (&fs,"1.txt", FA_OPEN_EXISTING | FA_READ); , пробовал другие параметры давать этой функции, но чего-то молчит, параметры функции f_read st=f_read(&fs, &TxData, 16 ,&count);, тут идет чтение в буфер отправки по USART.Как бороться с этой проблемой, подскажите пожалуйста?
Вложения
test.rar
Проектик SD+FATFS+SPI+DMA
(762.65 КБ) 314 скачиваний

dtvims
Site Admin
Сообщения: 115
Зарегистрирован: Пн авг 02, 2010 2:43 pm

Re: STM32F4Discovery + SPI2 + DMA + SDCard + FatFs

Сообщение dtvims » Вт июн 02, 2015 11:54 am

неправильный вызов

Код: Выделить всё

st=f_open(&fs,"1.txt", FA_OPEN_EXISTING | FA_READ);

Надо

Код: Выделить всё

FIL fsrc;
st = f_open(&fsrc, "1.txt", FA_OPEN_EXISTING | FA_WRITE);

Где "fsrc" - это файловая переменная.

MoskKsusBiz
Сообщения: 10
Зарегистрирован: Пн окт 19, 2015 10:43 am

STM32F4Discovery SPI2 DMA SDCard FatFs

Сообщение MoskKsusBiz » Пн фев 01, 2016 4:59 am

вот инициализация SPI с пинами. slave SD micro в составе FatFs от ChaN. Все работает , но почему именно так?

Код:

dtvims
Site Admin
Сообщения: 115
Зарегистрирован: Пн авг 02, 2010 2:43 pm

Re: STM32F4Discovery + SPI2 + DMA + SDCard + FatFs

Сообщение dtvims » Вт фев 02, 2016 2:30 pm

и где код?

ВитГо
Сообщения: 8
Зарегистрирован: Вс июн 15, 2014 6:49 am

Re: STM32F103 + SPI1 + монитор 5110

Сообщение ВитГо » Вт фев 02, 2016 3:22 pm

dtvims писал(а):Вот реабилитировал работу Мониторчика 5110, но только с другим контроллером, все с тем же STM32.
Сразу попал на ряд трудностей:
. . .
5. Моник отказался работать на максимальной скорости SPI.
. . .

Этот монитор отлично работает на скорости в 21 мгц... https://www.youtube.com/watch?v=bZkTX9JlTVc
вашу ошибку я тоже описал: http://vg.ucoz.ru/publ/programmirovanie_mikrokontrollerov_stm32/osobennosti_interfejsa_spi_na_stm32/9-1-0-21
(ну вернее не вашу, а вообще ошибку в применении SPI на STM32)
посмотреть как нужно было сделать можно например здесь http://vg.ucoz.ru/publ/programmirovanie_na_assemblere_avr/otladochnoe_podkljuchenie_lcd_nokia_5110_3310_na_pcd8544_k_avr/3-1-0-18

Прочитав по ссылке выше вы поймете что процедура void SPISend(uint8_t data) написана не правильно !!!
dtvims писал(а):

Код: Выделить всё

void SPISend(uint8_t data) {
    SPI_I2S_SendData(SPI1, data);  // отправили данные
    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); // ждём, пока данные не отправятся
}



соответственно процедура ниже тоже корявая !! никаких
Delay(1); // Задержка, чтобы успела примениться последняя команда

быть не должно !! просто нужно проверять флаг BSY !
dtvims писал(а):

Код: Выделить всё

void LCD_set_XY(unsigned char X, unsigned char Y) {
   unsigned char x;
   x = 6 * X;

   DCOff();
   SPISend(0x80 | x);
   SPISend(0x40 | Y);
   Delay(1); // Задержка, чтобы успела примениться последняя команда
   DCOn(); // Принуждает выполнить последнюю команду
}


И так далее по коду...

DC кстати тоже дергать не нужно после каждого байта..

правильность работы с SPI проверить просто - все должно работать без всяких пауз, и от нижнего до верхнего предела...

p.s. у 5110 в документации написано что он до 4 мгц.. но все которые у меня были (а их было 3 штуки) работали от 21 мгц и не глючили (причем один работает сутками напролет уже третий год)

dtvims
Site Admin
Сообщения: 115
Зарегистрирован: Пн авг 02, 2010 2:43 pm

Re: STM32F4Discovery + SPI2 + DMA + SDCard + FatFs

Сообщение dtvims » Вт фев 02, 2016 3:44 pm

Возможно у меня конкретный дисплей тупо глючит, потому как сперва он у меня работал без нареканий, потом пришлось изощряться, потому как он вдруг перестал что либо показывать, а при данном коде работает стабильно.
Задержку я ставил экспериментально, которая нужна чтобы посланную команду ранее обработал контроллер дисплея, а у самого SPI никаких задержек и нет, т.е. дисплей команду принимает, но если задержку не сделать, то выполнять ее отказывается.
Опять же, экспериментальным путем были проверены максимальные скорости SPI при которых все работает.
Согласитесь, что должно работать и работает - это разные вещи.

Что касается флага BSY, то тут тоже можно поспорить: http://electronix.ru/forum/index.php?showtopic=107951

P.s. Вам повезло, что Ваши дисплеи работают на 21Mhz. Мой работает как положено, на скорости до 4-х :(

ВитГо
Сообщения: 8
Зарегистрирован: Вс июн 15, 2014 6:49 am

Re: STM32F4Discovery + SPI2 + DMA + SDCard + FatFs

Сообщение ВитГо » Вт фев 02, 2016 4:38 pm

по ссылке что вы дали - простите - но там чушь написана...
прочитайте по ссылке что я дал...

в STM32 афигенно классный модуль SPI !!!

txe проверяем ДО загрузки в SPI_DR

bsy проверяем до изменения CS, DC, RST и прочих линий управления..


и все будет работать и быстро и правильно, и на любых скоростях !!!

если у вас STM32F4 то можете просто залить пример http://vg.ucoz.ru/load/stm32_ickhodnye_teksty_programm_na_si/stm32_biblioteka_podkljuchenija_lcd_nokia_3310_92_5110/16-1-0-40
и поиграться с делителем..

у меня 5110 несколько с алиэкспресс (то есть китайцы) - и все работают на 21 мгц...
то видео что я кинул выше - это вообще программа на ассемблере :-) и там тоже такт SPI 21 мгц...

dtvims
Site Admin
Сообщения: 115
Зарегистрирован: Пн авг 02, 2010 2:43 pm

Re: STM32F4Discovery + SPI2 + DMA + SDCard + FatFs

Сообщение dtvims » Вт фев 02, 2016 5:23 pm

Я все прочитал, но факт остается фактом.
Необходимо знать и анализировать все методы, но не факт, что у Вас сразу все заработает именно при таких условиях.

Сперва у меня тоже было по другому и все работало. Потом ХЗ почему перестало. Доработал как описано мной в теме - заработало стабильно.
Я же не говорю, что у Вас неправильно, я говорю, что мой дисплей работает только при указанных мной настройках на моих контроллерах.

ВитГо
Сообщения: 8
Зарегистрирован: Вс июн 15, 2014 6:49 am

Re: STM32F4Discovery + SPI2 + DMA + SDCard + FatFs

Сообщение ВитГо » Вт фев 02, 2016 6:56 pm

:-)

дело в том что У ВАС НЕ ПРАВИЛЬНО !

и то что оно работает - так это только из за того что вы применили "костыли" в виде delay()

сделайте правильно !
заодно, уверяю вас, научитесь правильно работать с SPI и получите максимальную скорость обмена !

по меньшей мере - запустите пример на своем дисплее - и узнайте будет ли он работать на повышенной частоте SPI при другом способе (правильном) работы с SPI...

а пока вы не можете считать что знаете SPI... потому как вы еще его не изучили в достаточной мере....

кстати тот пример возможно не на STM32F4 Discovery сделал (у меня еще есть другая отладочная плата на STM32F4) - так что самый максимум что вам нужно будет еще сделать - это проверить - свободны ли GPIO SPI из примера на STM32F4 Discovery.... но я думаю что это не самый великий труд для вас (коль вы уже раскуриваете примеры с SPI и DMA) ^-)


Вернуться в «Микроконтроллеры и автоматизация»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость