Easyelectronics.ru

Электроника для всех
Текущее время: 21 окт 2018, 09:45

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 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
Сообщения: 61
Откуда: Омск
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
Сообщения: 61
Откуда: Омск
Ещё раз намекну.
Я стараюсь не использовать ни куб, ни 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
Сообщения: 1978
Грызу плюсы понемногу - какая няшка! :)

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

#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
Сообщения: 1978
Немного доработал класс 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
Сообщения: 2412
Pingvin писал(а):
Грызу плюсы понемногу - какая няшка! :)

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

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


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

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


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

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

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

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


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

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

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


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


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

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

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


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

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


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

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


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

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

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


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

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


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

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

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

Согласен.


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

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


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

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

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


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

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


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

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

_________________
RADIOWOLF.RU


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

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

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


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

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

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


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

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


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

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


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

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

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