STM32G0 v SO8 ohišju

Vse kar je v povezavi z ARM-Cotrex-M procesorji. Sem spada tako HW kot SW.

Moderator: tilz0R

STM32G0 v SO8 ohišju

OdgovorNapisal/-a s54mtb » 21 Jan 2022, 09:29

STM ima novo družino G0 v SO-8 ohišju. Ker je čip (die) isti, kot v večjih ohišjih, so rešili težavo s samo 8 pini tako, da je na posamezen pin zbondiranih več padov, npr:
pin1.jpg


Na pin1 je vezan PC14, PB7, PB8 in PB9. Tako lahko na tem pinu uporabimo katerokoli funkcijo, ki jo ponujajo ti porti (seveda ne vse naenkrat).

Pa še ena zanimivost:
STM32G030 in STM32G031 imata razliko v option bitih. Na G030 se ne da izklopiti funkcije zunanjega reset-a in tako pin (4) ni uporaben, če je ob vklopu gor nizek nivo (se ne starta). Reset se da onemogočiti "run time", tako da je potem lahko npr. izhod in ima tudi nizek nivo. Na G031 se da to v option bitih izklopit in lahko pin 4 uporabiti tudi kot poljuben GPIO.

Koda: Izberi vse
Flash memory address: 0x1FFF 7800
...
Bits 28: 27 NRST_MODE[1:0]
00: Reserved
01: Reset Input only: a low level on the NRST pin generates system reset, internal RESET
not propagated to the NSRT pin
10: GPIO: standard GPIO pad functionality, only internal RESET possible
11: Bidirectional reset: NRST pin configured in reset input/output mode (legacy mode)


Sem na mouserju pomotoma naročil F030 in to ugotovil po kar nekaj urah, ko sem na koncu opazil, da je nalotan G030.... :_banghead
Always going the extra mile.
https://www.buymeacoffee.com/s54mtb
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a dejko1 » 21 Jan 2022, 11:10

Reset pin se torej da uporabit še za kaj drugega. Se da tudi SWD pine? In kako to priklopit, da se še vedno deluje tudi SWD? (Rad bi dosegel nekaj podobnega kot pri AVR, tam moraš dejansko samo RST pin imet rezerviran, ostale pine za programirat lahko recikliraš pod določenimi pogoji.)

Hmm, a obstaja kakšna finta, kako na hitro sprogramirat STM32G030J6M6? Ker je kar nekaj telovadbe s ST-LINK aplikacijo, preden ga pripraviš da se programira? Kot meni izgleda ima iz proizvodnje nek protection v option bytes nastavljen in to lahko potem počistiš samo tako da najprej nastaviš protection, potem pa tisti dodatni bit, da odstraniš protection. Šele potem programiranje / zagon programa deluje normalno. Full erase tega ne pobriše.

PS: Trenutno sem dislociran od ST-Link-a in target boarda, tako da sem tole napisal iz glave. ST-LINK programator je na nucleotu.
dejko1
 
Prispevkov: 688
Pridružen: 12 Feb 2015, 13:47
Kraj: Ljubljana
Zahvalil se je: 120 krat
Prejel zahvalo: 308 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a tilz0R » 21 Jan 2022, 11:44

dejko1, povežeš na SWD in sprogramiraš. Kakšna točno telovadba je pomembna? BI bilo dobro vedeti.

Lahko uporabiš ST-Link CLI in to narediš v enem ukazu.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 2385
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 264 krat
Prejel zahvalo: 763 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a s54mtb » 21 Jan 2022, 11:54

Da se marsikaj. Jaz ne uporabljam prav veliko Cube, ampak najprej vzamem v roke reference manual. Je sicer zamudnejše, ampak vsaj veš, kaje je kaj in kako stvar deluje :)

Kar se tiče konfiguracije pinov...
SWD pine seveda lahko uporabiš za ostale funkcije. Če imaš na pinih neko periferijo, moraš paziti, da ti ne vleče na nek nivo (recimo kak open drain na vhod MCU, pa je stalno na 0, ali pa push-pull, ki ti "pribije" na 1). V tem primeru moraš dati kak jumper, da si začasno odklopiš motilca. Seveda je dodatna težava debugiranje, ker če porabiš SWD pine za I/O, ti debugiranje ne bo delalo.

