|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:18 am
| Автор |
Съобщение |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 USB стек
Вече близо месец откакто съм се закучил с това шибано USB и още не мога да измисля читава концепция.
Има ли някой желание и възможност да удари едно рамо?
|
| Чет Юни 16, 2011 1:35 pm |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Миро, стига бе! Лъже ли ме паметта кога всички ме плюехте дружно като виках че USB е дърво и трябва нещо по-просто да се разработи?
Злобата настрана, има една книга "USB lean", по памет мисля че така беше. Сега пиша от пада но утре ще си разровя архива, мисля че я имам още. Ако е там ще я кача. Та това е може би най-доброто за целта. Иначе и LPC (ти нали такива ги бореше?) имат някакви примери ама са трагедия за разнищване. Поне на мен с оная борба дето я имах наскоро със 1768 не ми помогнаха изобщо и USB-то там още ми седи за свидетел само 
|
| Чет Юни 16, 2011 2:51 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Темата за това колко е смотано USB не ми помага особено в случая
Запознат съм и със стандарта, така че книжката също се съмнявам да ми е особено полезна. Не правя за сефте USB стек, просто сега искам да го направя универсален за няколко архитектури, да поддържа както device, така и host/OTG.
Проблемът ми е "само" в концепцията как да изглежда като функционалност, структури вътре и т.н. За имплементацията нямам нужда от помощ.
|
| Чет Юни 16, 2011 3:36 pm |
|
 |
|
emilvtc
Ранг: Форумен бог
Регистриран на: Вто Фев 06, 2007 8:44 pm Мнения: 3175 Местоположение: Пловдив
|
Преди около две години подкарах USB драйвер за device за CC1111. Направих го на базата на примерния им код, но се наложи доста да го префасонирам и дописвам. (почти не се обработваха ексепшъни в него).
От каква помощ имаш нужда?
П.П.
Писали сме по едно и също време 
|
| Чет Юни 16, 2011 3:37 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Най-вече да си разчистя кашата в главата
Това което се опитвам да направя е USB стек за контролери, който да поддържа стандартните device класове като CDC, mass, HID и т.н., както и възможност за работа в хост режим, както и OTG логиката за host negotiation и т.н. И всичкото това нещо да не е обвързано с конкретна архитектура, т.е. да има ясно разделение между платформо-зависимата и независимата част. За целта го правя едновременно за 2 платформи (атмел и луминари).
Като цяло искам да се получи нещо подобно на lwIP стека, който сравнително лесно се портва на каква да е платформа. Само се портват няколко функции на ниско ниво. Но ниското ниво вече съм го измислил доре-горе. Знам кои функции да отделя и т.н.
Проблемът остава с "чистото" USB, т.е. на високо ниво логика и организация. Трябва да има нещо като задаване конфигурация. Тя трябва да може да се задава при буут или по желание на приложението. Примерно след начално стартиране се казва на стека да тръгне ако може или когато може в CDC режим. След това една или повече нишки могат да се пробват когато поискат да си приказват по серийния интерфейс.
Разделянето на конфигурация и ползване е необходимо, най-вече заради енумерацията. В смисъл понякога USB се ползва само при някаква причина, примерно при натиснат клавиш, устройството праща нещо на компютъра. Но е по-добре още при включване на устройството компютъра да го види, да си инсталира виртуалния СОМ порт, да се пусне приложението дето да слухти и т.н.
По принцип и при lwIP е така - в началото може да се инициализара с някаква конфигурация. После винаги може да се извика ChangeConfiguration(). А пък за същинското ползване си има API (сокети, техните NETCON или на ниско ниво).
Само че за разлика от Етернета USB конфигурациите са повече и по-сложни. API-тата при различните конфигурации може да се различават. Та това умувам как да направя...
|
| Чет Юни 16, 2011 4:58 pm |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Нали знаеш какво се казва за да ти държи духа висок?
"Ооо, забрави! Това нема да го бъде"
Успех!
|
| Пет Юни 17, 2011 5:58 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Абе kiid това са мои думи, аз съм ги патентовал 
|
| Пет Юни 17, 2011 8:34 am |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Хубаво де прати ми сметката за наема 
|
| Пет Юни 17, 2011 9:13 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Аз вече съм ти я пратил 
|
| Пет Юни 17, 2011 9:42 am |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Ясно. Ще се погрижа и когато имам резултати ще се обадя пак та да се опресни подигравката
Сега пиша от пада обаче като седна на компа ще пусна още няколко думи. Струва ми се че не си успял да тазбереш концепцията напълно (което е моя вина, де)
|
| Пет Юни 17, 2011 11:27 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
За съжаление аз съвсем сериозно мисля, че вашата концепция "няма да я бъде". Не го казвам, за да те обиждам или подигравам, мисля че не сме в детската градина
Просто идеята ви куца с тия +/-5V ще е много непрактично, отделно тръгвате по някакви сложни алгоритми и адресации. Наистина не ви следя развитието, защото според мен тръгнахте в грешна посока. Аз се опитах да ви обясня, че вече има измислени доста добри решения и ще е по-добре да стъпите върху тях, но по реакцията ти съдя, че не бях особено полезен...
Както и да е, няма значение какво мисля аз. Вие не може да се съобразявате с всички. Обаче ако имате нужда от критика, аз съм насреща
А по моя въпрос си напълно в правото да ми върнеш камъните обратно в моята градина. Лошото е, че това не ми помага. Дори и тоя стек "да не го бъде" по начина по който искам, пак ще се наложи да го направя, макар и по друг начин....
|
| Пет Юни 17, 2011 12:23 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Миро, извинявай, че ти пиша в темата, но имам едно конкретно питане: с каква латентност е приемливо да се обработват прекъсванията от USB device порт? И колко най-дълго би продължила обработката на едно таково прекъсване ( най-вече ще се наложи ли да се изчаква хоста )? Питам, защото искам да сложа (готов) стек, евентуално с леки доработки, в едно устройство, в което има изискване да не се забавя прекъсване с повече от 15-20 микросекунди. Не че не мога да се прекъсвам по време на изпълниние на ISR, ама не ми се иска ( стекът расте ). Устройството ще е с MSP430F6638, ако нищо не ти говори: все още бъгав 16-битов с USB девайс порт. Предлагат и някакъв стек с него, ама не съм го разглеждал. Отзивите са от "бълен боклук" до "става, и по-лошо е било".
|
| Пет Юни 17, 2011 12:38 pm |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
 |  |  |  | miro_atc написа: За съжаление аз съвсем сериозно мисля, че вашата концепция "няма да я бъде". Не го казвам, за да те обиждам или подигравам, мисля че не сме в детската градина  Просто идеята ви куца с тия +/-5V ще е много непрактично, отделно тръгвате по някакви сложни алгоритми и адресации. Наистина не ви следя развитието, защото според мен тръгнахте в грешна посока. Аз се опитах да ви обясня, че вече има измислени доста добри решения и ще е по-добре да стъпите върху тях, но по реакцията ти съдя, че не бях особено полезен... Както и да е, няма значение какво мисля аз. Вие не може да се съобразявате с всички. Обаче ако имате нужда от критика, аз съм насреща  А по моя въпрос си напълно в правото да ми върнеш камъните обратно в моята градина. Лошото е, че това не ми помага. Дори и тоя стек "да не го бъде" по начина по който искам, пак ще се наложи да го направя, макар и по друг начин.... |  |  |  |  |
Реакцията е едно а какво тегля от препоръките съвсем друго. Критиката е толкова нужка колкото и похвалата. Мен лично само ме дразни когато е просташки отправена (но това е друга тема и не се отнася за конкретния случай за който говорим). Аз за какво мислиш че пиша тука? Критика в изобилие
Както и да, за съжаление с нищо не мога да ти помогна със стека. Там е област тера инкогнита за мен. Но ако стане нещо с моя проект пак ще пиша за него.
|
| Пет Юни 17, 2011 12:52 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Колко ще продължи обработката на USB ISR-a разбира се зависи от това какво прави самият ISR. В общия случай може да е много време и при повечето стекове, които съм виждал наистина е много време. По-конкретно в прекъсването първо се проверяват един куп общи причини като usb reset, resume, suspend и т.н. След това се цикли по всички ендпоинти и за всеки се проверява дали има интерупт и ако има се проверяват пак един куп флагове да се види какъв точно е интеръпта за тоя ендпоинт.
Само проверките за това какви интеръпти има е по-голяма отколко цяло прекъсване на друга периферия. Но не забравяй че след като се открие причина тя се обработва. Аз се опитвам да сведа до минимум всякакви обработки докато съм в прекъсване. Но другите обикновено не правят така. Примерно като се получи RX INT по контролен ендпоинт типичната обработка е да се извади пакета от FIFO и да се извика един callback който гледа какъв точно е requst-a. Това са пак един куп проверки, често на нива.. На високо ниво да кажем се проверява дали е request за съответния device class (CDC, HID), ако не е вика се друга функция, която проверява дали не е general requst... После пък като се разбере вида на request-a може да следва обработката му, т.е. да се сглоби някакъв пакет и тоя пакет да се натъпче в фифото на друг ендпоинт.
Предполагам вече ти е станало ясно, че цялата работа може да е мноооого дълга и мнооого тромава. Аз затова гледам като се получи нещо само да сигнализирам таска на съответния девайс и да се разкарам от прекъсването максимално бързо.
Относно латентността - самото USB изобщо не е претенциозно. Може да го бавиш колкото си искаш, естествено скороста ще падне, защото ако не извадиш пакета от fifo-to хоста ще пробва следващ, но контролера автоматично ще каже busy, пробвай пак по-късно... Изключая iso трансферите където няма retry и ако изпуснеш пакет имаш проблем.
В твоя случай единствено което може да направиш е да пуснеш USB ISR-a с нисък приоритет и да разрешиш вложените прекъсвания. Поне две нива - usb и всички останали. Но това пак значи два пъти повече стек.... Другият вариант да не разчиташ на "15-20 микросекунди"... Има и трети вариант - да зарежеш тия msp430 
|
| Пет Юни 17, 2011 1:31 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Откъде да дръпна примерчета/usb stack за NXP и ST?
Аз ли не гледам където трябва... ама и на двата сайта избирам примерен чип и само дейташит ми излиза. Трябва да се регистрирам ли що ли?
|
| Съб Юни 18, 2011 5:22 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|