Sziasztok!
Tudna valaki iranymutatast adni ha talalkozott ilyesmivel hogy OpenOCD-vel ezeket az STM32F0xx-es mikronkontrollerekben levo "option byte" nevu mezoket hogyan lehet atirni? Az iranymutatas (lasd: reference manual, 925. oldal, A.2.5 - A.2.7 szakasz) teljesen jo, azt felprogramozva valoban at lehet irni ezt a 2 byte-ot. De ugyanezeket az utasitasokat az OpenOCD mww, mwh, mdw, parancsaival mar nem sikerul rekonstrualni, igazabol nem sok hianyzott hogy teglat csinaljak a mikrokontrollerbol... hiszen a read protect es write protect bitek ugyanitt talalhatoak... Ott akad el mikor a konkret flash byte-okat (0x1FFFF80x-es cimen) probalom irni, illetve a FLASH->CR-en keresztuli erase is kiakasztja az OpenOCD-t. Ilyenkor JTAG/SWD kommunikacios nyigokra panaszkodik vagy csak ugy csendben nem csinal semmit es/vagy semmi biztatot. Sajnos ezeket az uzeneteket nem mentettem el es a teglasitas miatti felelmemben mar nem is szivesen kiserleteznek...
thx, A.
Hozzászólások
Én az STM32CubeProgrammerrel próbálkoznék. Tudom hogy egy Javas gedvedék, de egy option byte írás ereéig el lehet azt viselni ;).
Koszi, megnezem ezt is. Vagyis igy elsore siman felment latszolag, inditaskor azonban panaszkodik:
Error: Could not find or load main class com.st.app.Main
BOOT0 láb felhúzása & stm32flash progival az UART-on keresztül esetleg? Ezekkel tudod állítani a read protect és write protectet is.
Azt írja a man stm32flash, hogy
-u Specify to disable write-protection from STM32 flash. The STM32 will be reset after this operation.
Tehát téglát nem tudsz csinálni ezek szerint.
Hm... ez is jo gondolat, koszi! Itten most mar celhardverrol van szo, szoval sem UART hozzaferes nincs kozvetlenul, sem a BOOT0 felhuzas nem egyszeru. De magat az eljarast mindenkepp kiprobalom akkor egy evaluation board-on aztan ha ez igy egy jo irany akkor valami alternativ debug interface-t bennehagyunk a kovetkezo design-ban erre. Olvastam errol a bootloader-featurarol ezt-azt, de vegul nem jutottam el oda hogy kiprobaljam...
Egyebkent ugyanazt csinalja ez a -u mint az openocd a `stm32f1x unlock 0` paranccsal?
Az OpenOCD
options_write
parancsa esetleg..? Itt van róla pár szó. Egy ilyen parancs:például bekapcsolja az őrkutyát fixre. De a funkciók mindegyikének van valami neve, ez elvileg a help-ből kiderül.
Koszi, majdnem :) Az irany az jo lehet. Azaz: az options_read megy:
stm32f1x options_read 0
User Option0: 0x08
User Option1: 0xff
De az options_write-ra mar ezt mondja:
stm32f1x options_write bank_id ('SWWDG'|'HWWDG') ('RSTSTNDBY'|'NORSTSTNDBY') ('RSTSTOP'|'NORSTSTOP')
Szoval a doksival ellentetben ez nem tudja az USEROPT verziot, pedig ugyanaz a 0.10.0-es verzio van fent mint ami most elvileg az up-to-date...
Ez az
'SWWDG'...
paramétersor tényleg csak 3 bitnyi állítási lehetőség. Merre van a többi..? :) Egyébként pontosan mit is szeretnél állítani? Nézem a linkelt doksit, erre az "USEROPT"-ra nincs találat. De a leírás egy kissé - hogy is mondjam - nem egyértelmű. :) A 74. oldaltól kezdődően van erről szó, ott a két Option BYTE-ra azt írja, hogy egy 32 bites „szó” alja / teteje ez a két BYTE. De utána a táblázatban már ilyenről szó sincs! :)Mivel programozod a tokot? (Mármint milyen hardverrel.)
Egyébként pontosan mit is szeretnél állítani?
Teljesen sztenderd problema: egy buszon ket joszag is csucsul, ellenben ugyanazt a firmware-t szeretnem hasznalni 1:1-ben. Erre pont jo ez az USEROPT. Igazabol mukodik is, C-ben siman at tudom irni, csak OpenOCD-vel nem megy.
Nézem a linkelt doksit, erre az "USEROPT"-ra nincs találat
Dehogynem :) Te ajanlottad, es ott is van, valahol a html-oldal 2/3-anal:
A 74. oldaltól kezdődően van erről szó, ott a két Option BYTE-ra azt írja, hogy egy 32 bites „szó” alja / teteje ez a két BYTE. De utána a táblázatban már ilyenről szó sincs!
Igen, ez kicsit trukkos. 16 bitnyi option van, viszont mikor beirod a 0x1FFFF8xx-es regiszterbe akkor be kell irnod a byte-okat is meg az 1-es komplemenst is (DATAx es ~DATAx). Ez osszesen mar 32 bitnyi. Ha nem stimmel az ellenorzes (azaz a [31:24] es [23:16] nem egymas komplementere es ugyanez a [15:8]/[7:0] viszonylatban a DATA0-ra), akkor nem irja bele az option flash-ba az adatot. Kis ellenorzes vagy nem is tudom mi. De mondom, teljesen jol megy a leiras alapjan.
Mivel programozod a tokot? (Mármint milyen hardverrel.)
Klasszikus ST-Link V2-vel: Bus 001 Device 049: ID 0483:3748 STMicroelectronics ST-LINK/V2. Nem egy mai peldany, kb 3-4 eve vehettem. Martonmiklos kollega altal fentebb ajanlott programocsomag egyik eleme (STM32_Programmer_CLI) viszont mindenaron azt allitja hogy tul regi es hogy frissitsek rajta firmware-t...
Á, kezd világosodni. :) Neked akkor az "User data option byte" átírása kellene. Ha jól értelmezem, ez egy (illetve kettő) olyan "konfigurációs BYTE", amivel a µC nem kezd semmit, de saját célra használhatod.
:) Erre az USEROPT sztringre a µC doksijában kerestem rá, abban nem volt találat, csak tippelgettem, hogy mit is akart a költő. Ez az
USEROPT user_data
paraméter tényleg hiányzik az OpenOCD 0.10.0-ből. De ha vigasztal, az aktuális forrásban már szerepel! (Hogy aztán mikor lesz belőle rilíz, az már más kérdés...)Közben "megfejtettem", hogy a 74. oldalon az Option byte format az összes ilyen regiszterről szól, nem egy konkrét példányról. Ez a normál + komplemens az tiszta volt, csak a megnevezésekkel vagyok enyhén összekavarodva. A programozó meg – a típusa alapján – nem lehet akadály, itt más hiányosság akad. :)
Hat, ize :) Vegul akkor ez megoldva.
Nem akartam a teljes sf-forrasfat leszedni, plusz meg csak az ./src/flash/nor/stm32f1x.c-t 1:1-ben athuzni mert tul sok az apro (de latszolag vsz csak nevezektani) valtozas a hivatalos 0.10.0 verzioja es ekozott. Ugyhogy kiszedtem a lenyeget, es megpeccseltem azzal a sajat 0.10.0-s verziomat. Hat, messze nem a legelegansabb, de meg mindig ez all a legkozelebb a "ne javitsuk meg ami mukodik"-hez es cserebe tokeletesen jol mukodik ez az USEROPT opcio is az `stm32f1x options_write ...` utan.
Bekportoltad a fícsört? :) Én azt furcsállom amúgy, hogy ezeket az alap opciós biteket csak így, „szövegesen” lehet módosítani. Legalábbis én nem találtam olyan lehetőséget, hogy egy konkrét értéket tudjak beírni. Valami logika biztos van mögötte… :)
De az OpenOCD továbbra is egy jó cucc, elképesztő munka lehet mögötte. Az meg jó ritka, hogy egy projektnél a dokumentáció előrébb tart, mint az aktuális „stable” kiadás maga. :)
Valami logika biztos van mögötte… :)
Hat, elegge tudjak befolyasolni az MCU mukodeset azok a bitek, szoval lehet hogy nem baj ha nem lehet csak ugy 1-2 hexa vagy barmilyen szamkent megadni es ki kell irni a teljes nevet ;)