# PIC mikrokontrolleri >  Microchip USB Framework jauna versija

## jeecha

Shodien biju patiikami paarsteigts ieraugot ka Microchip USB Frameworkam ir kaarteejaa jaunaa versija - 2.3 (http://www.microchip.com/stellent/id...cName=en537044).

Liidz shim lietoju aizveesturisko 1.3 versiju (jo 2.1 bija ljoti daudz kljuudu, nebija iekljauts CDC paraugs utt utjp). Aatri uzmetot aci 2.3 paraugiem izskataas ka taas lietas kas 2.1 versijaa bija aciimredzami bugainas tagad ir salabotas. Neliels miinuss 2.x versijaam (vismaz prieksh iesaaceeja) ir tas ka visi paraugi uztur faktiski jebkuru Microchip PIC kontrolieri un evalkitu ar USB transiiveri, rezultaataa tas kods ir paarbaazts ar dazhaadiem #ifdefiem prieksh dazhaadiem kontrolieriem un kompilatoriem. Labums saliidzinot ar 1.3 paraugiem ir ka kods ir krietni paarorganizeets un daudz paarskataamaaks un sistemaatiskaak sakaartots. Taapat ir pielikti paraugi OTG/Host prieksh kontrolieriem kas to uztur.

Taakaa ja kaads kautko taisa uz Microchip USB PICiem un sen nav skatiijies Microchip websaitaa - varbuut shis info noder  ::

----------


## jeecha

Paspeeleejos nedaudz ar jauno framework versiju - jaunais HID bootloaderis un CDC device paraugs straadaa.

Naacaas gan nedaudz pamainiit linkeru scriptus un pashu kodu jo bootloaderis kompileets ar C18 apgraiziito studentu versiju (kurai shaadas taadas optimizaacijas nav) neielien 0x0000-0x0FFF programmas atminjas regjionaa (naacaas palielinaat bootloaderim paredzeeto regjionu uz 0x0000-0x1100).

----------


## marizo

Nesen tāpat aiz neko darīt papētīju Framework versijas, piereģistrējos MC lapā, lai dabūtu C18 studentversiju, pamēģināju dažādus kodus uz 18F4550.
Vienu vakaru ņēmos ar helpiem, lai saprastu, kur kas notiekās. Kā jau Tu saki, pārāk daudz visādu #ifdef. Vēl man nepatika tas, ka visi nepieciešamie faili tur samesti kopā - īsti nav saprotams, kas vajadzīgs projektā, kas ne. Liekas, ka ērtāk būtu atsevišķi projekti ar visiem nepieciešamajiem includiem.
Vismaz pagaidām, kamēr vēl C18 kompileris darbojas ar optimizāciju, man visi kodi, kas paredzēti tam Demo Boardam ar 4550 darbojās, vienīgi bija tāda nianse, ka vajadzēja salikt rezistorus pie RA1 un RA2 - tip kontrolleris pārbauda, vai ir pieslēgts pie USB un attiecīgi ieslēdz/izslēdz USB hardwari. Ja paliek gaisā, tad kontrolleris ļurinās un restartējas. Beigās atradu, kurā vietā to var salabot arī programmā - tur pat vieta atstāta, var ērti aizkomentēt.
Izmēģināju arī Bootloaderus (HID un to PDFSUSB.exe), bet tā ērtāk ir programmēt ar ICD2 klonu - nav atsevišķā programmā jāver vaļā HEX fails.
Jāsaka, ka tur ir baigi daudz visādu piemēru/ paraugu/ failu/ helpa/ informācijas. No vienas puses tas ir labi, bet no otras puses - tas ir diezgan sarežģīti un iesācējam galīgi nepiemēroti, nepieciešams ilgs laiks, līdz kaut cik tajā visā iebrauc. Bet iespējas toties liekas tiem USB kontrolleriem ujujuj lielas.

----------


## abergs

Cita projekta sakarā arī nedēļu atpakaļ papētīju MICROCHIPa Framework 2.3. Konkrētāk:USB device Bootloader,
USB device MCHPUSB,USB device WinUSB.
Kaut ko nācās koriģēt, bet viss beigās strādāja.Hostus gan nemēģināju.
Patika ka visas korekcijas uz vietas komentētas.

----------


## marizo

Cik nu sanāk laika, paeksperimentēju ar dažādām HID iekārtu programmām no FrameWork jaunākās (2.3 versijas) uz PIC18F4550 maketa, kas būtu kaut kas līdzīgs PICDEM FSUSB demo boardam. 
Nedomāju, ka PIC18F4550 būtu jāliek vēstures muzejā, jo šis varētu būt pēdējais lielākais PIC ar USB, kas pieejams DIP korpusā. Gan jau kādreiz taps kaut kas arī ar PIC24 un PIC32, bet pagaidām man ar PIC18F4550 iespējām pietiek.
Vispār tās funkcijas baigi izmētātas ir pa visiem tiem padsmit piesaistītajiem .c un .h failiem, tā ka nav vienkārši saprast, kas un kā notiek. 
=================
Tā puslīdz jau sāku kaut ko saprast no C, bet nu pilnīgi nespēju iebraukt, kas sarakstīts failā usb_descriptors.c, it īpaši tajā daļā, kā tiek sastādīts Class specific descriptor HID iekārtai. Izskatīju FrameWork Helpu, dažnedažādus pdfus, bet neko vērtīgu šajā jautājumā neatradu.
Jā, ir tā programma HID Descriptor Tool, bet man tur netop skaidrs ko un kā sakrāmēt. Kaut vai tajā pašā HID Keyboard piemērā- nesaprotu, kas nosaka, ka nospiestā taustiņa kods tiek sūtīts tieši 2. baitā, bet pārējie 7 vienmēr paliek tukši (=0). Visādi mēģināju saskaitīt 8 baitus aprakstā, bet nesanāk. Tāpat ar to piemēru nez kādēļ nav iespējams nosūtīt visu klaviatūras taustiņu kodus (arī speciālo), kuri aprakstīti HID Usage Tables 1.12. 
Nez cik reizes jau esmu skatījies piemērus no FrameWork, salīdzinājis tos 3 HID piemērus. Vairākās vietās salīdzinot ar 1 versiju ir nodefinēts mainīgais, bet tas netiek izmantots, katrā vietā rakstot vienu un to pašu mainīgā vērtību manuāli. Piemēram, Endpoint descriptor: ir DESC_Config_WORD( :: , kas laikam to 8 uztaisa par 2baitīgu. Tā vietā, skatoties pēc helpa .c un .h failos, mierīgi var likt HID_INT_IN_EP_SIZE, 0x00 un viss turpina funkcionēt. Tiesa, Descriptor izmērus laikam ar funkciju sizeof() iegūt neizdosies, nāksies ierakstīt manuāli. Tāpat arī bija vietas, kur nodefinēts mainīgais un citur atkal pārdefinēts un piešķirta vērtība (kas izskatītos kā: #define a b; #define b 5, tā vietā lai uzreiz #define a 5).
Tā vien liekas, ka veči rakstot šo kodu, būs kaut ko lietojuši.  ::  Jāatkož, kas tā ir par vielu.  :: 
Gan jau, ka viss tur ir vienkārši, bet pagaidām mulsina visi tie #define, #if defined utt., it īpaši tāpēc, ka vairumā gadījumu tie atrodas katrs savā failā.
=================
Varbūt kāds zina, kā var noņemt reiz uzinstalētās HID iekārtas? Vienkārši eksperimentējot sanāk mainīt PID vai Device ID, lai Windows atkal atpazītu kā jaunu iekārtu.
=================
Īpaši aizrāva USB 2.0 specifikācija uz 6,5*10^2 jebšu 28Ah lpp.  ::

----------


## marizo

Nav īpaši aktuāli, bet nedaudz kaitina- ja pie datora piesprausts PIC ar USB Device HID Custom Demos firmvāri, nevar atvērt Game Controllers no Control Panel. Dažreiz nedara neko, dažreiz met kļūdu.

----------


## cakars

Sveicināti. Pavisam nesen iznāca frameworka 2.4 versija. Bet stāsts cits. Ar 2.3. versiju ar tas pats bija. Lieta tāda, ka hex paraugi, kas nāk līdzi strādā un viss ir ok. Bet tiklīdz pats nokompilēju attiecīgā parauga projektu, iegūtais hex fails atšķiras no parauga hex faila un tas nestrādā. Izmēģināju gan CDC, gan HID, gan MCHPUSB paraugus. Rezultāts tas pats. Lietoju pic18f4550. Piespraužot to kompim, kompis nosūta GET_DESCRIPTOR_FROM_DEVICE komandu picam, bet atbildi tā arī nesaņem. Citas, ar USB nesaistītas lietas kā, piemēram, mirgojoša lampiņa strādā. Tā ka, pats projekts ir pareizi nokompilēts, tik ar USB kaut kas neiet. Te atradu līdzīgu problēmu http://www.microchip.com/forums/tm.aspx ... 20&mpage=1 , bet diemžēl bez risinājuma. Varbūt kāds ir novērojis ko līdzīgu?

----------


## jeecha

Nevar buut probleema ar konfiguraacijas bitiem (piemeeram USB PLL konfiguraacija)? Iisti cits nekas nenaak praataa ja ar parauga .hex viss darbojas... Katraa zinjaa liidziiga probleema nekad nav gadiijusies un uz PIC18F4550 baazes ne viens vien "projektinsh" ir uzkjibinaats.

----------


## cakars

Atradu vainu. usb_config.h failā pēc noklusējuma ir definēts USB_INTERRUPT. Nomainot uz veco USB_POLLING metodi viss strādā. Paliek tik jautājums, kāpēc nestrādā pārtraukumu metode.

----------


## jeecha

Diemzheel nekad neesmu meegjinaajis USB lietot paartraukumu rezhiimaa. Man labaak patiik USB dzenaat galvenajaa ciklaa un uz paartraukumiem nokopt dazhaadus krietni mazaakus uzdevumus - reakcijas uz taimeriem, I2C komunikaacijas utml. Iemesls diezgan vienkaarshs - parasti labaak "smagos" darbus dariit aarpus interruptiem (un USB ir diezgan pasmags izpildaamo instrukciju skaita zinjaa) un interruptos dariit siikumus uz kuriem svariigi reagjeet maksimaali aatri.

----------

