STM32-Chipspezifikationen stimmen nicht mit dem Datenblatt überein?

Ich habe kürzlich ein paar STM32L152R8T6-Chips in einem örtlichen Elektronikgeschäft gekauft. Laut Seite 11 des Datenblattes soll dieser Chip 10K SRAM und 64K FLASH haben. Wenn ich jedoch einen dieser Chips (den ich bereits auf ein Perfboard gelötet habe, zusammen mit einem einfachen Transistor-UART-3,3-V-<> 5-V-Level-Shifter) mit 'stm32flash' abfrage, antwortet er folgendermaßen:

$ stm32flash -b 115200 /dev/ttyACM0 
stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 115200 8E1
Version      : 0x30
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0416 (L1xxx6(8/B))
- RAM        : 16KiB  (2048b reserved by bootloader)
- Flash      : 128KiB (sector size: 16x256)
- Option RAM : 16b
- System RAM : 4KiB

Und das Linker-Skript von STM32L1xx Standard Peripheral Library v1.3.1 für Geräte mit mittlerer Dichte legt die Größe von FLASH auf 128 KB und die Größe von RAM auf 16 KB fest.

Die Fragen sind :

  1. Warum stimmen die Speichergrößen nicht mit den im Datenblatt beschriebenen überein?
  2. Habe ich einen zwielichtigen/gefälschten/gefälschten Chip?
  3. Welche Speichergröße sollte ich im Linker-Skript angeben? (das ist wohl etwas offtopic).

Ich habe auch versucht, es mit STs eigenem Flash Loader Demonstrator zu verwenden (über Windows 7 auf VirtualBox VM, habe es nicht auf der tatsächlichen Hardware, vielleicht werde ich das später testen), aber es sagt immer wieder, dass es ein "Unrecognized Gerät... Bitte setzen Sie Ihr Gerät zurück und versuchen Sie es erneut".

Ich verwende einen Arduino Mega 2560 als USB <> UART-Brücke und verwende RX0 / TX0, um eine Verbindung zu STM32 herzustellen. Natürlich wird der AVR-Chip von Arduino deaktiviert, indem sein /RESET mit GND verbunden wird. Mit einem solchen Setup kann ich problemlos und ohne Fehler ein einfaches Programm zum Blinken einer LED hochladen und verifizieren (mit stm32flash und einer seriellen Schnittstelle), und es wird funktionieren. Ich habe auch mit integrierten DAC und ADCs herumgespielt, sie scheinen auch gut zu funktionieren (wenn auch etwas langsamer als ich erwartet hatte, aber das hängt wahrscheinlich nicht zusammen - ich fange nur mit ST-Mikros an).

Ich bin auch auf diesen Thread gestoßen , der möglicherweise eine Antwort auf diese Frage enthält, aber ich weiß nicht, ob er erklärt, warum das ST-eigene Tool den Chip nicht erkennen kann.

Antworten (1)

Die Geräte-ID Ihres Controllers lautet wie folgt:

   Device ID    : 0x0416 (L1xxx6(8/B))

und ich denke, der Schlüssel ist dieser Teil: L1xxx6(8/B) , diese ID muss für STM32L152R8- und STM32L152RB -Geräte gleich sein .

Wenn wir uns die Tabelle der Flash-/RAM-Größen von ST ansehen, hat der STM32L152RB 128K/16K.

Geben Sie hier die Bildbeschreibung ein

Ich bin mir nicht sicher, vielleicht kann die SPL die RB-Werte nur zuweisen, wenn diese Geräte-ID gelesen wird.

Sie können versuchen, die 64K/10K-Werte manuell einzustellen und prüfen, ob Sie die MCU programmieren können.

Ich glaube nicht, dass Ihre ICs gefälscht sind, überprüfen Sie den Text darauf, um sicherzustellen, dass es eine 8 und kein B ist .

Ich verstehe, ich denke, das ist dann der Fall. Ich habe die Markierung auf meinem Chip noch einmal überprüft und sicher, es hat 8 drin. Ich habe versucht, 10 KB RAM im Linker-Skript festzulegen (habe jedoch vergessen, die Flash-Größe zu ändern), und mein Blinker-Programm scheint einwandfrei zu funktionieren. Ich denke, da die Speichergröße nach oben wächst, wird dieses kleine Programm von dieser Änderung nicht betroffen sein. Aus irgendeinem seltsamen Grund kann ich diesen Chip jedoch mit ST Flash Loader Demonstrator überhaupt nicht erreichen (ich habe es bereits mit Windows auf echter Hardware versucht). Hm...