OpenOCD, STM32F0, option bytes?

Fórumok

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 ;).

Szerkesztve: 2020. 06. 06., szo - 16:08

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:

stm32f1x options_write 0 HWWDG

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:

Command: stm32f1x options_write num (SWWDG|HWWDG) (RSTSTNDBY|NORSTSTNDBY) (RSTSTOP|NORSTSTOP) (USEROPT user_data)

 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...  

ugyanazt a firmware-t szeretnem hasznalni 1:1-ben. Erre pont jo ez az USEROPT.

Á, 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.

Dehogynem :) Te ajanlottad, es ott is van, valahol a html-oldal 2/3-anal

:) 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. :)