Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F4 Discovery где найти опсиание работы с USB Flash
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
flopix
Добрый день уважаемые форумчане.

В конец взорвав мозг при разбирании стандартного демо проекта Audio_playback_and_record хочу спросить.
Где можно найти вменяемое описание работы с библиотекой STM32_USB_HOST_Library?
Демопроект работает, но разобратся по нему в корректном использовании этой библиотеки не представляется возможным. Слишком все раскидано по разным файлам с перекрестными ссылками. Надеюсь на вашу помощь.
alx125
Цитата(flopix @ Jul 14 2013, 00:13) *
Добрый день уважаемые форумчане.

В конец взорвав мозг при разбирании стандартного демо проекта Audio_playback_and_record хочу спросить.
Где можно найти вменяемое описание работы с библиотекой STM32_USB_HOST_Library?
Демопроект работает, но разобратся по нему в корректном использовании этой библиотеки не представляется возможным. Слишком все раскидано по разным файлам с перекрестными ссылками. Надеюсь на вашу помощь.


Такого вменяемого описания не существует!
flopix
Тоесть единственный способ это курить их примеры?


Вот кстати нашел какое то описание от ST.
Flexz
Курите примеры из библиотеки, они проще. Качественная документация - не конек ST.
flopix
Цитата(Flexz @ Jul 14 2013, 09:45) *
Курите примеры из библиотеки, они проще. Качественная документация - не конек ST.

Там толкьо 1 пример с USB Host и в нем много чего лишнего.
Flexz
Я же сказал в билиотеке, а не демке которая идет с платой. Примеров там 4, из них 3 примера чисто хост на разные классы, и 1 пример хост-девайс.
flopix
Цитата(Flexz @ Jul 14 2013, 10:05) *
Я же сказал в билиотеке, а не демке которая идет с платой. Примеров там 4, из них 3 примера чисто хост на разные классы, и 1 пример хост-девайс.

Ух ты. А эти примеры я как то пропустил. Спасибо, то что нужно.
kovigor
Цитата(flopix)
Ух ты. А эти примеры я как то пропустил. Спасибо, то что нужно.

Едва ли они проще. В свое время разбирал не хост, а дивайс от ST. Сам МК неоправданно усложнен, примеры тоже сложны до умопомрачения. Документация отвратительная. Посему я зарекся использовать ST без острой необходимости. Те же примеры от NXP и ATMEL на порядок проще ...
hd44780
Если надо, могу дать рабочий проект на кокосе.
Работает ли оно а ИАРе и кейле, я не знаю...

Документации у меня нету ...
flopix
Цитата(hd44780 @ Jul 14 2013, 19:28) *
Если надо, могу дать рабочий проект на кокосе.
Работает ли оно а ИАРе и кейле, я не знаю...

Документации у меня нету ...

Давайте конечно. Уменя как раз кокос и установлен. Только надеюсь не тот пример который уже тут выкладывали и который почему то после компиляции выдает прошивку нулевого размера.
hd44780
Цитата(flopix @ Jul 14 2013, 21:12) *
Давайте конечно. Уменя как раз кокос и установлен. Только надеюсь не тот пример который уже тут выкладывали и который почему то после компиляции выдает прошивку нулевого размера.


Ловите. У меня свой пример.
Там флэшка, FatFs, запись файла и определение имени флэшки и её PID/VID.

Нулевой размер у меня был, но это уже пройденный этап. В моём случае это было связано с отсутствием в проекте стартового кода (если не ошибаюсь, это называется CMSIS BOOT в репозитарии кокоса при начальной генерации проекта).
Больной кокос и GCC не выдают совершенно никаких ошибок в этом случае. Козлы. Больше мне нечего сказать ...

Да, по ходу ещё одно замечание. Если захотите делать включение/отключение флэшки на лету, я дам Вам пример.
В примере, что я Вам дал, данного эффекта нету, т.к. после записи файла идёт останов, но, как я уже позже выяснил, хост виснет, если выдернуть флэшку. Химичить надо...
flopix
Цитата(hd44780 @ Jul 15 2013, 07:18) *
Ловите. У меня свой пример


Спасибо. Скомпилировалось. Буду эксперементировать и задавать вопросы sm.gif
hd44780
ok
flopix
Потихоньку дорабатываю ваш пример.

Добавил вывод картинок в формате bmp 16 бит на дисплей с USB флешки.

В планах:
воспроизведение mp3
управление с ДУ
часы на дисплее
сенсорное управление (экран с тачскрином)

flopix
Как оптимально по скорости читать файл с флешки? Я читаю блоками по 480 байт. При этом файл размером 150кб читает почти 1 сек. Пробовал увеличить размер блока, скорость не меняется.
hd44780
Скорость не тестировал, но учтите, что на дискавери USB FS, у него потолок 12Mbit/sec, по факту ещё меньше.
Если надо больше, смотрите в сторону USB HS - чип USB3300.
У меня есть вот такая хреновинка - http://www.ebay.com/itm/USB3300-USB-HS-Boa...=item3a74e7e8fa но руки пока не дошли.

Встречная просьба - поделитесь пожалуйста выводом BMP rolleyes.gif . Можно в личку, если не хотите на всеобщее обозрение.

И как Вы хотите MP3 декодировать - программно или какой-нибудь VS1011k? Я с программными долбался, ни хрена хорошего не вышло. Заработал только один, да и то с прошивкой автора, а скомпилированный из его же исходников вылетает где-то в HardFault. Пока забросил это. В ящике лежит железный декодер VS1011k, хочу с ним поиграться.
Я выводил JPEG декодером Чана. Если хотите, могу дать готовый код. Подсунете ему только свою функцию вывода либо точки либо битмапа RGB565.
Тач я уже почти добил, сейчас вожусь с калибковкой.

Какой у Вас дисплей? У меня сейчас вот этот - http://www.ebay.com/itm/3-2-tft-lcd-shield...e#ht_1273wt_934

Спасибо.
flopix
Дисплей на контроллере SSD1289. У вас такой же просто распаян на другую плату.

Приложил модифицированный исходник.
bmp выводится пока корректно при условии что разрешение файла 240*320 точек формат 16 бит R5G6B5. Тестовый битмап приложил в архиве.

mp3 декодер буду делать на программном декодере библиотека halex, есть рабочий пример под Keil. Это наверняка тот же про который вы говорили. Я с ним долго бодался, тоже вылетал в прерывание по HardFault. Оказалось нужно увеличить в настройках проекта размер памяти выделяемый под стек.
Вот тема http://electronix.ru/forum/index.php?showt...5&hl=flopix

У меня у самого уже 2 года валяется VS1053B никак не соберусь чтобы прикрутить куда нибудь. Я тогда накупил деталей чтобы запилить проект на LPC но потом подвернулась недорогая отладочная плата от ST и стал ковырять ее.

Под jpeg пример выкладывайте.
hd44780
Спасибо. Пример позже к вечеру выложу.
MP3 с ходу не нашёл, позже гляну. Я колупал пример какого-то японца.
hd44780
Ловите JPG. Дисплей там, правда другой - ST7735, callback вывода сами поменяете под себя.
Я делал и на SSD1289, работает, но в проекте сейчас бардак вследствие отладки тача, поэтому не даю.

И ещё раз про MP3. В той теме я не нашёл проекта. Только вложение с .map файлом.
flopix
Вот рабочий пример под keil.

Это я переделал стандартный проект Audio_playback_and_record\MDK-ARM

Сам проект находится в папке project\Audio_playback_and_record\
В архиве есть папка Libraries и Utilities. Не меняйте относительное расположение папок так как проект тянет библиотеки из них.
Пример рабоатет с дисплеем. И чтобы на инициализации не зависло, закоментируйте ее в main.c

В проект много мусора, поэтому я и решил все переделать по нормальному с пониманием дела.

На флешку файлы можно закидывать в подпапки, перебирает по порядку. Не делайте русских имен, а то на них зависает, еще не искал почему. И не кидайте туда wav файлы, так как я их воспроизведение не доделал, оно не работает.

Переключение треков кнопкой на плате.

И еще. Я заметил что немного не соответствует тон воспроизведения, то есть скорость чуть чуть занижена но этим грешит и пример от японца. Где то неверно подобрана частота.
hd44780
Попробовал, работает sm.gif . Скорость проигрывания действительно замедленная sad.gif .

Вот подумалось - может скорости флэшки (точнее USB FS) не хватает...
flopix
Цитата(hd44780 @ Jul 18 2013, 06:59) *
Вот подумалось - может скорости флэшки (точнее USB FS) не хватает...

Точно тет. Так как одинаково замедленно при воспроизведении и 128кб/с и 320кб/с битрейта. К тому же в стандартном примере скорости хватает для чтения несжатых wav файлов, там скорость потока нужна 44100*16*2 = 1,41мбит/с.

Плюс если бы не хватало скорости чтения с флешки то менялся бы не тон воспроизведения, а были бы пропадания звука.

Звуковой поток выводится через спец. аудиочип размещенный на плате Discovery. Он сам вытаскивает данные из буфера используя DMA. Где то неверно настроена его частота выборки.
flopix
Да Jpeg завелся с пол-оборота. Спасибо. Хотелось бы конечно скорости, как например тут.

http://www.youtube.com/watch?v=0ETyFmAMFjY

Даже видео воспроизводится на этой плате.



Правда везде в примерах используют карту памяти. Наверно с ней этот чип может работать в разы быстрее чем с USB Flash.
hd44780
Посмотрел. Крутится быстро sm.gif . Самому интересно. Но исходников и схем я на его японском сайте не нашёл. Может потому, что по ихнему не понимаю sad.gif .
Можно попробовать SD карту через SDIO подцепить. Наверняка быстрее будет, чем USB FS.
Или USB HS покурить ...
flopix
Протестировал макс скорость чтения 10мб файла:

чтение блоками по 256 байт - 22 секунды. Это 454кбайт/с (3.6мбит/с)
чтение блоками по 512 байт - 19 секунд. Это 526кбайт/с (4.2мбит/с)
чтение блоками по 1024 байт - 17 секунд. Это 589кбайт/с (4.7мбит/с)
чтение блоками по 2048 байт - 15 секунд. Это 667кбайт/с (5.3мбит/с)

При дальнейшем увеличении размера блока скорость растет настолько медленно, что жалко тратить на это ОЗУ.



А для USB HS под STM32 есть либы?
hd44780
Цитата(flopix @ Jul 20 2013, 10:29) *
А для USB HS под STM32 есть либы?


Есть такая партия sm.gif
У STM есть отладочная плата - STM3240G-EVAL, на ней USB HS в комплекте. К ней есть исходники демо-прошивки, там оно есть.
Также здесь - http://www.ebay.com/itm/USB3300-USB-HS-Boa...a#ht_1417wt_943 что-то есть. Я их смотрел, оно похоже на выжимки из той же самой STM3240G-EVAL.
Колупайте эти примеры. Но они жутко мутные - всё дико напутано, чёрт ногу сломит wacko.gif . Короче, обычный стиль STM krapula.gif . У меня пока руки не дошли. Этот ебеевский модуль к дискавери я припаял, а делать дальше пока некогда. Только учтите, что на F4Dscovery надо убирать микрофон, он обеими ногами пересекается с ULPI интерфейсом. Я у себя его убрал. И ещё. Если я правильно понял, то сброс USB3300 нельзя припаивать к сбросу платы - уровни там по-моему противоположные. Сбрасывайте его какой-нибудь ногой.
В примерах к дискавери, судя по коду, USB HS тоже есть (включается макросами), но кто-то где-то на форумах писал, что эти примеры не годятся, они покоцаные, в них чего-то не хватает. Вроде нет каких-то обработчиков прерываний, если я правильно понял.

Советую делать сперва и иаре или кейле, т.к. они официально поддерживаются ST-шниками. В кокос лезть не советую, наверняка буду проблемы совместимости. У меня лично проекты, работающие на иаре, не работали в кокосе и наоборот.
Когда заработает, тогда уже долбаться с кокосом ...

Попробуйте, если что у Вас получится стукните.
flopix
По сути скорости 5 мбит достаточно для поделок на этой плате. Нужно сделать чтобы чтение USB работало в фоновом режиме. А вот тут уже нужно думать или мудрить чтобы обработка прочитанных данных с флешки (проигрывание музыки, вывод картинок, видео и.т.п.) выполнялась в фоне по прерыванию или использовать например RTOS. И такие функции как f_read запускать отдельным потоком.
hd44780
С RTOS и ему подобными вещами я пока, увы, не занимался. Помочь не могу sad.gif .

Я тач почти добил. Вас интересует. Могу выложить, когда "причешу".
flopix
Конечно выкладывайте. Особенно если "причесанное". Я добавил в проект работу с RTC (часы). Сразу проект оброс кучей барахла. Хоть бери и все библиотеки сам пиши с нуля по мануалу.
hd44780
Ок. Закончу, выложу. Под кокос.
hd44780
Ловите проект с тачем. Может где-то что-то недоделал или криво, зато работает rolleyes.gif .
flopix
Это еще что за либа?

Цитата
BUILD FAILED
c:\coocox\gcc\arm-none-eabi\lib\armv7e-m\fpu does not exist.
hd44780
Это надо для железного FPU проца.
Если надо, поправьте пути руками (иначе невозможно) либо вырубите этот FPU в конфиге проекта и удалите всё из списка Linked Libraries на вкладке Link.
flopix
А как подключен дисплей для которого этот проект? А то что то не работает. Там вроде не используется FSMC, софтовый ногодрыг?
hd44780
Котроллер там и SSD1289, нативно он 16-битный, но внешний интерфейс у него 8-битный под авр (ардуино). Я не пытался подобрать для него режим FSMC, и сделал софтовый ногодрыг, как на авр-ах.
Подключение всего модуля:
SSD1289 STM32
------- ---------
D0 PE8
D1 PE9
D2 PE10
D3 PE11
D4 PE12
D5 PE13
D6 PE14
D7 PE15

RST PD1
nCS PD2
RS PD3
nWR PD8
ALE PD10
D_OFF GND

SD_CS PD0
TS_CS PD4
MISO PC11
MOSI PC12
CLK PC10
TS_IRQ PD9
D_OFF GND
flopix
FreeRTOS прицепил. Оказалось ничего сложного. Цепляется к проекту с помощью единственного #include

Параллельная работа с USB + 2 отдельных задачи в которых просто мигают светодиоды работают отлично, на скорость чтения с USB не повлияло.
Чуть позже выложу пример.
hd44780
Давайте. Я с ней никак не разберусь rolleyes.gif

PS.
Вчера попытался выводить JPG через функции LCD_WriteBmp - работает, но чего-то жутко медленно. По пикселям гораздо быстрее wacko.gif . Наверное я где-то перемудрил. До BMP не добрался.
flopix
Пытаюсь приделать работу со звуком из примера.

Пока не получается. Не срабатывает почему то прерывание при заполнении буфера через I2S. Что то неодоинициализировал sad.gif
hd44780
Из какого примера?
Audio_playback_and_record?
flopix
Цитата(hd44780 @ Jul 22 2013, 17:56) *
Из какого примера?
Audio_playback_and_record?

Да. Там есть функция

Код
/**
* @brief  Initializes the wave player
* @param  AudioFreq: Audio sampling frequency
* @retval None
*/
int WavePlayerInit(uint32_t AudioFreq)
{

    /* Initialize I2S interface */
    EVAL_AUDIO_SetAudioInterface(AUDIO_INTERFACE_I2S);

    /* Initialize the Audio codec and all related peripherals (I2S, I2C, IOExpander, IOs...) */
    EVAL_AUDIO_Init(OUTPUT_DEVICE_AUTO, volume, AudioFreq);

    return 0;
}


вот думаю достаточно ли ее для полной инициализации работы с внешним DAC или еще что то нужно конфигурировать.
hd44780
Лично я с DAC не работал.
Но я пробовал код из этой http://we.easyelectronics.ru/STM32/primery...4-discovey.html статьи. Там есть прошивка с исходниками, которые делают из дискавери USB звуковуху. Я её проверял, оно работает. Может тот пример Вам поможет.
flopix
Неделю промаялся с поиском проблеммы из за которой не работал вывод звука. Оказалось в Coocox идет более старая версия файла system_stm32f4xx.c в которой не хватает блока для инициализации I2S.

Код
/******************************************************************************/
/*                          I2S clock configuration                           */
/******************************************************************************/
  /* PLLI2S clock used as I2S clock source */
  RCC->CFGR &= ~RCC_CFGR_I2SSRC;

  /* Configure PLLI2S */
  RCC->PLLI2SCFGR = (PLLI2S_N << 6) | (PLLI2S_R << 28);

  /* Enable PLLI2S */
  RCC->CR |= ((uint32_t)RCC_CR_PLLI2SON);

  /* Wait till PLLI2S is ready */
  while((RCC->CR & RCC_CR_PLLI2SRDY) == 0)
  {
  }
}
flopix
При добавлении mp3 бблиотеки Helix выяснилась неприятность - Coocox не понимает синтаксис ассемблерных *.s файлов. Я даже не знаю что теперь делать sad.gif

Цитата
C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S: Assembler messages:
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:1: Error: bad instruction `area |.text|,CODE,READONLY,ALIGN=2'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:2: Error: bad instruction `thumb'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:3: Error: bad instruction `require8'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:4: Error: bad instruction `preserve8'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:6: Error: bad instruction `pcm RN r0'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:7: Error: bad instruction `vb1 RN r1'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:8: Error: bad instruction `coef RN r2'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:10: Error: bad instruction `vlo RN r0'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:11: Error: bad instruction `vhi RN r3'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:13: Error: bad instruction `sum1ll RN r4'
[cc] C:\CooCox\CoIDE\workspace\FlashTest-Coocox-USB-LFN-Rus-PID_VID_RTOS\helix\real\arm\asmpoly_thumb2.S:14: Error: bad instruction `sum1lh RN r5'
......
hd44780
Про это я не в курсе sad.gif .
Я знаю ещё одну ложку дёгтя - .s Keila и .s иара тоже разные sad.gif
Лично я буду ставить VS1011K sm.gif

Посмотрите мануалы на GCC ....
flopix
Пока обошлось. Оказалось те *.s файлы не нужны в проекте. Уже допиливаю декодировку. Будет готово выложу проект.

По поводу скорости воспроизведения - где то неверно настроены предделители тактирования I2S. А может вообще частота внешний кварца сильно отличается от 8мгц.
В стандартной демке Audio_playback_and_record та же ситуация.
Если при инициализации EVAL_AUDIO_Init(OUTPUT_DEVICE_AUTO, volume, AudioFreq);

AudioFreq домножить на небольшйо коэффицинет, то можно добиться нужной частоты вывода звука.

Цитата(flopix @ Jul 30 2013, 22:16) *
Оказалось те *.s файлы не нужны в проекте.


Поторопился с выводами. Нужны. Еще немного покопаюсь с настройками и наверно перенесу проект в Keil.

Я вообще в Coocox не вижу настроек gcc ассемблера. Может он вообще с ним не может работаь?
flopix
Нашел *.S файлы библиотеки декодера helix для GCC ассемблера. Воспроизведение работает sm.gif
hd44780
И частота нормальная? sm.gif
flopix
По поводу установки частоты воспроизведения. Функция I2S_Init пытается подобрать делители чтобы получить максимально близкую частоту к заданной, в нашем случае 44100,

Но для частоты кварца 8МГц на выходе I2S получается что то около 43556ГЦ и это режет слух. Как подобрать более точно частоту пока не нашел.
hd44780
ясно. Когда разберётесь, поделИтесь rolleyes.gif .
Flexz
Цитата(flopix @ Jul 31 2013, 19:39) *
Но для частоты кварца 8МГц на выходе I2S получается что то около 43556ГЦ и это режет слух. Как подобрать более точно частоту пока не нашел.

А вы пользовались Clock configuration tool для подбора частоты I2S? Самому со звуком поработать не довелось, но вот в тулзе сейчас легко получил 44.1кГц с ошибкой 0.0011%
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.