Отговори на тема  [ 14 мнения ] 
Бързодействие на USB ма STM32F103... 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение Бързодействие на USB ма STM32F103...
Здравейте!
От няколко дни се бъзикам с USB -то на един STM32F103RET6. Подкарах разните примери от библиотеката на ST. В случая версията е STM32_USB-FS-Device_Lib_V3.3.0 ако има някакво значение де. За сега оглеждам основно Mass Storage.

Та въпроса ми е горе долу следния:
Вижда ми се много бавна скоростта на трансфер с картата. В тоя пример се ползва SDIO модула и картата със сигурност не е тясно място. Намерих една идиотщина в примера: на всяка секунда се прави проверка дали картата е там. Незнам защо, ама на тия в примера тази проверката се състои в деинициализиране и после наново инициализираше на картата на всяка секунда! Само ръгаш УСБ в компа и компа става 386... Всичко работи - ама чакаш... та се заплесваш. Както и да е - това го оправих. Вече стана пъргаво като интерфейс, обаче като скорост на трансфер към и от карата пак ми се вижда доста бавно.
Един файл от 50 мб се записва на картата за около 6 минути. При четене е същата работа.
За сравнение - имам тука едно скопче DSO Nano, което е с подобен проц, и което също има mass storage. Там определено софта изглежда читаво написан, и въпртеки това и там скоростта е съизмерима с вече описаната. Верно там картата е със SPI ама едва ли това е определящо.

Та въпроса беше: - някой ПОЛЗВА ли mass storage с STM32F1.. и какви са му впечатленията за скоростта - особено с по-големи файлове...
Ако има някакво предположение за тясно място...

Примера ползва BULK трансфер от типа simple buffer, каквото и да означава това. :(


Чет Ное 10, 2011 10:08 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Бързодействие на USB ма STM32F103...
При USB комуникацията става на цикли, тъй като само хоста може да започва да говори. Та той обхожда всички устройства и техните ендпоинт и всеки който е готов да приема или да има праща бива обслужен. Ако някой каже "не съм готов" си пропуска реда, но ако е готов може да обмени поредица от пакети.

Сега, от страна на контролерите (всички, не само ST) стандартната процедура е подготвяш един пакет и чакаш да се прати. Само че още преди ти да разбереш, че се е пратил хоста вече пита за следващия... Тъй че стандартно си умираш с един пакет на цикъл, ако еднпоинта ти е 64 байта и обхождането е през 1-10mS може да прецениш, че в най-добрия случай ще постигнеш 64KB/s.

Затова задължително се ползва двойно буфериране, почти всички контролери имат възможност да напълниш два пакета. Като се прати първия ти прави прекъсване и ако си достатъчно бърз да подготвиш нов (докато се праща втория), може да вкараш повече от два пакета на цикъл.
Но като гледам това дето казваш 50МБ/6мин са ти някъде 128K/s демек май се моткаш повечко из прекъсванията и/или стека ;-)

А може и ST-то да е ограничено нещо. С Луминари доколкото си спомням го тествах и при 64 байта пакет не можах да вдигна повече от 200К. После с вдигане на размера на пакета скорстта стигаше някъде до 450KB/s и повече не пожела. При това теста ми беше без да обработвам данни, само трансфери...


Чет Ное 10, 2011 11:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: Бързодействие на USB ма STM32F103...
Трябва да го пренапишеш с двойно буфериране. Ще вдигнеш скоростта поне 2-3 пъти.

А най-бързо става с изохронен трансфер и двойно буфериране. Така ако си сам на шината може да уплътниш до дупка шината. Ти нали със звуци се занимаваш, що не ползваш изохронен, той затова е правен. За флеш карти не става де :)

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пет Ное 11, 2011 10:33 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение Re: Бързодействие на USB ма STM32F103...
Да - с аудио се занимавам, ама в случая не става въпрос за аудио.
Идеята е да ползвам самото устройство като четец за карта, тъй като тя тъй и тъй се ръга в него.
Затова гледам MASS STORAGE. Изохронен не става, щото там се губят или поне може да се губят пакети - поне доколкото разбрах.

Проблема е обаче, че файловете с които работя по принцип са големи - 3-4 гигабайта. Тая скорост която постигам колкото и да я вдигна, сякаш няма да се доближа даже до китайския четец за 2 лв, който записва цяла карта от 4 гб за около 7-8 минути. Не съм го мерил точно - ама е там някъде.

