Probleme mit STM32F030CC

OP #7597954
Lesenswert?

Mit oben genanntem Chip (STM32F030CC ist 48 pol.) habe ich im Moment derzeit zu kämpfen.

Diesen möchte ich in einem eigenentwickelten Board laufen lassen. Dieses Board (Platinen sind von JLCPCB) habe ich bereits mit STM32F103CB, F072CB und F030C8 im Einsatz und funktionieren tadellos damit.

Nun wollte ich, des größeren Flashspeichers wegen, einen F030CC darauf laufen lassen und bekomme das nicht hin.

Auch wenn hier immer nach einem Schaltplan gefragt wird (im Moment kann ich keinen zeichnen).

  • Quarz (8MHz) und Ziehkondensatoren (27p) sind angeschlossen
  • die Pins 35, 36, die auch PF6 und PF7 sein können sind als Vss bzw. Vdd gejumpert.
  • an allen Vdd und Vss Anschlüssen liegt 3,28V bzw. GND an. Ebenso an Vdda und Vssa
  • auf der Platine habe ich nun lange "herumgelötet" und die Minimalkonfiguration hergestellt.
  • NRST über 10k nach +3,3V , Boot0 hart auf GND verdrahtet.

Das Ding will einfach nicht!

Löte ich den F030CC aus und bestücke das mit F030C8 funktioniert alles, nur mit dem CC will das partout nicht klappen.

Flashversuche mittels Cubeprogrammer und ST-Flash zeigen mir an, dass der Flashspeicher wohl beschrieben wird, aber das geflashte Programm kann nicht gestartet werden.

Meldungen aus Cubeprogrammer:

1
15:09:41 : UR connection mode is defined with the HWrst reset mode
2
15:09:41 : ST-LINK SN  : 55FF75064978555520481787
3
15:09:41 : ST-LINK FW  : V2J43S7
4
15:09:41 : Board       : --
5
15:09:41 : Voltage     : 3,23V
6
15:09:41 : SWD freq    : 4000 KHz
7
15:09:41 : Connect mode: Normal
8
15:09:41 : Reset mode  : Software reset
9
15:09:41 : Device ID   : 0x442
10
15:09:41 : Revision ID : Rev 1.0
11
15:09:41 : Debug in Low Power mode is not supported for this device.
12
15:09:41 : UPLOADING OPTION BYTES DATA ...
13
15:09:41 :   Bank          : 0x00
14
15:09:41 :   Address       : 0x1ffff800
15
15:09:41 :   Size          : 16 Bytes
16
15:09:41 : UPLOADING ...
17
15:09:41 :   Size          : 1024 Bytes
18
15:09:41 :   Address       : 0x8000000
19
15:09:41 : Read progress:
20
15:09:41 : Data read successfully
21
15:09:41 : Time elapsed during the read operation is: 00:00:00.011
22
15:09:46 : Memory Programming ...
23
15:09:46 : Opening and parsing file: blinky.bin
24
15:09:46 :   File          : blinky.bin
25
15:09:46 :   Size          : 1,16 KB 
26
15:09:46 :   Address       : 0x08000000 
27
15:09:46 : Erasing memory corresponding to segment 0:
28
15:09:46 : Erasing internal memory sector 0
29
15:09:46 : Download in Progress:
30
15:09:46 : File download complete
31
15:09:46 : Time elapsed during download operation: 00:00:00.451
32
15:09:46 : Verifying ...
33
15:09:46 : Read progress:
34
15:09:46 : Download verified successfully 
35
15:09:47 : Memory [0x08000000 : 0x08040000] - Checksum : 0x03F8BE3F
36
15:09:47 : RUNNING Program ... 
37
15:09:47 :   Address:      : 0x08000000
38
15:09:47 : Warning: The core is in sleep mode
39
15:09:47 : Start operation achieved successfully
40
15:09:47 : Warning: Connection to device 0x442 is lost
41
15:09:47 : Disconnected from device.

Er zeigt mir also an, dass das Flashen wohl geklappt hat, ein Verify auch erfolgreich war, aber starten kann er das wohl nicht, weil "The core is in sleep mode". Obwohl er ja sagt: "Start operation achieved successfully"

ST-FLASH zeigt folgendes:

1
st-flash write blinky.bin 0x8000000
2
st-flash 1.6.0-301-gd11e6f4-dirty
3
2024-02-07T15:00:59 INFO common.c: F09X: 32 KiB SRAM, 256 KiB flash in at least 2 KiB pages.
4
file blinky.bin md5 checksum: 929a9ac22c87589e48aea6b566c9b47, stlink checksum: 0x00015fc6
5
2024-02-07T15:00:59 INFO common.c: Attempting to write 1188 (0x4a4) bytes to stm32 address: 134217728 (0x8000000)
6
Flash page at addr: 0x08000000 erased
7
2024-02-07T15:00:59 INFO common.c: Finished erasing 1 pages of 2048 (0x800) bytes
8
2024-02-07T15:00:59 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
9
2024-02-07T15:00:59 INFO flash_loader.c: Successfully loaded flash loader in sram
10
2024-02-07T15:01:00 ERROR flash_loader.c: flash loader run error
11
2024-02-07T15:01:00 ERROR common.c: stlink_flash_loader_run(0x8000000) failed! == -1
12
stlink_fwrite_flash() == -1

Habe ich irgendwelche wichtigen Unterschiede von F030C8 zu F030CC übersehen? Das Blinkyprogramm wurde einmal übersetzt für einen F030C8 mit einem dem Speicher entsprechenden Linker-Script:

Für F030CC

1
MEMORY
2
{
3
    ram : ORIGIN = 0x20000000, LENGTH = 32K
4
    rom : ORIGIN = 0x08000000, LENGTH = 256K
5
}

Für F030C8

1
MEMORY
2
{
3
    ram : ORIGIN = 0x20000000, LENGTH = 8K
4
    rom : ORIGIN = 0x08000000, LENGTH = 64K
5
}

(und ja, natürlich habe ich auch mittlerweile schon 3 Chips "verheizt", weil es ja hätte sein können - allerdings eher unwahrscheinlich - dass der Chip hinüber ist).

Bezugsquelle der Chips war: LCSC.COM

:-) irgendein sehr schlauer Forumsteilnehmer weiß doch sicher, wo der Hase begraben ist, oder was ich noch probieren kann!

#7598120
Lesenswert?

  1. Reset: da gehört NUR ein 100nF Kondensator nach GND dran, sonst nichts. Daher einfach mal Reset extern auf '0' legen.
  2. Der Clock-Tree sieht bei CC doch ziemlich anders aus als beim C8. Daher muss die PLL-Konfiguration auch anders aussehen. 1:1-Kopie wird daher u. U. nicht funktionieren. Daher mal kurz HSI ausprobieren.
OP #7598135
Lesenswert?

Jürgen L. schrieb:

Hast du auch die geänderte PIN-Belegung beim CC beachtet? Bei dem muss an PIN36 VDD und an PIN35 VSS. Da wo bei den anderen PF6/PF7 dran ist.

das hatte ich hier

Ralph S. schrieb:

  • die Pins 35, 36, die auch PF6 und PF7 sein können sind als Vss bzw. Vdd gejumpert.

schon geschrieben gehabt.

Markus M. schrieb:

Hast du den STM32F030CC schon mal getauscht?

Durch das viele rum probieren kann es gut möglich sein dass der nun "kaputt gelötet" ist.

Ich habe den Chip mittlerweile 3 mal getauscht. Die PCB sieht mittlerweile nicht mehr so gut aus, ich hatte auf ihr verlötet mittlerweile einen F103CB, einen F030C8, einen F072B und einen F303. Haben alle funktioniert. Jetzt ist wieder ein F030CC drauf und funktioniert nicht !

Andreas B. schrieb:

  1. Reset: da gehört NUR ein 100nF Kondensator nach GND dran, sonst nichts. Daher einfach mal Reset extern auf '0' legen.

Reset auf 0 legen ist nicht so sonderlich gut, dann resetet er ja permanent. Allerdings hatte ich das ausprobiert gehabt mit Pull-Up Widerstand, ohne Widerstand und das ganze auf der PCB mit und ohne Kondensator.

Andreas S. schrieb:

Wo befinden sich welche Abblockkondensatoren?

Ich wußte dass diese Frage kommt!!! Immer wenn etwas nicht funktioniert gibt es die Frage nach den Blockkondensatoren. Da das auf einer PCB ist sind die Kondensatoren sehr in der Nähe des Chips (der weiteste ist vllt. 3mm entfernt). Jeder Vdd hat einen 100n und grundsätzlich liegt über der Betriebsspannung noch ein 100µ Kondensator.

Andreas B. schrieb:

  1. Der Clock-Tree sieht bei CC doch ziemlich anders aus als beim C8. Daher muss die PLL-Konfiguration auch anders aussehen. 1:1-Kopie wird daher u. U. nicht funktionieren. Daher mal kurz HSI ausprobieren.

Ich habe auch mit der Software "gespielt". Der Kondensator ist zwar angeschlossen, aber der Programmcode sollte internen Takt mit 48 MHz verwenden (allerdings derselbe Code wie bei einem F30C8).

Um den Fragen nach den Anschlüssen zu entgehen, hänge ich hier jetzt den Schaltplan, wie das momentan verschaltet ist.

Angehängte Dateien:
#7598146
Lesenswert?

Ralph S. schrieb:

Reset auf 0 legen ist nicht so sonderlich gut, dann resetet er ja permanent. Allerdings hatte ich das ausprobiert gehabt mit Pull-Up

Grummel, grummel, natürlich war ja auch gemeint, Reset für einen Moment hart auf '0' zu ziehen ... Man kann auch bewusst alles mißverstehen (wollen).

Ich habe auch mit der Software "gespielt". Der Kondensator ist zwar

Hä??? Kondensator???

angeschlossen, aber der Programmcode sollte internen Takt mit 48 MHz verwenden (allerdings derselbe Code wie bei einem F30C8).

Es gibt keinen "internen 48MHz Takt". Nur 8MHz HSI. 48MHz geht nur via PLL, und genau um deren Konfiguration geht's doch! Der Takt kommt entweder vom HSI, PLL oder HSE, s. Fig. 11 im RM. Nach Reset ist 8MHz vom HSI eingestellt, also reicht es, jedwede Clock-Konfiguration auszukommentieren.

Gast #7598174
Lesenswert?

Hast du dein Programm mit den richtigen Include Dateien neu compiliert?

In der stm32f0xx.h musst du das Modell auswählen oder ein entsprechendes Symbol in den Einstellungen der IDE definieren.

Wenn ich die beiden Dateien stm32f030xc.h und stm32f030x8.h miteinander vergleiche, sehe ich einige Unterschiede. Es geht nicht nur darum, dass der größere mehr Register hat, sondern einige Werte sind anders. Zum Beispiel:

EXTI_IMR_IM_Msk (0x8EFFFFUL << EXTI_IMR_IM_Pos) versus (0x9EFFFFUL << EXTI_IMR_IM_Pos)

RCC_CFGR_ADCPRE_Pos (14U) versus (15U)

RCC_CFGR_ADCPRE_Msk RCC_CFGR_ADCPRE RCC_CFGR_ADCPRE_DIV2 RCC_CFGR_ADCPRE_DIV4 RCC_CFGR_PLLSRC_Pos RCC_AHBENR_TSEN
SYSCFG_CFGR1_DMA _RMP, _Pos und _Msk SYSCFG_CFGR1_ADC_DMA _RMP, _Pos und _Msk SYSCFG_CFGR1_USART1TX_DMA _RMP, _Pos und _Msk SYSCFG_CFGR1_TIM16_DMA _RMP, _Pos und _Msk SYSCFG_CFGR1_TIM17_DMA _RMP, _Pos und _Msk

gibt es alle nur bei dem kleinen xC Modell.

Und natürlich hat das große xC Modell eine ganze Menge zusätzliche Register, die aber wohl kein Problem sind.

OP #7598177
Lesenswert?

Andreas B. schrieb:

Es gibt keinen "internen 48MHz Takt". Nur 8MHz HSI. 48MHz geht nur via PLL, und genau um deren Konfiguration geht's doch! Der Takt kommt entweder vom HSI, PLL oder HSE, s. Fig. 11 im RM. Nach Reset ist 8MHz vom HSI eingestellt, also reicht es, jedwede Clock-Konfiguration auszukommentieren.

:-) wie war das mit dem "falsch Verstehen"? Natürlich habe ich intern nur 8 MHz Takt und mein Coretakt wird natürlich von der PLL generiert. Aber ich habe jetzt einmal keine Clock-Konfiguration gemacht: das gleiche !

Steve van de Grens schrieb:

Wenn ich die beiden Dateien stm32f030xc.h und stm32f030x8.h miteinander vergleiche, sehe ich einige Unterschiede. Es geht nicht nur darum, dass der größere mehr Register hat, sondern einige Werte sind anders. Zum Beispiel:

Ich arbeite mit libopencm3 und nicht mit der HAL, da wird kein Unterschied zwischen C8 und CC gemacht (und einiges vom CC wird dann eben nicht benutzbar sein).

(Firma: Schweigstill IT) Persönliche Seite #7598342
Lesenswert?

Ralph S. schrieb:

Andreas S. schrieb:

Wo befinden sich welche Abblockkondensatoren?

Ich wußte dass diese Frage kommt!!! Immer wenn etwas nicht funktioniert gibt es die Frage nach den Blockkondensatoren. Da das auf einer PCB ist sind die Kondensatoren sehr in der Nähe des Chips (der weiteste ist vllt. 3mm entfernt). Jeder Vdd hat einen 100n und grundsätzlich liegt über der Betriebsspannung noch ein 100µ Kondensator.

Wer hier mit einem Prosa-Schaltplan und ohne Leiterplattenlayout ankommt, darf sich nicht über solch eine Frage wundern. Insbesondere das Flash-Programmieren führt zu ganz erheblichen Spitzen bei der Stromaufnahme.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren