Համակարգիչներ և ժամանակակից գաջեթներ



Իմ նախագծում ես օգտագործում եմ STM32F103C8 միկրոկոնտրոլեր և stm32duino շրջանակ: Այս Arduino կլոնն առաջարկում է հատուկ բեռնիչ, որը թույլ է տալիս վերբեռնել որոնվածը USB-ի միջոցով՝ առանց արտաքին բաղադրիչների, ինչպիսիք են ST-Link-ը կամ USB-UART ադապտեր օգտագործելը:

Այսօր ես պետք է աշխատեի CooCox-ի տակ գտնվող մերկ կարգավորիչով և առանց stm32duino-ի: Բայց այստեղ է խնդիրը. Նույնիսկ այս բեռնախցիկի միջով լցված լամպով պարզ թարթիչը չի աշխատում:

Եկեք պարզենք այն: Միգուցե ինչ-որ մեկին իմ հաշվարկները տարօրինակ թվան։ Բայց ես նոր եմ սկսել ուսումնասիրել STM32 կարգավորիչները և առնվազն կես օր սպանել եմ խնդիր գտնելու համար։ Հանկարծ այս հոդվածը կնվազեցնի ինչ-որ մեկի զարգացման ժամանակը:

Ես ոչինչ չունեմ ST-Link-ի և այլ կարգաբերիչների դեմ: Բայց իմ պատրաստի սարքում դա չի լինի, բայց հաստատ USB կլինի։ Ինչու՞ անմիջապես չսահմանել որոնվածը USB-ի միջոցով թարմացնելու հնարավորությունը: Անձամբ ես այս մեթոդը հարմար եմ գտնում: մանավանդ որ ես դեռ մի լար ունեմ, որով սնուցվում է և USB սերիալը:

Տեսնենք, թե ինչպես է աշխատում bootloader-ը: Սկսելու համար, AVR կարգավորիչների օրինակով: Ինչո՞ւ հիշեցի նրան։ Ես շարժվում էի Arduino-ից և ենթագիտակցորեն սպասում էի նույն պահվածքին: Բայց STM32-ում ամեն ինչ այլ կերպ ստացվեց։ Հետեւաբար, ես ուզում եմ խոսել այս երկու միկրոկոնտրոլերների տարբերության մասին:

Այսպիսով. AVR ATMega միկրոկոնտրոլերներում որոշակի քանակությամբ հիշողություն կարող է վերապահվել բեռնիչի համար, որն ավելի մոտ է ֆլեշի ավարտին: Օգտագործելով ապահովիչների բիթերը, կարող եք վերահսկել, թե որ հասցեից կսկսվի ծրագիրը: Եթե ​​չկա bootloader, ծրագիրը սկսվում է 0x0000 հասցեից: Եթե ​​կա bootloader, այն սկսվում է ինչ-որ այլ հասցեից (ասենք, ATMega32-ում 0x3C00-ով, եթե բեռնիչի չափը դրված է 2k):


Երբ bootloader-ն ավարտում է իր աշխատանքը, այն փոխանցում է կառավարումը հիմնական ծրագրին 0x0000 հասցեից: Նրանք. ծրագիրը միշտ սկսվում է 0x0000 հասցեից: Կազմողն ու կապողն աշխատում են այն ենթադրությամբ, որ կոդը կտեղակայվի հասցեների տարածության սկզբում:

STM32 միկրոկոնտրոլերներում ամեն ինչ այլ է: Բոլոր ծրագրերը սկսվում են 0x0800000 հասցեից: Բեռնախցիկը առանձնահատուկ բան չէ: Սա նույն ծրագիրն է, որը սկսվում է նույն սկզբնական հասցեից: Գործողության ընթացքում բեռնիչը կարող է ստանալ որոնվածը (USB-ի կամ UART-ի միջոցով, կարդալ USB ֆլեշ կրիչից, ստանալ արբանյակից, ստանալ այն ենթատարածքից, ինչ էլ որ լինի...) և գրել այն ավելի բարձր հասցեներում, քան գտնվում է բուն բեռնիչը: Եվ, իհարկե, աշխատանքի ավարտին հսկողությունը փոխանցեք հիմնական ծրագրին։


Այսպիսով, որոնվածը կազմելիս դուք պետք է իմանաք, թե որտեղ է bootloader-ը գրելու որոնվածը և համապատասխանաբար հարմարեցնել հասցեները:

Այս ամենը տեսության հետ է կապված: Անցնենք պրակտիկային։ Ստորև բերված է քայլ առ քայլ հրահանգ, թե ինչպես կարելի է պտտել USB բեռնիչը STM32F1xx սերիայի միկրոկոնտրոլերների վրա, և գուցե նաև որոշ այլ սարքերի վրա:

Այնուամենայնիվ, կան որոշ սահմանափակումներ սխեմաների վրա: Այստեղ, ցավոք, ես ուժեղ չեմ։ YTP-ին անհրաժեշտ է 1.5k ձգվող դիմադրություն PA12 պորտի համար (նույն ինքը՝ USB D+): Սա թույլ է տալիս բեռնախցիկին ճիշտ ժամանակին միանալ և անջատվել USB-ից:

  • Այժմ միկրոկոնտրոլերը պատրաստ է USB բեռնիչի միջոցով լուսաբռնկվելու համար: Բայց դուք դեռ պետք է շտկեք որոնվածը ինքնին: Եվ դուք պետք է անեք 2 բան.
    • Նշեք կապակցողի մեկնարկային հասցեն: CooCox-ում դա արվում է նախագծի կարգավորումներում, Հղման ներդիրում, Հիշողության տարածքներ բաժնում, IROM1 մեկնարկային հասցեում: Bootloader-ը զբաղեցնում է առաջին 8 կիլոբայթը, ուստի որոնվածի մեկնարկային հասցեն կլինի 0x0800000 + 0x2000 = 0x08002000: Չափի դաշտը հավանաբար նույնպես պետք է կրճատվի 8կ-ով:
    • Ծրագրի սկզբում ինչ-որ տեղ, նախքան ծայրամասային սարքերը սկզբնավորելը, զանգահարեք

      NVIC_SetVectorTable (NVIC_VectTab_FLASH, 0x2000);

  • Որոնվածը վերբեռնիչը կարող է վերցվել stm32duino նախագծից: Գործիքների գրացուցակում փնտրեք սկրիպտ, որը կոչվում է maple_upload: Ես օգտագործել եմ միայն Windows-ի տարբերակը՝ maple_upload.bat:
  • Վազիր այսպես.

    «maple_upload.bat» COM20 2 1EAF:0003 «Path\To\Firmware.bin»
    COM20-ի փոխարեն, դուք պետք է փոխարինեք ձեր նավահանգիստը, որտեղ միացված է միկրոկառավարիչը:

    Ֆիլերը շատ նուրբ բան է, հարաբերական ճանապարհներ չի սիրում։ այնպես որ դեպի որոնվածը տանող ուղին պետք է ամբողջությամբ նշված լինի:

    1EAF:0003-ը VID և PID է

    2-ը AltID պարամետրն է, որը ցույց է տալիս, որ որոնվածը պետք է վերբեռնվի 0x08002000 (կարդալ):

  • Եվս մի քանի նրբերանգ. Նախքան որոնվածը վերբեռնելը, դուք պետք է գործարկեք bootloader-ը: Ամենահեշտ ձեւը սեղմելն է վերականգնել կոճակը: Դրանից հետո բեռնիչը կսկսի և մի քանի վայրկյան կսպասի որոնվածին: Եթե ​​այս պահին ոչ ոք չի գործարկում maple_upload-ը, բեռնիչը կառավարումը կփոխանցի հիմնական որոնվածին:

    Սա կարող է անհարմարություն առաջացնել: Եթե ​​միկրոկոնտրոլերն անջատվում է և կախված է, ապա այն այլևս չի լսում պորտին: Հետևաբար, նա չի կարող լսել բանալիների հաջորդականությունը և վերագործարկել bootloader-ում: Հետո միայն վերականգնեք՝ օգնելու համար:

    Այսքանը: Հուսով եմ, որ իմ հոդվածը լույս կսփռի այն մասին, թե ինչպես է bootloader-ը աշխատում STM32-ում և ինչպես կարող եք վերբեռնել որոնվածը USB պորտի միջոցով: Ցավոք սրտի, մուտքի շեմը դեռ բարձր է, բայց հանկարծ իմ հոդվածը կօգնի ինչ-որ մեկին հաղթահարել այն։

    Հաճախակի տրվող հարցերի պատասխանները.

  • 1. Ու՞մ համար է այս ՀՏՀ-ն:

    Մասնագետների մեծամասնությունը, ովքեր մշակում են միկրոկոնտրոլերների վրա հիմնված սարքեր, արդեն ծանոթ են միկրոկարգավորիչների ծրագրերի պաշտպանության թեմային, ուստի կարելի է ենթադրել, որ այս բաժինը նրանց ոչ մի նոր բան չի ասի: Այնուամենայնիվ, կա ինժեներների և էլեկտրոնային սարքերի սովորական սպառողների հսկայական բանակ, ովքեր ծանոթ չեն նման պաշտպանության մանրամասն կազմակերպմանը, բայց ովքեր ցանկանում են կամ հասկանալ գոյություն ունեցող սարքի շահագործման մանրամասները կամ ստեղծել այդպիսի սարք, հարցերի պատասխանների այս հավաքածուն նախատեսված է նրանց համար:

  • 2. Ինչու և ումի՞ց է իրականացվում միկրոկոնտրոլերների պաշտպանությունը:

    Էլեկտրոնային սարքերի շատ արտադրողներ փորձում են պաշտպանել իրենց սարքը այլ արտադրողի կողմից հեշտությամբ պատճենահանվելուց: Միկրոկարգավորիչների արտադրողները հանդիպեցին նրանց կես ճանապարհին` ներմուծելով միկրոկոնտրոլերի հիշողության մեջ պարունակվող ծրագրի (միկրոծրագրի) պատճենահանումը իրենց արտադրանքի ֆունկցիոնալության մեջ: Օգտագործելով այս որոնվածը կարդալու պաշտպանությունը, էլեկտրոնային սարքերի արտադրողները կարող են պաշտպանել իրենց արտադրանքը այլ արտադրողի կողմից պարզապես պատճենահանվելուց:

  • 3. Ի՞նչ է պատճենահանման պաշտպանությունը միկրոկոնտրոլերում, և ինչո՞ւ ես ինքս չեմ կարող կարդալ պաշտպանված միկրոծրագրը (որոնվածը):

    Սովորաբար, պատճենահանման պաշտպանությունը սահմանվում է միկրոկոնտրոլերի ծրագրավորման ժամանակ՝ հատուկ սահմանելով պաշտպանիչ բիտկամ մի քանի բիթ միկրոկառավարիչի կոնֆիգուրացիայի բառում: Ֆիզիկապես այս բիթերը տեղակայված են միկրոկոնտրոլերի չիպի հատուկ հիշողության բջիջներում: Երբեմն օգտագործվում են անվտանգության այլ մեթոդներ, ինչպիսիք են գաղտնաբառի պաշտպանությունը, սակայն սկզբունքը նույնն է: Պաշտպանությունը հեռացնելու համար սովորաբար անհրաժեշտ է փոխել այս բիտի կամ մի քանի բիթերի արժեքը, չնայած հաճախ կարող են օգտագործվել միկրոկառավարիչի ծրագրի հիշողության բովանդակությունը կարդալու այլ մեթոդներ: Սովորական մեթոդները, ինչպիսիք են ծրագրավորողը, չեն կարողանա դա անել, պահանջվում է բարդ թանկարժեք սարքավորում, որը չունի էլեկտրոնային սարքերի սովորական մշակողը։ Ուստի, ունենալով անհրաժեշտ սարքավորումներ, գիտելիքներ և փորձ, մենք մասնագիտացած ենք այս տեսակի ծառայությունների մատուցման գործում:

  • 4. Ի՞նչ է ինձ համար օգնում որոնվածը (որոնվածը) կարդալուց պաշտպանությունը հեռացնելը:

    Ենթադրենք, դուք ունեք մի սարք, որը գնել եք էլեկտրոնային սարքերի արտադրողներից մեկից և ցանկանում եք արտադրել նույն, բայց փոփոխված սարքը: Բայց, իհարկե, դուք չունեք որոնվածի սկզբնական կոդերը կամ պատրաստի որոնվածը, և ձեզ հարկավոր կլինի զրոյից ամբողջությամբ մշակել և կարգաբերել որոնվածը: Սա, համեմատած սարքի (սխեման) էլեկտրոնային բաղադրիչի պատճենման հետ, ստիպված կլինի մեծ գումար և ժամանակ ծախսել։ Օգտվելով մեր մասնագիտական ​​ծառայություններից՝ դուք կխնայեք և՛ գումար, և՛ ժամանակ սարքի մշակման համար: Սարքի կամ նրա էլեկտրական սխեմայի առկայության դեպքում մենք կարող ենք ամբողջությամբ վերականգնել դրա գործողության ալգորիթմը և միկրոծրագրի տեքստը ծրագրավորման C կամ Assembler լեզվով։

  • 5. Օրենսդրական առումով ինչպիսի՞ն է նման գործողությունների օրինականությունը։

    Մենք կարդում ենք բոլոր միկրոծրագրերը (որոնվածը) հաճախորդի խնդրանքով, որպեսզի վերանորոգենք նրա սարքը կամ ծանոթանանք միկրոծրագրի ալգորիթմին: Որոնվածի անօրինական տարածման կամ դրա հետ կամ նրա օգնությամբ այլ գործողությունների համար հետագա ողջ պատասխանատվությունն ամբողջությամբ կրում է հաճախորդը:

    Մեր ընկերությունը գործում է Ռուսաստանի Դաշնության տարածքում, ուստի ստորև բերված է օրենքի մեջբերում: Նման դիրքորոշում է հայտարարում նաև այլ երկրների օրենսդրությունը։

    Ռուսաստանի Դաշնության Քաղաքացիական օրենսգրքի 1280-րդ հոդված. «Համակարգչային ծրագրերի և տվյալների բազաների անվճար վերարտադրում. Համակարգչային ծրագրերի ապակոմպիլյացիա».

    2. Համակարգչային ծրագրի օրինական օրինական տիրապետող անձը իրավունք ունի, առանց իրավատիրոջ համաձայնության և առանց հավելյալ վարձատրության, ուսումնասիրել, ուսումնասիրել կամ փորձարկել այդ ծրագրի գործունեությունը համակարգչային ծրագրի որևէ տարրի հիմքում ընկած գաղափարներն ու սկզբունքները որոշելու համար՝ կատարելով սույն հոդվածի 1-ին կետի 1-ին ենթակետով նախատեսված գործողությունները:

    3. Համակարգչային ծրագրի օրինական օրինական տիրապետող անձը իրավունք ունի, առանց իրավատիրոջ համաձայնության և առանց հավելյալ վարձատրության, վերարտադրել և վերափոխել օբյեկտի կոդը սկզբնական տեքստի (դեկոմպիլացնել համակարգչային ծրագիրը) կամ հանձնարարել այլ անձանց կատարել այդ գործողությունները, եթե դրանք անհրաժեշտ են համակարգչային ծրագրի հետ փոխազդելու ունակության հասնելու համար, որը կարող է փոխազդել այս անձի կողմից մշակված այլ ծրագրի հետ անկախ ծրագրի հետ:

  • 6. Ի՞նչ է լրացուցիչ ընթերցանության պաշտպանությունը և ինչու է այն ավելի լավ, քան սովորական:

    Լրացուցիչ եռաստիճան պաշտպանությունը նախատեսված է պայմաններ ստեղծելու համար միկրոծրագրի (որոնվածը) կարդալու անհնարինության համար՝ օգտագործելով հայտնի մեթոդները: Այն կարող է ներառել պաշտպանության մեկից երեք մակարդակ՝ պատյան բացելուց պաշտպանություն, ծրագրավորողի կողմից ընթերցման համար օգտագործվող ոտքի թաքնված կոտրվածք, ընթերցման համար օգտագործվող ոտքի կառավարման տրամաբանության թաքնված չիպի հեռացում:

    Առաջին մակարդակը թթուների և լուծիչների նկատմամբ դիմացկուն հրակայուն պոլիմեր է, որը թույլ չի տալիս մուտք գործել բյուրեղ:

    Երկրորդ մակարդակը ծրագրավորողին անհնար է դարձնում կարդալ առանց հատուկ թանկարժեք գործիքների:

    Երրորդ մակարդակը կատարում է երկրորդի նման գործառույթ, բայց միևնույն ժամանակ, ներքին շերտերի վրա կառավարման տրամաբանության վերականգնումը չիպի վրա գործնականում անհնար է կամ պահանջում է շատ թանկ սարքավորումներ:

    Հաշվի առնելով, որ դեպքերի ճնշող մեծամասնությունում սովորական գործարանային պաշտպանությունը հեշտությամբ շրջանցվում է, շատ թանկարժեք և բարդ սարքերի լրացուցիչ պաշտպանությունը չափազանց անհրաժեշտ միջոց է մտավոր գործունեության պտուղների երրորդ անձանց ձեռքն ընկնելու հետ կապված նյութական կորուստները կանխելու համար:

  • 7. Ես ուզում եմ տեղադրել լրացուցիչ պաշտպանություն, բայց վախենում եմ, որ դուք հաշվի առնեք իմ հույժ գաղտնի ծրագիրը նախքան պաշտպանությունը տեղադրելը: Կա՞ որևէ միջոց չիպի վրա լրացուցիչ պաշտպանություն դնելու նախքան այն վերջնականապես ծրագրավորելը:

    Այս դեպքում, նախքան մեր լրացուցիչ պաշտպանությունը տեղադրելը, դուք կարող եք միայն բոցավառել առանց հիմնական ծրագրի: Լրացուցիչ պաշտպանություն տեղադրելուց հետո դուք արդեն կարող եք ծրագրավորել հիմնական հիշողությունը: Ավելին, հիմնական ծրագիրը բեռնելու համար բեռնիչը պետք է օգտագործի ցանկացած այլ ինտերֆեյս, բացի հիմնականից, որն օգտագործվում է ստանդարտ ծրագրավորման համար, քանի որ հիմնական ինտերֆեյսը կանջատվի մեր լրացուցիչ պաշտպանությունը տեղադրելուց հետո: Սովորաբար բեռնախցիկը ինքնին հետաքրքրություն չի ներկայացնում պատճենելու համար: Որպես bootloader, դուք կարող եք օգտագործել ձեր սեփականը կամ փոփոխված միկրոկոնտրոլեր արտադրողի օրինակներից:

  • Այս Arduino կլոնն առաջարկում է հատուկ բեռնիչ, որը թույլ է տալիս վերբեռնել որոնվածը USB-ի միջոցով՝ առանց արտաքին բաղադրիչների, ինչպիսիք են ST-Link-ը կամ USB-UART ադապտեր օգտագործելը:

    Այսօր ես պետք է աշխատեի CooCox-ի տակ գտնվող մերկ կարգավորիչով և առանց stm32duino-ի: Բայց այստեղ է խնդիրը. Նույնիսկ այս բեռնախցիկի միջով լցված լամպով պարզ թարթիչը չի աշխատում:

    Եկեք պարզենք այն: Միգուցե ինչ-որ մեկին իմ հաշվարկները տարօրինակ թվան։ Բայց ես նոր եմ սկսել ուսումնասիրել STM32 կարգավորիչները և առնվազն կես օր սպանել եմ խնդիր գտնելու համար։ Հանկարծ այս հոդվածը կնվազեցնի ինչ-որ մեկի զարգացման ժամանակը:

    Ես ոչինչ չունեմ ST-Link-ի և այլ կարգաբերիչների դեմ: Բայց իմ պատրաստի սարքում դա չի լինի, բայց հաստատ USB կլինի։ Ինչու՞ անմիջապես չսահմանել որոնվածը USB-ի միջոցով թարմացնելու հնարավորությունը: Անձամբ ես այս մեթոդը հարմար եմ գտնում: մանավանդ որ ես դեռ մի լար ունեմ, որով սնուցվում է և USB սերիալը:

    Տեսնենք, թե ինչպես է աշխատում bootloader-ը: Սկսելու համար, AVR կարգավորիչների օրինակով: Ինչո՞ւ հիշեցի նրան։ Ես շարժվում էի Arduino-ից և ենթագիտակցորեն սպասում էի նույն պահվածքին: Բայց STM32-ում ամեն ինչ այլ կերպ ստացվեց։ Հետեւաբար, ես ուզում եմ խոսել այս երկու միկրոկոնտրոլերների տարբերության մասին:

    Այսպիսով. AVR ATMega միկրոկոնտրոլերներում որոշակի քանակությամբ հիշողություն կարող է վերապահվել բեռնիչի համար, որն ավելի մոտ է ֆլեշի ավարտին: Օգտագործելով ապահովիչների բիթերը, կարող եք վերահսկել, թե որ հասցեից կսկսվի ծրագիրը: Եթե ​​չկա bootloader, ծրագիրը սկսվում է 0x0000 հասցեից: Եթե ​​կա bootloader, այն սկսվում է ինչ-որ այլ հասցեից (ասենք, ATMega32-ում 0x3C00-ով, եթե բեռնիչի չափը դրված է 2k):

    Երբ bootloader-ն ավարտում է իր աշխատանքը, այն փոխանցում է կառավարումը հիմնական ծրագրին 0x0000 հասցեից: Նրանք. ծրագիրը միշտ սկսվում է 0x0000 հասցեից: Կազմողն ու կապողն աշխատում են այն ենթադրությամբ, որ կոդը կտեղակայվի հասցեների տարածության սկզբում:

    STM32 միկրոկոնտրոլերներում ամեն ինչ այլ է: Բոլոր ծրագրերը սկսվում են 0x0800000 հասցեից: Բեռնախցիկը առանձնահատուկ բան չէ: Սա նույն ծրագիրն է, որը սկսվում է նույն սկզբնական հասցեից: Գործողության ընթացքում բեռնիչը կարող է ստանալ որոնվածը (USB-ի կամ UART-ի միջոցով, կարդալ USB ֆլեշ կրիչից, ստանալ արբանյակից, ստանալ այն ենթատարածքից, ինչ էլ որ լինի...) և գրել այն ավելի բարձր հասցեներում, քան գտնվում է բուն բեռնիչը: Եվ, իհարկե, աշխատանքի ավարտին հսկողությունը փոխանցեք հիմնական ծրագրին։


    Այսպիսով, որոնվածը կազմելիս դուք պետք է իմանաք, թե որտեղ է bootloader-ը գրելու որոնվածը և համապատասխանաբար հարմարեցնել հասցեները:

    Այս ամենը տեսության հետ է կապված: Անցնենք պրակտիկային։ Ստորև բերված է քայլ առ քայլ հրահանգ, թե ինչպես կարելի է պտտել USB բեռնիչը STM32F1xx սերիայի միկրոկոնտրոլերների վրա, և գուցե նաև որոշ այլ սարքերի վրա:

    Այնուամենայնիվ, կան որոշ սահմանափակումներ սխեմաների վրա: Այստեղ, ցավոք, ես ուժեղ չեմ։ YTP-ին անհրաժեշտ է 1.5k ձգվող դիմադրություն PA12 պորտի համար (նույն ինքը՝ USB D+): Սա թույլ է տալիս բեռնախցիկին ճիշտ ժամանակին միանալ և անջատվել USB-ից:

  • Այժմ միկրոկոնտրոլերը պատրաստ է USB բեռնիչի միջոցով լուսաբռնկվելու համար: Բայց դուք դեռ պետք է շտկեք որոնվածը ինքնին: Եվ դուք պետք է անեք 2 բան.
    • Նշեք կապակցողի մեկնարկային հասցեն: CooCox-ում դա արվում է նախագծի կարգավորումներում, Հղման ներդիրում, Հիշողության տարածքներ բաժնում, IROM1 մեկնարկային հասցեում: Bootloader-ը զբաղեցնում է առաջին 8 կիլոբայթը, ուստի որոնվածի մեկնարկային հասցեն կլինի 0x0800000 + 0x2000 = 0x08002000: Չափի դաշտը հավանաբար նույնպես պետք է կրճատվի 8կ-ով:
    • Ծրագրի սկզբում ինչ-որ տեղ, նախքան ծայրամասային սարքերը սկզբնավորելը, զանգահարեք

      NVIC_SetVectorTable (NVIC_VectTab_FLASH, 0x2000);

      ԹԱՐՄԱՑՈՒՄ 05/17/2018. STM32Cube-ի ժամանակակից տարբերակում NVIC_SetVectorTable() ֆունկցիա չկա: Փոխարենը, դուք կարող եք շտկել VECT_TAB_OFFSET սահմանումը system_stm32f1xx.c ֆայլում (կամ նմանատիպ այլ միկրոկառավարիչի համար)

  • Որոնվածը վերբեռնիչը կարող է վերցվել stm32duino նախագծից: Գործիքների գրացուցակում փնտրեք սկրիպտ, որը կոչվում է maple_upload: Ես օգտագործել եմ միայն Windows-ի տարբերակը՝ maple_upload.bat:
  • Վազիր այսպես.

    «maple_upload.bat» COM20 2 1EAF:0003 «Path\To\Firmware.bin»
    COM20-ի փոխարեն, դուք պետք է փոխարինեք ձեր նավահանգիստը, որտեղ միացված է միկրոկառավարիչը:

    Ֆիլերը շատ նուրբ բան է, հարաբերական ճանապարհներ չի սիրում։ այնպես որ դեպի որոնվածը տանող ուղին պետք է ամբողջությամբ նշված լինի:

    1EAF:0003-ը VID և PID է

    2-ը AltID պարամետրն է, որը ցույց է տալիս, որ որոնվածը պետք է վերբեռնվի 0x08002000 (կարդալ):

  • Եվս մի քանի նրբերանգ. Նախքան որոնվածը վերբեռնելը, դուք պետք է գործարկեք bootloader-ը: Ամենահեշտ ձեւը սեղմելն է վերականգնել կոճակը: Դրանից հետո բեռնիչը կսկսի և մի քանի վայրկյան կսպասի որոնվածին: Եթե ​​այս պահին ոչ ոք չի գործարկում maple_upload-ը, բեռնիչը կառավարումը կփոխանցի հիմնական որոնվածին:

    Սա կարող է անհարմարություն առաջացնել: Եթե ​​միկրոկոնտրոլերն անջատվում է և կախված է, ապա այն այլևս չի լսում պորտին: Հետևաբար, նա չի կարող լսել բանալիների հաջորդականությունը և վերագործարկել bootloader-ում: Հետո միայն վերականգնեք՝ օգնելու համար:

    Այսքանը: Հուսով եմ, որ իմ հոդվածը լույս կսփռի այն մասին, թե ինչպես է bootloader-ը աշխատում STM32-ում և ինչպես կարող եք վերբեռնել որոնվածը USB պորտի միջոցով: Ցավոք սրտի, մուտքի շեմը դեռ բարձր է, բայց հանկարծ իմ հոդվածը կօգնի ինչ-որ մեկին հաղթահարել այն։

    Այսօր մենք կպաշտպանենք stm32-ի որոնվածը հիանալի հաքերների կողմից կարդալուց: Որպեսզի ռետինը չքաշեք, ահա մի կոդ.

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

    Ինչպես կարող եք կռահել, կտորն օգտագործում է գրադարանը stm-ից: Շատ հարմար է օգտագործել նման կոդ. կարգավորիչը առաջին իսկ մեկնարկից սահմանում է իր պաշտպանությունը, իսկ առաջին մեկնարկը հեշտ է կազմակերպել որոնվածից հետո: Ահա, ազատություն ապահովիչների բռնակալությունից:

    Այո, ես գիտեմ, «գրադարան ընդդեմ գրանցամատյանների անմիջական մուտքի» մասին հոլիվորի մասին: Իմ դիրքորոշումն այստեղ հետևյալն է. եթե Ձեզ անհրաժեշտ է բարձր արագություն, կամ շատ քիչ հիշողություն է մնացել, բայց Ձեզ անհրաժեշտ է ուղղակի մուտք դեպի ռեգիստրներ: Եթե ​​արագությունը կարևոր չէ, և հիշողությունը շատ է, ապա ավելի լավ է օգտագործել գրադարանը. այս կերպ ծրագիրն ավելի արագ և ընթեռնելի է գրվում:

    Հեռացնել պաշտպանությունը
    Մենք պաշտպանել ենք վերահսկիչին։ Բայց այստեղ խնդիրն է. մենք պետք է շտկենք մեր ծրագիրը, և տեղադրված պաշտպանությամբ, կարգավորիչի հետ ոչինչ հնարավոր չէ անել՝ ոչ կարդալ, ոչ գրել: Ինչպե՞ս հեռացնել պաշտպանությունը: Միանգամից զգուշացնում եմ՝ ST-ի տղաները ամեն ինչ ճիշտ են արել, ու պաշտպանվածության հետ միասին ոչնչացվում է ամբողջ որոնվածը։

    Պաշտպանությունը հեռացնելու համար մեզ անհրաժեշտ է st-link կոմունալ ծրագիրը: Դուք կարող եք ներբեռնել այն:

    Գործարկեք ծրագիրը և ընտրեք այս տարրը կամ պարզապես սեղմեք ctrl-b:

    «Կարդալ պաշտպանության վիճակ, ընտրել անջատված» դաշտում: Եվ սեղմեք Դիմել կոճակը.

    Պաշտպանության բիտի հետ միասին ամբողջ հիշողությունը ջնջվում է.

    Պաշտպանեք ինքներդ ձեզ, մենք ապահով ներդրման կողմնակից ենք:

    Լուսարձակման ամենահեշտ և մատչելի միջոցը STM32- օգտագործելով bootloader, այս հոդվածում մենք կանդրադառնանք, թե ինչպես դա անել՝ օգտագործելով տախտակի օրինակը miniSTM32F103V.

    Նախ, եկեք հասկանանք, թե ինչ է bootloaderկամ ինչ էլ որ այն կոչվի բեռնիչ. Բեռնիչ- դա պարզապես ծրագիր է, որը պահվում է հիշողության որոշակի բաժնում և կարող է վերագրանցել ֆլեշ միկրոկառավարիչը: Այն կարվում է չիպի արտադրության ժամանակ և ոչ մի կերպ չի փոխվում։ Որպեսզի միկրոկոնտրոլերը մտնի հիշողության այս բաժինը, դուք պետք է թողարկեք BOOT0քաշեք մինչև հոսանք և թողարկեք BOOT1դեպի գետնին. Տախտակի վրա այս երկու քորոցները գտնվում են USB միակցիչի մոտ, և ձգումը կատարվում է ցատկերների միջոցով:
    Ստորև բերված է աղյուսակ, որը որոշում է, թե հիշողության որ տարածքից կսկսվի միկրոկառավարիչը զրոյացումից հետո՝ կախված նրանից BOOT0Եվ BOOT1.


    Ենթադրենք, մենք տեղադրել ենք jumpers, հիմա պետք է որոնվածով hex ֆայլը տեղափոխենք bootloader, մենք այն կփոխանցենք մինչև արտ, դրա համար մեզ անհրաժեշտ է փոխարկիչ USB արտ.


    Ես ունեմ նման փոխարկիչ, որը պատրաստված է միկրոսխեմայի հիման վրա FT232RLօգտագործելով բարակ ծայրը զոդման կայանի համար, այն զոդելը շատ պարզ է: Կնքման եղանակը հետևյալն է, նախ պետք է ոտքը բռնել երկու հակադիր անկյուններից, այնուհետև, երբ միկրոշրջանը ամրացվի, մնացած ոտքերը զոդեք զոդման երկաթով կամ վարսահարդարիչով: Եվ վերջին հպումը, ևս մեկ անգամ մենք զոդում ենք ոտքերը, որոնք առաջինը զոդում էին, որպեսզի դրանցից մեխանիկական սթրեսը հանվի:

    Մենք միացնում ենք ադապտերը USB արտհամակարգչին և կախված նրանից, թե որ չիպի վրա է այն պատրաստված CP2120կամ FT232, տեղադրեք համապատասխան դրայվերները։ Դրանից հետո այն պետք է համակարգում սահմանվի որպես COM_PORT:


    Հիմա եկեք միացնենք մեր ադապտերը տախտակին, միացնենք ադապտերի RX ելքը ելքին MCU_TxD, իսկ TX-ի ելքը ելքի հետ MCU_RxD. Վաճառողի կողմից ուղարկված տախտակի տոպոլոգիան մի փոքր տարբերվում է վերևի նկարում պատկերվածից, որոնվածի համար նախատեսված քորոցները ցուցադրվում են առանձին և նշված են կարմիր սլաքներով:


    Հաջորդը, դուք պետք է ներբեռնեք մի ծրագիր, որի հետ մենք կապ կհաստատենք բեռնախցիկի հետ, այն կոչվում է FLASH LOADER DEMONSTRATOR:


    Ծրագիրը տեղադրելուց հետո ընտրեք com-պորտը, որի տակ սահմանվել է մեր ադապտերը USB արտև սեղմեք NEXT կոճակը, արագությունը կորոշվի ավտոմատ կերպով: Եթե ​​կարգավորիչը պաշտպանված է ընթերցմամբ, ապա պաշտպանությունը կարող է հեռացվել՝ սեղմելով «Հեռացնել պաշտպանությունը» կոճակը, մինչդեռ ֆլեշ հիշողությունը կջնջվի և, համապատասխանաբար, դրա մեջ գրված բոլոր տվյալները կկորչեն:


    Եթե ​​կարգավորիչը պաշտպանված չէ, կհայտնվի ստորև ներկայացված պատուհանը, որի մեջ մենք սեղմում ենք NEXT կոճակը:


    Հաջորդ պատուհանում դուք պետք է ընտրեք, թե ինչ ենք ուզում անել՝ կարդալ/գրել միկրոկառավարիչի ֆլեշը, ջնջել այն, արգելել կարդալ/գրել, մեզ հետաքրքրում է գրելը, դրա համար մենք ընտրում ենք այն ֆայլը, որը ցանկանում ենք վերբեռնել և սեղմել NEXT:

    Եթե ​​սխալ եք նկատում, ընտրեք տեքստի մի հատված և սեղմեք Ctrl + Enter
    ԿԻՍՎԵԼ:
    Համակարգիչներ և ժամանակակից գաջեթներ