RST pina ne rabiš, če bi ga porabil za GPIO. Reset generirajo (glej RM, 5.1.2 System reset):
low level on the NRST pin (external reset)
• window watchdog event (WWDG reset)
• independent watchdog event (IWDG reset)
• software reset (SW reset) (see Software reset)
• low-power mode security reset (see Low-power mode security reset)
• option byte loader reset (see Option byte loader reset)
• power-on reset

To, kar dodatno opisuješ malo "diši" na to, da se ob powerup požene vgrajeni bootloader (glej RM 2.5 Boot configuration). Vsi podpirajo UART in I2C bootloader.

Drugače pa ni nobene "telovadbe". Priklopiš napajanje in SWD, pa deluje.
Always going the extra mile.
https://www.buymeacoffee.com/s54mtb
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a dejko1 » 21 Jan 2022, 12:59

Vem da ponavadi deluje, ampak tule mi ni. Prvič sem imel občutek, da je bil problem, ker sem poskusil programirat direktno iz STM32CubeIDE, pa še to z binaryem, ki je bil preveden za G031 (tu razumem, da bi kaj lahko šlo narobe). No, na drugem čipu sem imel enak problem, pa je bila koda sigurno prava... Ko bom spet v pisarni, zlotam še kakšno ploščo, pa bolj natančno podokumentiram kaj se mi zgodi...

Pa še eno vprašanje: Ali se option bytes shrani v elf/bin datoteki? Če v CubeMX v projektu npr. nastavimo RST pin kot GPIO OUT, ali je potem treba še ročno spremenit option byte za delovanje tega pina ali bo po flashanju to že kar delalo? Pri sebi sem imel občutek, da je to še vedno potrebno ločeno ročno nastavit. Ali je še kje kaka druga nastavitev glede tega?

Glede dvojne uporabe SWD pinov še vedno nisem prepričan, kako bi šlo to v praksi... Še najbolj izvedljivi se mi zdita dve opciji:
a) Pustimo RST input pin in porabimo SWD pine, potem pod resetom verjetno lahko programiramo. (RST in BOOT pini so tudi sicer uporabni, če se zaflashas tako, da SWD ne deluje.) Slaba stran tega je, da do programatorja rabimo 5 žilni kabel.
b) Na začetku programa naredimo delay in šele potem začnemo z alternativno uporabo SWD - tako bi dejansko lahko uporabili vse pine. Ali pa nek trigger iz programa, ki sproži vklop SWD. Če bi dejansko imel hkrati vklopljena dva pada na teh pinih bi moral pa verjetno pazit, kakšni signali so, da čipa ne spraviš v kakšen čuden mode.

Kakšne so pa lahko obremenitve SWD pinov, da bodo še delovali? Meni se zdi da je CLK vedno vhod v čip, SWDIO pa je obojesmeren?

Med 4 in 6 uporabniških pinov je nekaj razlike :) No sicer moj projekt zaenkrat rabi samo 3...
dejko1
 
Prispevkov: 688
Pridružen: 12 Feb 2015, 13:47
Kraj: Ljubljana
Zahvalil se je: 120 krat
Prejel zahvalo: 308 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a s54mtb » 21 Jan 2022, 13:22

Pa saj tu ni nek čirule čarule. Stvari so 100% definirane. Samo dokumentacijo je potrebno pogledat/brat. Morda je kak bug v pomožnem softveru, ampak to se tudi sproti popravlja.

Za programiranje flash-a rabiš ali elf ali hex. Hitra pretvorba enega projekta, kjer je del kode spodaj, (elf2hex) razkrije da se vse lepo zapiše v končni objekt:

