Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   441 / 1320
(#) vzsolo hozzászólása Márc 23, 2009 /
 
Ejj, azt nem tudtam, hogy bootloader nélkül is lehet USB-t használni.
Az egésznek annyit kell tudnia (még annyit se'...) mint ami Gory cikksorozatában van. Mivel közöm nem volt eddig a PIC-ekhez, hát szépen követtem azt ami ott le van írva. Ezért azt hittem, hogy nekem elengedhetetlen ez a bootloader dolog.
De ezek szerint mégsem, viszont ez esetben felmerül a kérdés: hogyan? Semmi egyéb "fordítóra" nincs szükségem, csak simán megírom C18-ban a kódot, beégetem és jó? Gondolom azért valamit kell includeolnom, ami meghatározza az USB specifikus utasításokat?
(#) potyo válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Gory cikke valóban egy picit azt sugallja, hogy a bootloader elengedhetetlen, de valójában nem az.

A bootloader nélkül is meg kell csinálnod egy csomó dolgot, amitől USB képes lesz a cuccod. Ami te írtál villogo.c-t, az az USB-vel nem csinál semmit. Most jut eszembe, hogy neked ezért akad le a gépről, mert amint kész a firmware átírása és elindul a villogo.c tartalma, az USB kérésekre a PIC többé nem válaszol, ezért választja le az operációs rendszer. Ezután pedig csak a lehúzom-visszadugom segít, hogy ismét felismerje.


Régen néztem már, hogy mi van a Microchip féle USB példaprogramokban, holnap többet tudok mondani, amikot beléjük nézek.


De a villogo.c-ben még mindig PORTD-re írsz. Ezt felejtsd el, és LATD-re írj. PORTD-t csak olvasni szabad.
(#) vzsolo válasza potyo hozzászólására (») Márc 23, 2009 /
 
Tehát ha jól tévedek, akkor a bootloaderes és az anélküli programozás csak az égetés módjában tér el. Leszámítva a későbbi egyszerűbb fw frissítést.
Ezesetben továbbra is követhetem a cikkekben szereplő dolgokat, vagy az ITT található zárójeles megjegyzésből kiindulva, hogy "Bootloader nélkül a linker scriptet és a konfig biteket módosítani kell, csak haladóknak" az következik, hogy mégis csak jobban járnék bootloaderrel, mert így mélyebben bele kell túrni?
Azért mertem csak belevágni ebbe az egészbe, mert Gory cikkében le van vezetve a megvalósítása annak, amire nekem is szükségem van. Tehát ideális esetben csak le kellene másolnom az ottani dolgokat. Ezért nem szeretnék nagyon letérni a jól dokumentált ösvényről.
Lehet, hogy kicsit lehangoló, de nem célom vérprofi PIC-essé válni, ha úgy tetszik a dolgok mostani állása alapján csak ezen projekt erejéig van szükségem rá. Aztán persze, ha úgy adódik szívesen nyúlok majd ismét hozzá, ha a helyzet úgy kívánja, mert roppant sokoldalú eszköz.
Viszont megnézve az MCHPFSUSB példaprogramjait eléggé elbizonytalanító az a temérdek fájl, amit használ. Nem lenne egy utolsó dolog, ha lehetne belőlük szelektálni.
Ezt a gépről leakadós részt nem értem. Nem kell lehúzni, meg visszadugni, csak az eszközkezelőből eltávolítani, mert azt mondja, hogy az eszközt nem lehet elindítani és felkiáltójellel jeleníti meg. De akkor is ezt csinálja, ha csak maga a bootloader van a PIC-en.
A ráégetett program viszont azonnal elindul, amint csatlakoztatom a géphez, és megkapja a tápfeszt.
Mindenesetre először azt kéne eldönteni, hogy bootloaderrel, vagy anélkül. Szigorúan figyelembe véve, hogy abszolút kezdő vagyok, nincsenek komolyabb terveim a későbbiekre, és a megvalósítandó eszköz megegyezik a cikkben levezetett eszközzel.
Ha nincs radikális különbség a kettő között, akkor természetesen hagyom a bootloadert, feltéve, hogy tudok haladni a cikkbeli úton.
LATx, értettem!
(#) trudnai válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Az USB eleg erzekeny dolog. Ha a host kerdeozkodik akkor van 1-2 ms hogy a megfelelo valasszal vissza beszelj kulonben leakadsz. Tehat az egy dolog hogy belinkeled a megfelelo konyvtarakat, attol meg nem garantalt, hogy az eszkoz megfeleloen fog mukodni.

Amugy meg valamit irtal arrol, hogy melyik verziot hasznalod a MC USB stakjebol, es ha jol emlekszem valami regebbi valtozatod van meg?
(#) watt válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Az igaz, hogy a gyártó oldaláról letölthető USB CDC firmware működhet a bootloader nélkül, de ahhoz át kell írni egy csomó mindent a linkerben és ha jól emlékszem a firmware-ben is, mert a gyártó bootloaderhez írta meg(amit máig nem értek miért!).
Ezért jobb, ha első körben a cikk alapján haladsz, mert nem túl egyértelmű, hogy miket kell módosítani bootloader nélküli verzióhoz. Délután, ha lesz időm megnézem, hogy miket módosítottam, mert fejből ez nem megy.
Az biztos, és a többiek is leírták már, hogy a bootloadernek semmi köze az USB-s kommunikációhoz, amit szeretnél megvalósítani(az csak egy égető, ha úgy vesszük).
Az USB-s kommunikációhoz a legegyszerűbb a CDC firmware használata(virtuális soros port USB-re leképezve). Bevallom nekem nem sikerült a cikk alapján elindítani annó, mikor először foglalkoztam vele, de biztosan bennem volt a hiba, és azért az is igaz, hogy én bootloader nélkül akartam megoldani. A cikk ettől függetlenül nagyon sokat segített. De legtöbbet a doksikból és a fórumtársaktól kaptam.

(#) vzsolo hozzászólása Márc 23, 2009 /
 
Megpróbálok sorrendben válaszolni:

De az eszköz megfelelően működik azután, hogy eltávolítottam, és újra felismertettem. Ebből nekem úgy tűnne, hogy a Windows kavarja meg a dolgokat - bár nem értek hozzá, csak feltételezés -, de akkor viszont érdekes, mert két külön számítógépen is ugyan ezt csinálja.
1.3-as stacket használok, ahogy a cikkben, de fent van a 2.4 is, viszont abban olyat durvítottak, hogy azt sem tudom igazából mire lenne szükségem belőle.
Igen - a cikk szerint haladva - a CDC firmware lenne a következő lépés, de előbb valahogy össze kéne hoznom, hogy a bootloader megfelelően működjön - már ha egyáltalán ő tehet arról, hogy nem tudom USB-n törölni a programot a PIC-ről.
Ezek a negatív tapasztalatok, meg kezdő mivoltom még inkább a bootloader használata mellett szólnak, ezért - egyelőre - nem is nagyon mellőzném, és haladnék is szépen tovább, ha tudnám törölni a programot annak rendje, s módja szerint.
Nekem sem kristálytiszta a cikk, ezért is vagyok itt.
(#) watt válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Ha csak az a baj, hogy nem tudod törölni, akkor töröld az LPT-ssel. Majd rájössz később, ha kell, hogy mitől nem megy most. Az ICSP vonalat építsd ki, ha még nincs, mert a nélkül kissé nehézkes a dolog.

Idézet:
„Ebből nekem úgy tűnne, hogy a Windows kavarja meg a dolgokat”

Trudnai írta, hogy miért szakad el a vonal. Szerintem is ezért van, és nem a windows az ok.
(#) szilva válasza watt hozzászólására (») Márc 23, 2009 /
 
Nem lehet, hogy többféle USB-s eszköz is megjelenik ugyanazzal a VID/PID értékpárral, attól áll fejre a win eszközkezelője és kell az eszközt újratelepíteni? Megmondom őszintén, nem igazán tudom követni, hogy mi is történt pontosan a próbálkozások során, de igazából erre tudnék csak gondolni a felkiáltójeles eszköz kapcsán.
(#) watt válasza szilva hozzászólására (») Márc 23, 2009 /
 
De mitől lenne belőle több? Lehet, hogy az egészet le kéne írtani, és újra telepíteni. Nekem a PC oldali résszel nem volt gondom, annál inkább a PIC részével.

Viszont most volt egy másik USB-s kalandom, és csak úgy tudtam az elrontott driver telepítést újra tenni, hogy rádugtam az eszközt és úgy töröltem le az eszközkezelőből. Az újratelepítés nem használt addig, amíg ezt meg nem tettem.
(#) trudnai válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
2.4-est nem tanulmanyoztam meg, de az 1.3-as az pollozassal oldja meg az USB figyeleset. A cikk is felhivja a figyelmet arra, hogy ha blokkolodik barmi miatt is a firmware, akkor leszakad - en szerintem ehhez kapcsolahto a probema.

Amugy halkan jegyzem meg mikor USB-vel elkezdtem foglalkozni es jatszadoztam a MCUSB stack-el, akkor Vista volt feltelepitve a gepemre es bizony voltak gondjaim - PicDem2 USB atalakitassal bizonytalanul mukodott, tehat nem tudom hasonlo-e a problemad. Az erdekesseg az volt, hogy a PicKit2 is ugyanazt a stacket hasznalta, es az remekul mukodott, szoval nyilvan nekem is csak valami idozitesi problemam volt.

(sjanos nem vizsgaltam meg tuzetesebben a problema forrasat mert inkabb irtunk Szilvaval assemblyben egy sajat stacket...)
(#) vzsolo hozzászólása Márc 23, 2009 /
 
Leírom újra, részletesen, mert gyanítom, hogy elbeszélünk egymás mellett.
Volt egyszer a szűz PIC, amire LPT-s égetővel felküldtem a bootloadert. A PIC-et átraktam az USB-s áramkörbe, majd rádugtam a gépre. Ekkor semmi sem történt, mert ugye meg kell nyomni a reset+boot gombokat. Megtettem, ezért a gép szépen kiírta, hogy új hardvert talált. Megadtam neki a szükséges drivert, és hibátlanul be is került az eszközkezelőbe, még screenshotom is van a nagy pillanatról.
Ez után lehúztam és elraktam pihenni, majd másnap ismét rádugtam a gépre. Ekkor szintén nem történt semmi, csak ha megnyomtam a két gombot.
Ez azt eredményezte, hogy a megszokott Windows hang helyett - a Hangok és audioeszközök tulajdonságainál - "Az eszközt nem lehetett csatlakoztatni" nevezetű hangot produkálta, és a tálcán sem jelent meg, hogy új USB-s hardvert talált, viszont Microchip Custom USB Device néven bekerült az eszközkezelőbe, de sárga körben felkiáltójellel, és az Eszközállapotnál "Az eszköz nem indítható el (Kód: 10)" felirattal.
Ezért gondoltam egyet és eltávolítottam (jobb gomb->Eltávolítás, tehát magát az áramkört nem húztam le!), majd a Vezérlőpultban a Hardver hozzáadására kattintottam. Itt magától ismét megtalálta, megjelent a tálcán, hogy új USB-s hardver, aztán egy ablak, hogy "A varázsló a következő eszközt találta: Microchip Custom USB Device".
Ekkor természetesen visszakerült az eszközkezelőbe, ám felkiáltójel nélkül "Ez az eszköz megfelelően működik" eszközállapottal.
Mivel már jónak látta, ezért PDFSUSB-ben a legördülő részben ki tudtam választani a "PICDEM FS USB 0 (Boot)" nevűt, és fel tudtam rá tölteni az ismert LED-villogtató programot. Ez sikerült is, ezután megnyomtam a reset gombot, a Windows a megszokott "Eszköz leválasztása" hangot adta, és el is tűnt az eszközkezelőből.
Most pedig úgy néz ki a dolog, hogyha rádugom az áramkört a gépre és megnyomom a boot gombot (ami az RB4-es lábat húzza földre), a LED elkezd villogni (a resetet nem is kell mellé megnyomni), a Windows pedig a fentieket produkálja.
PDFSUSB-ben pedig Erase Device-ra kattintva a következőket írja ki:
"MESSAGE - Erase Completed.
MESSAGE - Verify Completed.
MESSAGE - Verifying Memory starting from 0x800 to 0x7FFF...
MESSAGE - Erasing Flash starting from 0x800 to 0x7FFF...".
A LED viszont rendületlenül villog tovább.
Ennél részletesebben már nem tudom leírni, elnézést is kérek a hsz hossza miatt!
(#) icserny válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Idézet:
„A LED viszont rendületlenül villog tovább.”

A LED villogtató program hová fordul, milyen címre?
(#) vzsolo válasza icserny hozzászólására (») Márc 23, 2009 /
 
Ez egy jó kérdés. Hogyan tudom kideríteni?
A program memóriában 000000-tól 0007DF-ig vannak dolgok, afölött csak FF-et mutat a PICDEM FS USB.
Óh, akkor lehet, hogy már értem. Ő 000800-tól 007FFF-ig töröl, a LED villogtató meg a 000800 előtti memóriatartományban van, ezért marad benne.
De hogy tudom neki megmondani, hogy lejjebb kezdje a törlést, közvetlenül a bootloader után, vagy hogy 000800-tól rakja be a bootloaderen kívüli programokat?
(#) potyo válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Pl. úgy tudod megnézni, hogy az MPLAB-ban belenézel a View->Program memory menűpontba, és ott megnézed, hogy hol vannak utasítások.
(#) icserny válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Ha emlékszel még, ebben a hozzászólásban próbáltam tisztázni, hogy milyen linker állományt (.lkr) használsz a fordításhoz.

Ha azt használnád, amelyikről szó volt, akkor az én értelmezésem szerint az alábbi sor miatt csak 0x82A-tól kezdődne a programod.

  1. CODEPAGE NAME=page START=0x82A END=0x7FFF
(#) vzsolo válasza potyo hozzászólására (») Márc 23, 2009 /
 
0000-082A-ig NOP
082C-094A-ig pedig a programom
Innen 7FFE-ig szintén NOP
Ezek szerint 00082C-től kellen a memóriában lennie a programomnak?
Mert ha az előzőben írtakat jól értelmezem, akkor mégsem oda pakolja, hanem 000800 alá, ahol viszont nem töröl.
icserny: Nemcsak, hogy azt használom, de a tartalma - így ezen sor is - megegyezik, de azt akkor is írtam.
(#) szilva válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
A bootloadered meddig tart a PIC-ben? Véletlenül nem lóg 0x800 fölé?
(#) vzsolo válasza szilva hozzászólására (») Márc 23, 2009 /
 
"A program memóriában 000000-tól 0007DF-ig vannak dolgok, afölött csak FF-et mutat a PICDEM FS USB."
Azt, hogy ebből meddig tart a bootloader, ill. mettől van a villogóm azt konkrétan most nem tudom, de 0x800 fölött semmi sincs a PIC-ben a PDFSUSB szerint.
(#) benjami válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
az 1.3-al így írd meg a saját programod:
  1. extern void _startup (void);        // See c018i.c in your C18 compiler dir
  2. #pragma code _RESET_INTERRUPT_VECTOR = 0x000800
  3. void _reset (void)
  4. {
  5.     _asm goto _startup _endasm
  6. }
  7. #pragma code
  8.  
  9. #pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
  10. void _high_ISR (void)
  11. {
  12.     ;
  13. }
  14.  
  15. #pragma code _LOW_INTERRUPT_VECTOR = 0x000818
  16. void _low_ISR (void)
  17. {
  18.     ;
  19. }
  20. #pragma code

Ezenkívül fontos hogy a fw\demo könyvtárban levő rm18f4550.lkr -t használd linker script-nek. Ennek a lényege ez:
  1. CODEPAGE   NAME=boot       START=0x0            END=0x7FF          PROTECTED
  2. CODEPAGE   NAME=vectors    START=0x800          END=0x829          PROTECTED
  3. CODEPAGE   NAME=page       START=0x82A          END=0x7FFF

Ekkor nem fogja a saját programod a bootloadert felülírni.
(#) icserny válasza benjami hozzászólására (») Márc 23, 2009 /
 
Benjami-nak: Én csak azt nem értem, hogy a _reset() hogy lesz beírva, ha 0x800-0x829 is PROTECTED?

Vzsolo-nak: Nem lehetne a LED villogtatást olyan biten végezni, amit a bootloader garantáltan nem piszkál? (Olyan lábra gondolok, ami nem szerepel felsorolva a bootloader IO konfigurációjában ). A D0..D3 lábakat a bootloader is matathatja, s a bolondját járathatja velünk.
(#) benjami válasza icserny hozzászólására (») Márc 23, 2009 /
 
Nekem sem kerek hogy akkor most a protect mégsem annyira protect, de megeszi. A két interrupt vector is protect területen van, az alap linker scriptben is, mégis be lehet irni a goto-kat hogy hová menjen onnan.
Itt van különben a demo2 mchip-es példa erre, a hex-et is mellékelem hozzá, amiből látszik hogy nem rakta tele nop-al a memória elejét. Én ezzel próbáltam a minap az USB-s bootloadert.

Demo02.zip
    
(#) benjami válasza trudnai hozzászólására (») Márc 23, 2009 /
 
Igen, tényleg nem lehet az USB-s programot megakasztani, de ebben az esetben ennek nincs jelentősége, hiszen amíg a bootloader fut addig nem akasztja meg a saját program, amikor meg elindítom a sajátot akkor meg persze hogy leszakad, mivel az nem foglalkozunk az usb-vel. Miután megnyomom a boot+reset gombot újra megjelenik, mivel akkor ismét a bootloader fog futni.
(#) dpeti hozzászólása Márc 23, 2009 /
 
ICD3 belső:

Bővebben: Link
(#) vzsolo válasza benjami hozzászólására (») Márc 23, 2009 /
 
És ezt hova írjam, a programom elejére? Meg ez mit csinál amúgy?
Egyébként változatlanul azt az rm18f4550.lkr-t használom, és továbbra is így néz ki.
Mondjuk az érdekes, hogy MPLAB-ban a bootloadert 07DF-ig jelzi a program memóriában, ugyanis a PDFSUSB is eddig a címig mutat FF-től eltérő értékeket, de viszont a villogóval együtt! Tehát nem csak, hogy 0800 alá kerül a villogó, hanem tényleg felül is írja a bootloadert, pedig ha hiszitek, ha nem tényleg azt a linkert használom, és tényleg így néz ki...
(#) potyo válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Csak hogy biztosak legyünk benne, hogy a fordító is azt használja, nevezd már át a linker scriptet, és nézd meg, hogy úgy lefordul-e, és változik-e valamit a kód.
(#) benjami válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Igen, a program elejére, az include és az adatok definiálása után, de a legjobb ha megnézed a pár hozzászólással előbb általam beírt Demo02-t.
(#) vzsolo válasza potyo hozzászólására (») Márc 23, 2009 /
 
Átneveztem, aszondja', hogy "A rendszer nem találja a megadott fájlt.".
Esetleg csináljak screenshotot róla, hogy tényleg jót használok?
benjami: Ok!
(#) icserny válasza benjami hozzászólására (») Márc 23, 2009 /
 
Idézet:
„Nekem sem kerek hogy akkor most a protect mégsem annyira protect, de megeszi.”

Meg bizony! Most próbáltam ki a HID bootloaderrel és pic18f87j50-nel. A HID bootloadernél 0x1000 a határ, s a demo program oda is pakolja a reset és interrupt vektorokat, a bootloader meg szépen beírja.

Ebből számomra az a tanulság hogy a
  1. #pragma code REMAPPED_RESET_VECTOR = 0x1000 (vagy 0x800)

típusú explicit elhelyezésnél a linker nem hatódik meg a PROTECTION-tól!
(#) icserny válasza vzsolo hozzászólására (») Márc 23, 2009 /
 
Idézet:
„Esetleg csináljak screenshotot róla, hogy tényleg jót használok?”

Inkább a .map fájlba kukkants bele egy sikeres fordítás után. Nálam jó helyre kerültek a vektorok és a villogó programod is (amit tegnap linkeltél be).

  1. MPLINK 4.22, Linker
  2. Linker Map File - Created Mon Mar 23 20:26:31 2009
  3.  
  4.                                  Section Info
  5.                   Section       Type    Address   Location Size(Bytes)
  6.                 ---------  ---------  ---------  ---------  ---------
  7.                _entry_scn       code   0x000000    program   0x000006
  8.   _RESET_INTERRUPT_VECTOR       code   0x000800    program   0x000006
  9.    _HIGH_INTERRUPT_VECTOR       code   0x000808    program   0x000002
  10.     _LOW_INTERRUPT_VECTOR       code   0x000818    program   0x000002
  11.                    .cinit    romdata   0x00082a    program   0x000002
  12.                _cinit_scn       code   0x00082c    program   0x00009e
  13.           .code_villogo.o       code   0x0008ca    program   0x000056
  14.              _startup_scn       code   0x000920    program   0x00001c

(#) vzsolo válasza icserny hozzászólására (») Márc 23, 2009 /
 
Benjami kiegészítése után már így néz ki. Előtte is megegyeztek a címek, csak az interruptos részek hiányoztak belőle.
Nemsoká beégetem az egészet újra, és reménykedek, hogy most jó helyre kerülnek a dolgok.
Következő: »»   441 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem