Arvutid ja kaasaegsed vidinad



Oma projektis kasutan STM32F103C8 mikrokontrollerit ja stm32duino raamistikku. See Arduino kloon pakub spetsiaalset alglaadurit, mis võimaldab teil püsivara USB kaudu üles laadida ilma väliseid komponente, nagu ST-Link või USB-UART-adapter, kasutamata.

Täna oli mul vaja töötada CooCoxi palja kontrolleriga ja ilma stm32duinota. Aga siin on probleem. Isegi lihtne vilkur, mille lambipirn on läbi selle alglaaduri valatud, ei tööta.

Selgitame välja. Võib-olla tunduvad minu arvutused mõnele banaalsed. Kuid ma alles hakkan STM32 kontrollereid uurima ja veetsin vähemalt pool päeva probleemi otsimisel. Ehk lühendab see artikkel kellegi arendusaega.

Mul pole midagi ST-Linki ja muude silurite vastu. Aga minu valmis seadmel seda ei ole, küll aga kindlasti USB. Miks mitte lisada kohe USB kaudu püsivara värskendamise võimalust? Isiklikult pean seda meetodit mugavaks. Pealegi on mul igatahes juba ühendatud juhe, mis kannab toite ja USB-jada.

Vaatame, kuidas alglaadur töötab. Alustame AVR-kontrollerite näitega. Miks ma teda mäletasin? Vahetasin Arduinolt ja alateadlikult ootasin sama käitumist. Kuid STM32-s osutus kõik teisiti. Seetõttu tahan rääkida nende kahe mikrokontrolleri erinevusest.

Niisiis. AVR ATMega mikrokontrollerites saab välklambi lõpu lähedal alglaaduri jaoks reserveerida teatud hulga mälu. Kaitsmebittide abil saate juhtida, milliselt aadressilt programm käivitub. Kui alglaadurit pole, käivitub programm aadressilt 0x0000. Kui alglaadur on olemas, alustab see mõnest teisest aadressist (näiteks ATMega32-s 0x3C00-ga, kui alglaaduri suuruseks on valitud 2k).


Kui alglaadur on oma äri teinud, annab see juhtimise üle põhiprogrammile aadressilt 0x0000. Need. programm algab alati aadressilt 0x0000. Kompilaator ja linkija töötavad eeldusel, et kood asub aadressiruumi alguses.

STM32 mikrokontrollerite puhul see nii ei ole. Kõik programmid algavad aadressist 0x0800000. Alglaadur pole nii eriline. See on sama programm, mis algab samast lähteaadressist. Töötamise ajal saab alglaadur vastu võtta püsivara (USB või UART kaudu, lugeda mälupulgalt, võtta vastu satelliidilt, hankida alamruumist, mida iganes...) ja kirjutada seda alglaadurist kõrgematele aadressidele. Ja loomulikult viige oma töö lõpus juhtimine üle põhiprogrammile.


Seega peate püsivara koostamisel teadma, kuhu alglaadur püsivara kirjutab ja aadresse vastavalt kohandama.

See on kõik teooria jaoks. Liigume edasi praktika juurde. Allpool on samm-sammult juhised USB alglaaduri ühendamiseks STM32F1xx seeria mikrokontrolleritele ja võib-olla ka mõnele teisele.

Siiski on vooluringi konstruktsioonil mõned piirangud. Kahjuks pole ma siin tugev. YTP vajab PA12 pordi (teise nimega USB D+) jaoks 1,5k tõmbetakistit. See võimaldab alglaaduril õigel ajal USB-ühendust ühendada ja lahti ühendada.

  • Nüüd on mikrokontroller valmis USB-bootloaderi kaudu välgutamiseks. Kuid peate siiski parandama püsivara ennast. Ja sa pead tegema 2 asja:
    • Esitage linkijale algusaadress. CooCoxis tehakse seda projekti seadetes, vahekaardil Link, jaotises Mälualad, IROM1 algusaadress. Alglaadur hõivab esimesed 8 kilobaiti, mis tähendab, et püsivara algusaadress on 0x0800000 + 0x2000 = 0x08002000. Size välja tuleks ilmselt ka 8k võrra vähendada.
    • Kuskil programmi alguses, enne välisseadme lähtestamist, helistage

      NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);

  • Püsivara üleslaadija saab võtta projektist stm32duino. Otsige tööriistade kataloogist üles skript nimega maple_upload. Kasutasin ainult Windowsi versiooni – maple_upload.bat.
  • Jookse nii:

    "maple_upload.bat" COM20 2 1EAF:0003 "Tee\To\Firmware.bin"
    COM20 asemel peate asendama oma pordi, kuhu mikrokontroller on ühendatud.

    Täiteaine on väga õrn asi, talle ei meeldi suhtelised teed. seega tuleb püsivara tee täielikult määrata.

    1EAF:0003 on VID ja PID

    2 on AltID parameeter, mis näitab, et püsivara tuleks üles laadida aadressile 0x08002000 (loe).

  • Natuke rohkem nüanssi. Enne püsivara üleslaadimist peate käivitama alglaaduri. Lihtsaim viis on vajutada lähtestamisnuppu. Pärast seda käivitub alglaadur ja ootab mõne sekundi püsivara. Kui praegu pole keegi maple_uploadi käivitanud, annab alglaadur juhtimise üle peamisele püsivarale.

    See võib põhjustada ebamugavusi. Kui mikrokontroller töötab valesti ja hangub, ei kuula see enam porti. Seetõttu ei kuule see klahvijada ja taaskäivitub alglaaduris. Siis aitab ainult lähtestamine.

    See on kõik. Loodan, et minu artikkel selgitab, kuidas alglaadur STM32-s töötab ja kuidas saate püsivara USB-pordi kaudu alla laadida. Kahjuks on sisenemisbarjäär endiselt kõrge, kuid võib-olla aitab minu artikkel kellelgi sellest üle saada.

    Vastused korduma kippuvatele küsimustele:

  • 1. Kellele see KKK mõeldud on?

    Enamik spetsialiste, kes arendavad mikrokontrolleritel seadmeid, on mikrokontrolleriprogrammide kaitsmise teemaga juba tuttavad, seega võime eeldada, et see jaotis ei ütle neile midagi uut. Siiski on tohutu armee insenere ja elektroonikaseadmete tavatarbijaid, kes ei tunne sellise kaitse üksikasjalikku korraldust, kuid kes soovivad kas mõista olemasoleva seadme töö üksikasju või luua sarnase seadme ja see neile on mõeldud vastuste kogumik küsimustele.

  • 2. Miks ja kelle käest tehakse mikrokontrolleri kaitset?

    Paljud elektroonikaseadmete tootjad püüavad kaitsta oma seadet võimaluse eest, et mõni teine ​​tootja seda lihtsalt kopeerib. Mikrokontrollerite tootjad jõudsid neile pooleldi vastu, lisades oma toodete funktsionaalsusesse kaitse mikrokontrolleri mällu salvestatud programmi (püsivara) kopeerimise eest. Seda püsivara lugemiskaitset kasutades saavad elektroonikaseadmete tootjad kaitsta oma toodet selle eest, et teine ​​tootja seda hõlpsalt kopeeriks.

  • 3. Mis on kopeerimiskaitse mikrokontrolleris ja miks ma ei saa kaitstud püsivara ise lugeda?

    Tavaliselt paigaldatakse kopeerimiskaitse mikrokontrolleri programmeerimise ajal spetsiaalse installimise teel kaitsebitk või mitu bitti mikrokontrolleri konfiguratsioonisõnas. Füüsiliselt asuvad need bitid mikrokontrolleri kiibi spetsiaalsetes mälurakkudes. Mõnikord kasutatakse muid turvameetodeid, näiteks paroolikaitset, kuid põhimõte jääb samaks. Kaitse eemaldamiseks on tavaliselt vaja muuta selle biti või mitme biti väärtust, kuigi sageli võib kasutada ka muid meetodeid mikrokontrolleri programmimälu sisu lugemiseks. Seda ei saa teha tavapäraste meetoditega, näiteks programmeerijaga, vaja on keerulisi ja kalleid seadmeid, mida tavalisel elektroonikaseadmete arendajal pole. Seetõttu oleme spetsialiseerunud seda tüüpi teenuste osutamisele, omades vajalikke seadmeid, teadmisi ja kogemusi.

  • 4. Mida annab mulle püsivara lugemise eest kaitse eemaldamine?

    Oletame, et teil on seade, mille ostsite ühelt elektroonikaseadmete tootjalt ja soovite toota sama, kuid muudetud seadet. Kuid loomulikult pole teil mikroprogrammi lähtekoodi ega valmis püsivara ning peate mikroprogrammi täielikult nullist välja töötama ja siluma. See, võrreldes seadme elektroonilise komponendi (vooluringi) kopeerimisega, nõuab palju raha ja aega. Kasutades meie professionaalseid teenuseid, säästate nii raha kui ka aega seadme arendamisel. Kui meil on seade või selle elektriahel, saame täielikult taastada selle töö algoritmi ja mikroprogrammi teksti C ehk Assembly programmeerimiskeeles.

  • 5. Milline on selliste toimingute seaduslikkus õiguslikust seisukohast?

    Loeme kliendi soovil läbi kõik mikroprogrammid (püsivara), et parandada tema seadet või tutvuda mikroprogrammi algoritmiga. Kogu edasine vastutus püsivara ebaseadusliku levitamise või muude sellega või selle abiga tehtud toimingute eest langeb täielikult kliendile.

    Meie ettevõte tegutseb Vene Föderatsioonis, seega tsiteerime allpool seadust. Sarnast seisukohta deklareerivad ka teiste riikide õigusaktid.

    Vene Föderatsiooni tsiviilseadustiku artikkel 1280. "Arvutiprogrammide ja andmebaaside tasuta paljundamine. Arvutiprogrammide dekompileerimine."

    2. Arvutiprogrammi koopiat õiguspäraselt omaval isikul on õigus ilma autoriõiguse valdaja nõusolekuta ja lisatasu maksmata uurida, uurida või katsetada sellise programmi toimimist, et teha kindlaks selle ideed ja põhimõtted. arvutiprogrammi mis tahes elemendi aluseks, teostades käesoleva artikli lõike 1 lõikes 1 sätestatud toiminguid.

    3. Arvutiprogrammi koopiat õiguspäraselt omaval isikul on õigus ilma autoriõiguse valdaja nõusolekuta ja lisatasu maksmata objekti kood lähtetekstiks paljundada ja teisendada (arvutiprogrammi dekompileerida) või juhendada teisi isikuid. teostada neid toiminguid, kui need on vajalikud selle isiku poolt iseseisvalt välja töötatud arvutiprogrammi koostalitlusvõime saavutamiseks teiste programmidega, mis võivad dekompileeritud programmiga suhelda...

  • 6. Mis on täiendav lugemiskaitse ja miks on see tavalisest parem?

    Täiendav kolmeastmeline kaitse on loodud tingimuste loomiseks, mis muudavad mikroprogrammi (püsivara) lugemise tuntud meetoditega võimatuks. See võib sisaldada ühest kuni kolme kaitsetaset: kaitse korpuse avanemise eest, programmeerija poolt lugemiseks kasutatava jala varjatud kiibi purunemine, lugemiseks kasutatava jala juhtimisloogika peidetud kiibil eemaldamine.

    Esimene tase on hapete ja lahustite suhtes vastupidav tulekindel polümeer, mis ei võimalda juurdepääsu kristallile.

    Teine tase muudab programmeerija lugemise võimatuks ilma spetsiaalsete kallite tööriistadeta.

    Kolmas tase täidab teisega sarnast funktsiooni, kuid samas on sisemiste kihtide juhtimisloogika taastamine kiibil praktiliselt võimatu või nõuab väga kulukaid seadmeid.

    Arvestades, et tavapärasest tehasekaitsest on valdavas enamuses lihtne mööda minna, on paljude kallite ja keerukate seadmete lisakaitse äärmiselt vajalik meede vältimaks intellektuaalse tegevuse viljade sattumist kolmandate isikute kätte materiaalset kahju.

  • 7. Soovin paigaldada lisakaitset, kuid kardan, et kaalute enne kaitse paigaldamist minu ülisalajast programmi. Kas on võimalik lisada kiibile täiendavat turvalisust enne, kui ma selle täielikult programmeerin?

    Sel juhul saate enne meie lisakaitse installimist alglaadurit ilma põhiprogrammita ainult vilkuda. Pärast lisakaitse installimist saate juba põhimälu programmeerida. Lisaks peab alglaadur põhiprogrammi laadimiseks kasutama mis tahes muud liidest peale standardse programmeerimise jaoks kasutatava liidese, kuna põhiliides keelatakse pärast meie lisakaitse installimist. Tavaliselt ei paku alglaadur ise kopeerimiseks mingit huvi. Alglaadurina saate kasutada enda või mikrokontrolleri tootja näidete põhjal muudetud laadijat.

  • See Arduino kloon pakub spetsiaalset alglaadurit, mis võimaldab teil püsivara USB kaudu üles laadida ilma väliseid komponente, nagu ST-Link või USB-UART-adapter, kasutamata.

    Täna oli mul vaja töötada CooCoxi palja kontrolleriga ja ilma stm32duinota. Aga siin on probleem. Isegi lihtne vilkur, mille lambipirn on läbi selle alglaaduri valatud, ei tööta.

    Selgitame välja. Võib-olla tunduvad minu arvutused mõnele banaalsed. Kuid ma alles hakkan STM32 kontrollereid uurima ja veetsin vähemalt pool päeva probleemi otsimisel. Ehk lühendab see artikkel kellegi arendusaega.

    Mul pole midagi ST-Linki ja muude silurite vastu. Aga minu valmis seadmel seda ei ole, küll aga kindlasti USB. Miks mitte lisada kohe USB kaudu püsivara värskendamise võimalust? Isiklikult pean seda meetodit mugavaks. Pealegi on mul igatahes juba ühendatud juhe, mis kannab toite ja USB-jada.

    Vaatame, kuidas alglaadur töötab. Alustame AVR-kontrollerite näitega. Miks ma teda mäletasin? Vahetasin Arduinolt ja alateadlikult ootasin sama käitumist. Kuid STM32-s osutus kõik teisiti. Seetõttu tahan rääkida nende kahe mikrokontrolleri erinevusest.

    Niisiis. AVR ATMega mikrokontrollerites saab välklambi lõpu lähedal alglaaduri jaoks reserveerida teatud hulga mälu. Kaitsmebittide abil saate juhtida, milliselt aadressilt programm käivitub. Kui alglaadurit pole, käivitub programm aadressilt 0x0000. Kui alglaadur on olemas, alustab see mõnest teisest aadressist (näiteks ATMega32-s 0x3C00-ga, kui alglaaduri suuruseks on valitud 2k).

    Kui alglaadur on oma äri teinud, annab see juhtimise üle põhiprogrammile aadressilt 0x0000. Need. programm algab alati aadressilt 0x0000. Kompilaator ja linkija töötavad eeldusel, et kood asub aadressiruumi alguses.

    STM32 mikrokontrollerite puhul see nii ei ole. Kõik programmid algavad aadressist 0x0800000. Alglaadur pole nii eriline. See on sama programm, mis algab samast lähteaadressist. Töötamise ajal saab alglaadur vastu võtta püsivara (USB või UART kaudu, lugeda mälupulgalt, võtta vastu satelliidilt, hankida alamruumist, mida iganes...) ja kirjutada seda alglaadurist kõrgematele aadressidele. Ja loomulikult viige oma töö lõpus juhtimine üle põhiprogrammile.


    Seega peate püsivara koostamisel teadma, kuhu alglaadur püsivara kirjutab ja aadresse vastavalt kohandama.

    See on kõik teooria jaoks. Liigume edasi praktika juurde. Allpool on samm-sammult juhised USB alglaaduri ühendamiseks STM32F1xx seeria mikrokontrolleritele ja võib-olla ka mõnele teisele.

    Siiski on vooluringi konstruktsioonil mõned piirangud. Kahjuks pole ma siin tugev. YTP vajab PA12 pordi (teise nimega USB D+) jaoks 1,5k tõmbetakistit. See võimaldab alglaaduril õigel ajal USB-ühendust ühendada ja lahti ühendada.

  • Nüüd on mikrokontroller valmis USB-bootloaderi kaudu välgutamiseks. Kuid peate siiski parandama püsivara ennast. Ja sa pead tegema 2 asja:
    • Esitage linkijale algusaadress. CooCoxis tehakse seda projekti seadetes, vahekaardil Link, jaotises Mälualad, IROM1 algusaadress. Alglaadur hõivab esimesed 8 kilobaiti, mis tähendab, et püsivara algusaadress on 0x0800000 + 0x2000 = 0x08002000. Size välja tuleks ilmselt ka 8k võrra vähendada.
    • Kuskil programmi alguses, enne välisseadme lähtestamist, helistage

      NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);

      VÄRSKENDUS 17.05.2018: STM32Cube'i kaasaegsel versioonil puudub funktsioon NVIC_SetVectorTable(). Selle asemel saate vaikeväärtuse VECT_TAB_OFFSET parandada failis system_stm32f1xx.c (või sarnases failis mõne teise mikrokontrolleri jaoks)

  • Püsivara üleslaadija saab võtta projektist stm32duino. Otsige tööriistade kataloogist üles skript nimega maple_upload. Kasutasin ainult Windowsi versiooni – maple_upload.bat.
  • Jookse nii:

    "maple_upload.bat" COM20 2 1EAF:0003 "Tee\To\Firmware.bin"
    COM20 asemel peate asendama oma pordi, kuhu mikrokontroller on ühendatud.

    Täiteaine on väga õrn asi, talle ei meeldi suhtelised teed. seega tuleb püsivara tee täielikult määrata.

    1EAF:0003 on VID ja PID

    2 on AltID parameeter, mis näitab, et püsivara tuleks üles laadida aadressile 0x08002000 (loe).

  • Natuke rohkem nüanssi. Enne püsivara üleslaadimist peate käivitama alglaaduri. Lihtsaim viis on vajutada lähtestamisnuppu. Pärast seda käivitub alglaadur ja ootab mõne sekundi püsivara. Kui praegu pole keegi maple_uploadi käivitanud, annab alglaadur juhtimise üle peamisele püsivarale.

    See võib põhjustada ebamugavusi. Kui mikrokontroller töötab valesti ja hangub, ei kuula see enam porti. Seetõttu ei kuule see klahvijada ja taaskäivitub alglaaduris. Siis aitab ainult lähtestamine.

    See on kõik. Loodan, et minu artikkel selgitab, kuidas alglaadur STM32-s töötab ja kuidas saate püsivara USB-pordi kaudu alla laadida. Kahjuks on sisenemisbarjäär endiselt kõrge, kuid võib-olla aitab minu artikkel kellelgi sellest üle saada.

    Täna kaitseme stm32 püsivara lahedate häkkerite lugemise eest. Et mitte venima hakata, on siin koodijupp:

    #ifdef NDEBUG if (FLASH_GetReadOutProtectionStatus() == RESET) ( FLASH_Unlock(); FLASH_ReadOutProtection(ENABLE); FLASH_Lock(); ) #endif

    Nagu võite arvata, kasutab teos stm-i raamatukogu. Seda koodijuppi on väga mugav kasutada – kontroller paigaldab esmasel käivitamisel oma kaitse ja esimest käivitamist on pärast püsivara vilkumist lihtne korraldada. Siin see on, vabadus süütenööri türanniast!

    Jah, ma tean pühasõja kohta "raamatukogu vs otsejuurdepääs registritele". Minu seisukoht siin on selline - kui vajate suurt kiirust või on väga vähe mälu jäänud, kuid vajate otsest juurdepääsu registritele. Kui kiirus pole oluline ja mälu on palju, on parem kasutada raamatukogu – nii kirjutatakse programm kiiremini ja on loetavam.

    Eemaldage kaitse
    Kaitsesime kontrollerit. Kuid siin on probleem – peame oma programmi parandama, kuid kui kaitse on installitud, ei saa me kontrolleriga midagi teha – ei lugeda ega kirjutada. Kuidas kaitset eemaldada? Hoiatan teid kohe - ST-i poisid tegid kõik õigesti ja koos kaitsega hävitati kogu püsivara.

    Kaitse eemaldamiseks vajame st-linki utiliiti. Saate selle alla laadida.

    Käivitame programmi ja valime selle üksuse või vajutage lihtsalt ctrl-b:

    Väljal „Lugemiskaitse olek” valige keelatud. Ja klõpsake nuppu Rakenda:

    Koos kaitsebitiga kustutatakse kogu mälu:

    Kaitske ennast, me oleme turvalise manustamise eest.

    Lihtsaim ja soodsaim viis püsivara välgutamiseks STM32- kasutades alglaadur, selles artiklis vaatleme tahvli näitel, kuidas seda teha miniSTM32F103V.

    Esiteks selgitame välja, mis see on alglaadur või kuidas nad seda nimetavad laadur. Laadija on lihtsalt programm, mis on salvestatud teatud mälusektsiooni ja võib mikrokontrolleri välklambi üle kirjutada. See õmmeldakse sisse kiibi valmistamise käigus ja seda ei saa kuidagi muuta. Selleks, et mikrokontroller sellesse mälusektsiooni siseneks, vajate väljundit BOOT0 tõmmake üles toiteallika ja väljundi juurde BOOT1 maha. Plaadil asuvad need kaks tihvti USB-pistiku lähedal ja pingutamine toimub džemprite abil.
    Allpool on tabel, mis määrab sõltuvalt sellest, millisest mälupiirkonnast mikrokontroller pärast lähtestamist käivitub BOOT0 Ja BOOT1.


    Oletame, et oleme installinud hüppajad, nüüd peame hex-faili koos püsivaraga alglaadurisse üle kandma, edastame selle kaudu uart, selleks vajame muundurit usb-uart.


    Mul on selline mikroskeemil põhinev muundur FT232RL Kasutades jootejaama jaoks peenikest otsikut, on selle jootmine väga lihtne. Jootemeetod on järgmine: esimene samm on haarata jalg kahest vastasnurgast, seejärel kui mikroskeem on fikseeritud, jootke ülejäänud jalad jootekolvi või fööniga. Ja viimane lihv on veel kord jootma esimesena joodetud jalad, et leevendada nende mehaanilist pinget.

    Adapteri ühendamine usb-uart arvutisse ja olenevalt sellest, millisele kiibile see tehtud on CP2120 või FT232, installige sobivad draiverid. Pärast seda tuleks see süsteemis tuvastada kui COM_PORT.


    Nüüd ühendame oma adapteri tahvliga, ühendame adapteri RX-i tihvtiga MCU_TхD ja TX-väljund koos väljundiga MCU_RхD. Müüja saadetud tahvli topoloogia erineb veidi ülemisel pildil olevast, püsivara tihvtid kuvatakse eraldi ja tähistatakse punaste nooltega.


    Järgmiseks peame alla laadima programmi, millega me laadijaga suhtleme, seda nimetatakse FLASH LOADER DEMONSTRATORiks.


    Pärast programmi installimist valige com-port, mille all meie adapter tuvastati usb-uart ja vajutage nuppu NEXT, kiirus määratakse automaatselt. Kui kontroller on lugemise eest kaitstud, saab kaitse eemaldada, vajutades nuppu "Eemalda kaitse", sel juhul kustutatakse välkmälu ja vastavalt sellele kaovad kõik sinna salvestatud andmed.


    Kui kontroller ei ole kaitstud, kuvatakse alltoodud aken, milles klõpsake nuppu NEXT.


    Järgmises aknas peame valima, mida tahame teha: lugeda/kirjutada mikrokontrolleri välku, kustutada see, keelata lugemine/kirjutamine, oleme huvitatud kirjutamisest, selleks valime faili, mida tahame laadida ja vajutame NEXT.

    Kui märkate viga, valige tekstiosa ja vajutage Ctrl+Enter
    JAGA:
    Arvutid ja kaasaegsed vidinad