Koda: Izberi vse
:020000040800F2
:10000000280F0020AD010008B53700089925000829
:1000100000000000000000000000000000000000E0
....
:1074D00004010008F474000810000020180F0000D8
:1074E000200100080000000004000000010000006E
:0474F0000024F40080
:020000041FFFDC
:10780000AAFEFFF5FF000000FF000000FFFF0000E0
:1078100000000000FFFF0000000000000000010069
:04000005080000C12E
:00000001FF


Blok: 0x1FFF, naslovi od 0x7800 dalje.

ASM koda...
Koda: Izberi vse

FLASH_OPTR     EQU     0xF5FFFEAA       ; reset value 0xFFFFFEAA
FLASH_PCROP1ASR EQU     0x0000FFFF       ; reset value 0xFFFFFFFF
FLASH_PCROP1AER EQU     0x00000000       ; reset value 0x00000000
FLASH_PCROP1BSR EQU     0x0000FFFF       ; reset value 0xFFFFFFFF
FLASH_PCROP1BER EQU     0x00000000       ; reset value 0x00000000
FLASH_WRP1AR    EQU     0x000000FF       ; reset value 0x000000FF
FLASH_WRP1BR    EQU     0x000000FF       ; reset value 0x000000FF
FLASH_SECR      EQU     0x00010000       ; reset value 0x00000000

                AREA    |.ARM.__AT_0x1FFF7800|, CODE, READONLY
                DCD     FLASH_OPTR
                DCD     FLASH_WRP1AR
                DCD     FLASH_WRP1BR
                DCD     FLASH_PCROP1ASR
                DCD     FLASH_PCROP1AER
                DCD     FLASH_PCROP1BSR
                DCD     FLASH_PCROP1BER
                DCD     FLASH_SECR
Always going the extra mile.
https://www.buymeacoffee.com/s54mtb
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a dejko1 » 21 Jan 2022, 16:11

Pa si siguren, da ima programator dejansko dostop do teh naslovov v običajnem programming mode-u?

Kakorkoli, sem pogledal in moj projekt ne izvozi nobenih option byte-ov v elf-u, mogoče moram kaj popravit, mogoče je pa tako by-design. Gre za običajen CubeMX projekt.

Aja, pa res mi je všeč live variables opcija za debugganje v STM32CubeIDE. Verjetno je že nekaj časa tam, ampak jaz sem jo pri tem projektu prvič opazil v eclipseu :)

PS: Sem šele zdaj v celoti prebral zadnji del tvojega prvega posta, mislim, da bi to lahko bil moj problem glede programiranja. Sem malo preveč na slepo verjel opcijam, ki ti jih prikažeta ST-Link in CubeMX. Sem najprej imel v designu G031, potem sem pa zaradi dobavljivosti naročil G030. Seveda imam na RST pinu pulldown...
dejko1
 
Prispevkov: 688
Pridružen: 12 Feb 2015, 13:47
Kraj: Ljubljana
Zahvalil se je: 120 krat
Prejel zahvalo: 308 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a tilz0R » 21 Jan 2022, 16:17

Option byte nastavitve niso "by default" del hex/bin/elf datoteke. To moraš sam narediti v tvojem programu, recimo explicitno povedati linkerju, da postavi xyz spremenljivko na neko lokacijo, ki bo šla kasneje v option byte-e.

Če veš HEX kodo option bytov pri G031, zapiši isti hex v G030 na isto lokacijo, in bo vse OK. Tudi reset bo onemogočen kot je to pri G031 :)
To boš moral narediti preko STM32CubeProgrammer CLI interface-a, kjer ročno napišeš HEX vrednost option bytov.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 2385
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 264 krat
Prejel zahvalo: 763 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a s54mtb » 21 Jan 2022, 16:31

tilz0R je napisal/-a:Option byte nastavitve niso "by default" del hex/bin/elf datoteke. To moraš sam narediti v tvojem programu, recimo explicitno povedati linkerju, da postavi xyz spremenljivko na neko lokacijo, ki bo šla kasneje v option byte-e.

Če veš HEX kodo option bytov pri G031, zapiši isti hex v G030 na isto lokacijo, in bo vse OK. Tudi reset bo onemogočen kot je to pri G031 :)
To boš moral narediti preko STM32CubeProgrammer CLI interface-a, kjer ročno napišeš HEX vrednost option bytov.