В крайна сметка се очертават поне 2 проблема.
1. Когато ползвам USB не мога да си пускам проца на пълна скорост, заради честотата на кварца който ползвам, щото делителя за усб е само 1:1 или 1.5:1. Та щом имам усб, работя на вътрешен кварц и в крайна сметка на 48МХз. Мърдане няма.
2. Цецо, хубаво казваш - преправи го на двойно буфериране - ама голямо ровене рових и никъде не можах да намеря пример. Вярно че става и с четене на разни пдф-и. Даже със сигурност така ще е по-добре предполагам. Ама като се има в предвид, че USB по принцип ми е напълно ново - виждам месеци работа по това, че да стане читаво накрая. В същото време, така с периферния поглед виждам и тоя четец дето ми стои на масата.. и все някак имам чувството че това ще е някак напразно загубено време.

Надявах се аз да бъркам някъде ... ВИЕ да кажете къде ... да сменя 2-3 реда и работата да се оправи! :D

Ама явно пълно щастие няма! :)


Пет Ное 11, 2011 10:57 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Бързодействие на USB ма STM32F103...
Значи най-лесното решение за теб е да вземеш от по-новите ST-та с High speed USB. Малко по-скъпички са, ама предполагам може да си го позволиш.

Иначе по скоростта която постигаш, според мен двойното буфериране ти е пуснато тъй че вероятно няма да стане само с 2-3 реда ;-)
А пък пренаписване не ти препоръчвам от опит... аз го правя, ама при мен нещата са малко по-различни. След няколко месеца вероятно ще мина и на SТ и тогава ще мога да ги коментирам по-конкретно като хардуер и възможности. То и сега ако покажеш какво ползваш бих могъл да го разгледам, но не вярвам че ще мога да ти го ускоря в пъти ;-)


Пет Ное 11, 2011 11:30 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: Бързодействие на USB ма STM32F103...
Може много да се оптимизира - разглеждал съм го точно това софтуерно произведение на ST...спомням си, че имаше доста озадачаващи неща. То не е писано да е читаво, а да е разбираемо, затова и не очаквайте нещо сериозно от него.

Пренаписване му е майката, ама си е много работа. И се иска да си изчел USB спецификацията преди това, дето е има няма - 500 стр. Абе работа си е, затова и го няма читаво направено фрии вероятно :) Аи пак ти казвам - не очаквай чудеса. 2-3 пъти преко сили.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пет Ное 11, 2011 11:32 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение Re: Бързодействие на USB ма STM32F103...
Бе Цецо...
Как може на това да му кажеш "разбираемо" ?
С тия дефиниции из вътре и със 50% код който гледаш - ама реално го няма...
Друго може да е - ама разбираемо не е!

Иначе ще се минава на 4-ка, ясно е. Ама старите клиенти така ли да ги оставя...
Все трябва и за тях нещо.
Нагласил съм и изненади... мп3 плеърче читаво, боотлоадер на фат... малуумен mass storage... :D ... бе все благинки...


Пет Ное 11, 2011 11:39 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Бързодействие на USB ма STM32F103...
juzisound написа:
Друго може да е - ама разбираемо не е!


За разбирането нямаш проблем.... Мисля че познавам добре стандарта, разгледал съм и всеки стек дето ми е попаднал. Но повярвай ми проблемът не е в направеното, а в това което не е направено. Ако беше general purpose програмист щях да ти кажа "сядай и прави", ама ти си имаш продукти и своя област. Затова ти казвам да не си губиш времето.
Ако ще оглеждаш нещо, трябва да видиш комуникацията по ендпоинтите. Това значи как са направени прекъсванията и също от твоя страна как ги ползваш. Самото USB и mass storage не ти трябва да бараш. То си е на отделен контролен ендпоинт и от него не зависи скоростта.


Пет Ное 11, 2011 12:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: Бързодействие на USB ма STM32F103...
Ако много се напънеш и STM-а не спира по някаква причина (нито SD картата), може и да дигнеш до към 800-900 KB/sec.
Оттам нагоре - USB 2.0 Hi-Speed.


Пет Ное 11, 2011 3:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Re: Бързодействие на USB ма STM32F103...
juzisound написа:
В крайна сметка се очертават поне 2 проблема.
1. Когато ползвам USB не мога да си пускам проца на пълна скорост, заради честотата на кварца който ползвам, щото делителя за усб е само 1:1 или 1.5:1. Та щом имам усб, работя на вътрешен кварц и в крайна сметка на 48МХз. Мърдане няма.

Този процесор е набързо издялкан, има и други недомислици като например CAN модула и USB-то използва една и съща област от RAM и не могат да се използват едновременно, което много ме вбеси, защото пишат с големи букви какви възможности имал, и решаваш гут, ще го използвам, и като се зачетеш в ситните букви - не можело.

Като скорост на трансфер: USB 2.0 Full Speed позволява толкоз. Китайския ти четец най-вероятно е High Speed. При мен на Primer2 също е изключително бавно копирането през USB-то на SD картата. Ама каквото е тва е, няма смисъл да се дълбае в това недоносче.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пет Ное 11, 2011 6:06 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение Re: Бързодействие на USB ма STM32F103...
Здравейте!
Имам малко нови наблюдения по въпроса:

Правих малко оптимизации, които се състоят основно в 2 неща:
1. По принцип, примера беше правен за поддръжка на 2 устройства едновременно, SD карта и външен флаш на демо платката на ST. Махнах навсякъде поддръжката за флаша, и съответно проверките за кое точно от двете устройства става въпрос. Остана си само SD картата.
2. Махнах по ендпойтовете за данни най-честите безмислени викания на функции от типа: първата вика втората, втората третата, третата четвъртата и реално само четвъртата върши някаква работа, като обикновено записва или чете в един регистър. Другите се викат колкото приказка да става.

Резултата, базиран на 10 мб файл:

Преди оптимизациите:
Запис на файла 54 сек, което е около 189 кб/сек или около 1.553 MBPS.
Четене на файла 22 сек, което е около 465 кб/сек или около 3.813 MBPS.

След оптимизациите:
Запис на файла 46 сек, което е около 222 кб/сек или около 1.824 MBPS.
Четене на файла 18 сек, което е около 569 кб/сек или около 4.668 MBPS.

Да се има в предвид, че това са един вид само полезни данни. Незнам колко служебни вървят през това време, ама до 12 MBPS има още какво да се желае.

Остана да подменя само оригиналните функциите за четене и писане от SD картата с моите версии. Моите са поне 2 пъти по-бързи и предполагам и от там ще имам доста полза. Това като остане време. Гадно е че процесора е само на 48МХз, ама това няма оправия...

Никак не ми е ясно това двойно буфериране, а изглежда че ако подкарам и него, нещата може да придобият приличен вид. Ако някой го е правил - да разясни малко или поне да предложи някаква читаво четиво. За пример мога само да се надявам... :rolleyes:


Нед Ное 13, 2011 11:23 am
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение Re: Бързодействие на USB ма STM32F103...
Става дума за следното... Имаш 2 буфера /масиви. Пълниш с данни единия, когато е готов го подаваш на хардуера за изпращане, през това време си тъпчеш данните в другия. Когато и той вече е пълен, разменяш им местата, предполагайки че данните от първия вече са заминали по жицата. Ако не са - чакаш... Това би следвало да ти спести времето за чакане докато ти се изпратят данните, понеже хоста ги изисква асинхронно спрямо твоята програмка. В доста от usb перифериите това си е реализирано хардуерно, само трябва да си го настроиш. И друго... що не си пуснеш ДМА-то ?


Пон Ное 21, 2011 11:19 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение Re: Бързодействие на USB ма STM32F103...
Дааа...
Леко по леко почва да ми се изяснява картинката. Мъгла е още де - ама все пак не чак толкова гъста. :D

Само за инфо - подмених функциите за четене от картата.
Въпреки че моите са доста по-бързи /поради изчистване, не че друго/, общия ефект за моя изнената е почти незабележим. Явно не му е там тесното място...

Иначе двойното буфериране е принципно ясно. Не ми е ясно обаче някак мястото или слоя, където трябва да се състои това двойно буфериране, че да има файда от него. До колкото разбирам УСБ периферията може да работи само с нейната си памет, и затова аз сега непрекъснато прехвърлям данни от и към нея. Изглежда ми сякаш че точно там трябва да имам двойно буфериране, защото иначе всички останали буфери са все с по-голям размер от тия на УСБ-то... Ма може и да бъркам де...

Сега остана да имам и малко повече свободно време да го разръчкам...
Ама кой знае, щото вече си взех един кит от тия с STMF4, дето целия кит струва по-малко от процесора на него. Да не говорим, че на него има и още един процесор и още сума ти неща... Де им е сметката на тия от ST...


Пон Ное 21, 2011 3:42 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение Re: Бързодействие на USB ма STM32F103...
Не знам как е организирано при СТМ. На луминари, всеки ендпойнт си има FIFO. За да заредиш буфера, записваш на адреса на фифо-то колкото байта ти трябват. Оттам нататък ти остава само да чакаш хоста да ги поиска. След като изчезнат по жицата, ти научаваш затова, дали в прекъване, дали по друг начин, няма значение. И следва отново да заредиш фифото, през това време пък хоста, искайки нови данни ще получава само NAK от тебе, докато не си готов с данните. И се налага сега пък тебе да чакат. Ето точно тук му е мястото на двойното буфериране. Сега, при лунинари за да ползваш двойно буфериране, само вдигаш (или сваляш) някакви битове из контролните регистри на ендпойнта. Начина на достъп си е все същия, но поведението на буфера вече е друго. Недей пренебрегва и ролята на DMA де.


Вто Ное 22, 2011 1:38 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни