Easyelectronics.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 02 июн 2018, 20:33 
Только пришел

Зарегистрирован: 02 июн 2018, 20:03
Сообщения: 7
Здравствуйте. Разрабатываю устройство на STM32L433 со следующей логикой работы:
1) Нажал кнопку - запускается опрос датчиков (SPI, I2C), данные с них записываются на карту памяти через SDIO + FatFS
2) Нажал кнопку еще раз - останавливается запись, устройство можно подключить к USB как mass storage class и скопировать записанные ранее данные.
Связка SDIO + FatFS заработала, данные нормально пишутся, но никак не получается запустить MSC. Настраивал по примеру http://microtechnics.ru/stm32cube-i-usb-mass-storage-sd-card/ , только у меня версия cubemx 4.25.1 и у SDCardInfo нет атрибута CardCapacity, но есть BlockNbr/BlockSize и LogBlockNbr/LogBlockSize. При их использовании карта памяти определяется в системе без размера и при попытке ее открыть возникает ошибка: "Нет доступа к G:\. Неверная функция".
Show main.c

Show usbd_storage_if.c


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 02 июн 2018, 22:19 
Только пришел

Зарегистрирован: 02 июн 2018, 20:03
Сообщения: 7
Если добавить в функцию static void MX_SDMMC1_SD_Init(void) строчку HAL_SD_Init(&hsd1), то карточка нормально определяется и работает, но после этого перестает работать FatFS на контроллере. Как их связать вместе, чтобы не конфликтовали?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 06 июн 2018, 08:39 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 ноя 2010, 20:11
Сообщения: 73
Откуда: Омск
HAL-ом и кубом стараюсь не пользоваться. Уж очень много текста он генерит.
У меня получилось собрать (на другом кристалле, конкретно STM32F745, так что Вам придётся разобраться с пинами и тактированием) USB MSC + FatFS + SDIO.
Инициализация общая, USB корректно подключается / отключается в любой момент (хотя дёргать на записи я бы не стал).

Интересные Вам вещи скорее всего будут здесь:
USB ссылается на sdio_sd, где описана инициализация, а так же вычисление объёма карты памяти.
Объём считается правильно, но сохраняется в глобальных переменных.
Чтобы узнать полный объём карты памяти нужно умножить количество секторов на размер сектора.
Show usbd_storage_if.c


Show sdio_sd.c


Все обращения (FatFS и USB происходят через sdio_sd.c). Многопоточность не обязательно будет работать, потому лучше как-то ограничить чтение/запись если есть несколько потоков сразу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 06 июн 2018, 16:57 
Только пришел

Зарегистрирован: 02 июн 2018, 20:03
Сообщения: 7
-Alan- писал(а):
HAL-ом и кубом стараюсь не пользоваться. Уж очень много текста он генерит.
У меня получилось собрать (на другом кристалле, конкретно STM32F745, так что Вам придётся разобраться с пинами и тактированием) USB MSC + FatFS + SDIO.
Инициализация общая, USB корректно подключается / отключается в любой момент (хотя дёргать на записи я бы не стал).

Интересные Вам вещи скорее всего будут здесь:
USB ссылается на sdio_sd, где описана инициализация, а так же вычисление объёма карты памяти.
Объём считается правильно, но сохраняется в глобальных переменных.
Чтобы узнать полный объём карты памяти нужно умножить количество секторов на размер сектора.
Show usbd_storage_if.c


Show sdio_sd.c


Все обращения (FatFS и USB происходят через sdio_sd.c). Многопоточность не обязательно будет работать, потому лучше как-то ограничить чтение/запись если есть несколько потоков сразу.

А у Вас sdio_sd.c - тоже куб сгенерировал? Просто у меня такого файла вообще нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 06 июн 2018, 19:28 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 ноя 2010, 20:11
Сообщения: 73
Откуда: Омск
Ещё раз намекну.
Я стараюсь не использовать ни куб, ни HAL.
sdio - большей частью взят из примеров работы с картой по интерфейсу SDIO. Если правильно помню - из готовых проектов, использующих библиотеку FatFS ChaN'а.
Часть функций была переписана, часть упрощена, некоторые добавлены.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 июн 2018, 14:03 
Только пришел

Зарегистрирован: 02 июн 2018, 20:03
Сообщения: 7
-Alan- писал(а):
Ещё раз намекну.
Я стараюсь не использовать ни куб, ни HAL.
sdio - большей частью взят из примеров работы с картой по интерфейсу SDIO. Если правильно помню - из готовых проектов, использующих библиотеку FatFS ChaN'а.
Часть функций была переписана, часть упрощена, некоторые добавлены.

Проблема решена, спасибо за помощь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 07:08 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
Грызу плюсы понемногу - какая няшка! :)

Например, описываем класс - пин
Код:

#ifndef _PIN_H
#define _PIN_H
#include <stdint.h>

        constexpr static uint8_t PORTA = 0;
   constexpr static uint8_t PORTB = 1;
   constexpr static uint8_t PORTC = 2;
   constexpr static uint8_t PORTD = 3;
   constexpr static uint8_t notAPort = 0xFF;


        constexpr static uint8_t PIN0 = 0;
   constexpr static uint8_t PIN1 = 1;
   constexpr static uint8_t PIN2 = 2;
   constexpr static uint8_t PIN3 = 3;
        constexpr static uint8_t PIN4 = 4;
   constexpr static uint8_t PIN5 = 5;
   constexpr static uint8_t PIN6 = 6;
   constexpr static uint8_t PIN7 = 7;



   constexpr static uint8_t notAPin = 0xFF;




class Pin{

public:
Pin(uint8_t port, uint8_t pin);

void switchToOutput();
void set();
void reset();

private:
uint8_t m_port;
uint8_t m_pin;

protected:




};





Код:


Pin::Pin(uint8_t port, uint8_t pin){
m_port=port;
m_pin=pin;

// Enable GPIO Peripheral clock
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA << (port), ENABLE);


}



void Pin::switchToOutput(){
GPIO_InitTypeDef GPIO_InitStructure;

  // Configure pin in output push/pull mode
  GPIO_InitStructure.GPIO_Pin = (1 << m_pin);//BLINK_PIN_MASK(BLINK_PIN_NUMBER);
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(((GPIO_TypeDef *)(GPIOA_BASE + (GPIOB_BASE-GPIOA_BASE)*(m_port))), &GPIO_InitStructure);

}


void Pin::set(){
GPIO_SetBits(((GPIO_TypeDef *)(GPIOA_BASE + (GPIOB_BASE-GPIOA_BASE)*(m_port))),
        (1 << m_pin));
}

void Pin::reset(){
GPIO_ResetBits(((GPIO_TypeDef *)(GPIOA_BASE + (GPIOB_BASE-GPIOA_BASE)*(m_port))),
        (1 << m_pin));

}





Теперь можем делать так
Pin myPin(PORTB,PIN1);
myPin.switchToOutput();
myPin.set();
myPin.reset();


А теперь - новый класс Led наследник Pin

Код:

class Led: private Pin{

public:
Led(uint8_t port, uint8_t pin): Pin(port,pin){switchToOutput();};
void on(){set();};
void off(){reset();};

};



Теперь так можно

Led myLed(PORTB,PIN1);
myLed.on();
myLed.off();

Смешные, конечно, "открытия". :-)


Последний раз редактировалось Pingvin 09 авг 2018, 07:10, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 07:09 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
Немного доработал класс Pin.
Теперь можно включать внешние прерывания.
Например
Код:
Pin BtStatePin(PORTC,PIN7);
BtStatePin.enableExti(true);
BtStatePin.setCallback(testCallback);

активирует внешние прерывания на ножке и при наступлении таковых вызовет функцию testCallback()
Функцию можно переназначить на любую другую (типа void f(void)) - то есть без возвращаемого значения и аргументов.
Или отключить
BtStatePin.setCallback(0);
Функция будет работать в контексте прерывания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 08:58 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2473
Pingvin писал(а):
Грызу плюсы понемногу - какая няшка! :)

Например, описываем класс - пин

Как бы понятно, что сразу закапываться в шаблоны может быть сложно. Но даже если писать на "С с классами" то оборачивать классами HAL или SPL врядли имеет смысл.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:10 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 252
Откуда: Киев
да а то выйдет в итоге монструозный HAL++, тупой еще тупее... особенно для портов ВВ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:17 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
Что в итоге получится - вопрос второй.
Я изучу новый инструмент.
За С++ на контроллерах будущее.
И никакого овер-чего то там нет, если писать нормально.
Зато один раз написав библиотеку, кодирование превращается в сплошное удовольствие, результативность труда вырастает.
Код становится легко читаем и самодокументированным.
Ну не спорю - на несколько тактов что то будет выполнятся дольше (за удобства нужно платить), но совершенно не критично.

Опять же - можно и на регистрах методы класса реализовать (спрятать кишки в классы) - тогда вообще разницы не будет, зато ништяки останутся.

Просто нужно понимать, сто такое плюсы, и таких глупостей больше писать не будете.


Последний раз редактировалось Pingvin 09 авг 2018, 21:33, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:29 
Старожил

Зарегистрирован: 01 фев 2013, 02:21
Сообщения: 273
Pingvin писал(а):
Что в итоге получится - вопрос второй.
Я изучу новый инструмент.
За С++ на контроллерах будущее.
И никакого овер-чего то там нет, если писать нормально.
Зато один раз написав библиотеку, кодирование превращается в сплошное удовольствие, результативность труда вырастает.
Код становится легко читаем и самодокументированным.


тоже вот все хочу перелезть на С++, только кто бы сказал, как правильно а как нет ( кроме базывых и очевидных вещей)...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:30 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2473
MasterElectric писал(а):
да а то выйдет в итоге монструозный HAL++, тупой еще тупее... особенно для портов ВВ...

Уже есть одно такое поделие https://github.com/andysworkshop/stm32plus
Ужос...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:34 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
У кого аллергия на плюсы - вас тут никто насильно не держит, если что...
Есть ветки и про ассемблер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:37 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
Кстати - Куб(HAL) - это голимый Си!!!
При чём тут плюсы?!
Писали бы на плюсах - не был бы таким ужасным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:38 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2473
besitzeruf писал(а):
тоже вот все хочу перелезть на С++, только кто бы сказал, как правильно а как нет ( кроме базывых и очевидных вещей)...

Внимательное изучение modm даст вполне определенное понимание того, как правильно. Сорсы тут https://github.com/modm-io/modm/
Вот эти статьи помогут в понимании почему именно так правильно:
http://www.webalice.it/fede.tft/stm32/s ... mming.html
http://embeddedprogrammer.blogspot.com/ ... y.html?m=1
В последней статье есть линк на еще одну либу, которая, увы, не получила должного развития, хотя сделана очень грамотно и, не смотря на возраст и отсутствие развития, все еще на голову выше халов, кубов и прочих досиковских портянок.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:40 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2473
Pingvin писал(а):
У кого аллергия на плюсы - вас тут никто насильно не держит, если что...
Есть ветки и про ассемблер.

Дело не в плюсах, а в том, как их использовать. Обычные классы-обертки вокрег хала или спл-я просто не позволяют раскрыть весь потенциал плюсов и вносят ненужный оверхед.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:49 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
Ссылки интересные.
Обязательно с шаблонами буду разбираться.
Что они сложны для восприятия - это да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 21:50 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
evsi писал(а):
Pingvin писал(а):
У кого аллергия на плюсы - вас тут никто насильно не держит, если что...
Есть ветки и про ассемблер.

Дело не в плюсах, а в том, как их использовать. Обычные классы-обертки вокрег хала или спл-я просто не позволяют раскрыть весь потенциал плюсов и вносят ненужный оверхед.

Согласен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 22:31 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 252
Откуда: Киев
Pingvin Я на С++ пишу примерно так: http://mcu.goodboard.ru/viewtopic.php?id=132. Написать именно библиотеку не так уж и просто и удобно, в отличии от разовых функций под конкретную задачу. В С++ не очень хорошо работать с прерываниями мякго говоря, но я выкрутился.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 22:54 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
какие проблемы с прерываниями?
не понял...
Никаких проблем нет.

Можно функцию вызвать, можно статический метод класса - в чем сложность?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 23:04 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 717
В имени этой статической функции-члена (метода).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 09 авг 2018, 23:41 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 3912
Откуда: Кемеровская область, Киселевск
Pingvin, может сразу на Arduino переехать?

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 10 авг 2018, 07:11 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
Oxford писал(а):
Pingvin, может сразу на Arduino переехать?

Не...
Мне нужен доступ к тому, что "под капотом".
Не понимаю скепсиса, если честно.
Выше пример -
Show никакого оферхеда
, чистый "синтаксический сахар".
Все это компилятор превращает в ту же работу с регистрами.
Что плохого в читаемом коде?
Что наглядней - это GPIOA->BSRR= 1<<15; или это portA15::high();?
Код на выходе один и тот же!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 + SDIO + FatFS + USB MSC
СообщениеДобавлено: 10 авг 2018, 08:38 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2087
VladislavS писал(а):
В имени этой статической функции-члена (метода).

Описываете метод как статический и вызываете из обработчика прерывания
Show


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

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


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

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


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

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

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