Option bajti se zapišejo na enak način, kot ostali flash, le naslovi so drugi. Za uspešen vpis sta dva pogoja:
- v source kodi moraš definirat konstante na absolutnih naslovih (glej source asm zgoraj - ko pogledaš hex, mora biti vsebina za option bajt adrese)
- programator mora vedeti, da je treba programitat te naslove (v keil-u npr. moraš dodati flash programming algoritem za naslove option bajtov, kako je v cube-xxx to rešeno pa ne vem).
Always going the extra mile.
https://www.buymeacoffee.com/s54mtb
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a dejko1 » 09 Feb 2022, 14:29

Imam danes spet dostop do tehle čipkov. Problem nastane, če uporabimo STLINK (4.6.0) in na praznem čipu sprogramiramo option bytes kot so privzeto nastavljeni (priklopimo čip na programator ter v STLINK izberemo Target->Option bytes ter pritisnemo Apply). Naredi enako na G030 in G031. Potem ne delujejo več branje (vsi podatki se preberejo kot FFFF0020 FFFFFFFF), mass erase, programiranje, verify. Domnevam da je to zato, ker star ST-LINK še ne pozna popolnoma novih procesorčkov (tudi ni več podprt SW, ampak verjetno ga nekaj ljudi še uporablja). Ni mi pa uspelo točno ugotovit katera opcija to naredi - pomojem gre v readout protection. Reši se tako, da v option bytes nastaviš PCROP_RDP kljukico in Readout protection daš na 1 ter sprogramiraš option byte. Za tem Readout protection prestaviš nazaj na 0, ob tem pride do full erasea, procesor pa se spet lahko uporablja. V novem STM32CubeProgrammer podobnih težav nisem opazil, je pa vsaj meni ST-LINK bolj pregleden za uporabo.
dejko1
 
Prispevkov: 688
Pridružen: 12 Feb 2015, 13:47
Kraj: Ljubljana
Zahvalil se je: 120 krat
Prejel zahvalo: 308 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a tilz0R » 09 Feb 2022, 14:57

MIsliš ST-Link Utility?
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 2385
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 264 krat
Prejel zahvalo: 763 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a dejko1 » 09 Feb 2022, 15:12

Ja, res je, software STM32 ST-LINK Utility 4.6.0 , programator oz. target board je pa STM32G0316-DISCO z odstranjenim targetom in s čipom vtaknjenim v podnožje na SOIC-DIP adapterčku.
dejko1
 
Prispevkov: 688
Pridružen: 12 Feb 2015, 13:47
Kraj: Ljubljana
Zahvalil se je: 120 krat
Prejel zahvalo: 308 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 255

Re: STM32G0 v SO8 ohišju

OdgovorNapisal/-a s54mtb » 09 Feb 2022, 15:25

Jaz uporabljam cube programmer.

Sem pa pozorno pregledal UM od STM32G031 (RM0444) in ugotovil še eno "težavo". Poglavje 5.1.2 System Reset piše takole:
In this mode, the pin can be used as PF2 standard GPIO. The reset function of the pin is not available. Reset is only possible from device internal reset sources and it is not propagated to the pin.
To je OK. To želim, ampak (!):
Upon power reset or wakeup from shutdown mode, the NRST pin is configured as Reset input/output and driven low by the system until it is reconfigured to the expected mode when the option bytes are loaded, in the fourth clock cycle after the end of trsttempo.

Pin 4 (reset vhod) moraš imeti takoj po vklopu vsaj 250µs (tip), 400µs (max) na high, sicer bo ostal v resetu in ne bo štartal z nalaganjem konfiguracije iz option bajtov.

Jaz sem to rešil takole (V1 predstavlja izhod iz operacijskega, na pinu 4 [reset] pa imam skonfiguriran ADC vhod):
trsttempo.jpg

To zdaj dela kot mora.
Always going the extra mile.
https://www.buymeacoffee.com/s54mtb
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255


Vrni se na ARM-Cortex-M

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost