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).
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.
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.
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
"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).
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:
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.
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.
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.
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.
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...
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.
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.
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.
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)
"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).
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.
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.
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.