Guida alla migrazione della densità flash da STM32F103RBT6 a RET6.
Lo STM32F103RCT6 e i suoi fratelli RBT6 e RET6 condividono lo stesso footprint 64-pin LQFP e lo stesso core Cortex-M3, proprio per questo un aggiornamento della flash in questa famiglia viene considerato un drop-in quando non lo è. La compatibilità dei pin è meccanica. La dimensione della pagina di cancellazione flash, SRAM e le ipotesi del bootloader non sono garantite dal footprint, e il manuale di programmazione di ST documenta direttamente la differenza.
1. Che cosa cambia davvero tra RBT6, RCT6 e RET6?
Tutti e tre i componenti sono microcontrollori STM32F103 della linea di prestazioni, basati sullo stesso core Arm Cortex-M3 72 MHz, sullo stesso insieme di periferiche e sullo stesso package LQFP64, con corpo 10 × 10 × 1.4 mm. La lettera dopo "F103" e il numero codificano la dimensione della flash: RBT6 offre 128 Kbyte di flash e 20 Kbyte di SRAM, RCT6 offre 256 Kbyte di flash e 48 Kbyte di SRAM, mentre RET6 offre 512 Kbyte di flash e fino a 64 Kbyte di SRAM. Nulla nel silicio modifica il numero di pin, la loro assegnazione o le periferiche principali; cambia soltanto la quantità di memoria sul die.
Questa combinazione, footprint identico e più memoria, rende il caso un vero "aggiornamento di capacità" anziché una sostituzione tra produttori. Non serve una nuova revisione della scheda, non cambia il land pattern e non cambia l'header di debug SWD o JTAG. Il lavoro rimanente riguarda interamente il firmware: verificare che né la build, né lo script del linker né il driver flash presuppongano la geometria del componente più piccolo.
Il datasheet ad alta densità di ST (DS5792, relativo ai componenti da 256 a 512 Kbyte) e il datasheet a media densità fanno entrambi riferimento alla stessa descrizione della famiglia della linea di prestazioni, mentre il datasheet commerciale STM32F103x8/B dichiara che la famiglia è progettata per la piena compatibilità pin-to-pin, software e delle funzionalità. Questa dichiarazione riguarda il rapporto tra i componenti della famiglia, non sostituisce la verifica della mappa di memoria specifica del componente scelto.
2. Il pinout è davvero identico?
Dal punto di vista meccanico, sì, per questo specifico trio. RBT6, RCT6 e RET6 indicano tutti un'opzione di package LQFP 64, 10 × 10 × 1.4 mm nelle pagine informative per gli ordini di ST, con 51 pin I/O per uso generale in questa configurazione. Gli stessi codici componente sono disponibili anche in altri package (RBT6 aggiunge, per esempio, un'opzione TFBGA64), quindi il suffisso del package e il codice d'ordine completo devono essere verificati singolarmente. La dichiarazione di "stesso numero di pin" non equivale alla verifica della corrispondenza del footprint per lo specifico componente ordinabile in uso.
| Componente | Flash | SRAM | Classe di densità | Disponibile LQFP64 |
|---|---|---|---|---|
| STM32F103RBT6 | 128 KB | 20 KB | Medium-density | Yes |
| STM32F103RCT6 | 256 KB | 48 KB | High-density | Yes |
| STM32F103RET6 | 512 KB | 64 KB | High-density | Yes |
Prima di decidere se procedere o meno con una nuova revisione della scheda, consultare la tabella aggiornata delle informazioni sul dispositivo nel datasheet relativo all'esatto codice ordinabile acquistato. Il catalogo di ST, come quello della maggior parte dei produttori, aggiunge o ritira periodicamente specifiche opzioni di package per ciascun codice componente, e il suffisso del codice d'ordine (qui "T6", oltre a eventuali lettere finali per package o temperatura) è quello usato dal distributore per l'approvvigionamento.
3. Perché ST definisce queste diverse classi di "densità"?
Il manuale di riferimento STM32F10xxx di ST (RM0008) e il manuale di programmazione flash (PM0075) dividono la famiglia STM32F101/F102/F103 nelle classi a bassa densità (da 16 a 32 Kbyte di flash), a media densità (da 64 a 128 Kbyte), ad alta densità (da 256 a 512 Kbyte) e XL-density. RBT6 rientra nella media densità; RCT6 e RET6 rientrano nell'alta densità. Non è un'etichetta di marketing: la classe di densità determina l'organizzazione dell'array flash interno, dettaglio che influisce sul firmware.
In particolare, PM0075 specifica che il blocco di memoria flash principale è organizzato in 32 pagine da 1 Kbyte per i dispositivi a bassa densità, 128 pagine da 1 Kbyte per quelli a media densità e 256 pagine da 2 Kbyte per quelli ad alta densità. La granularità di cancellazione, cioè il blocco più piccolo che il controller flash può cancellare con una singola operazione, è legata alla classe di densità, non all'appartenenza alla famiglia di componenti con pin compatibili.
4. Che cos'è una pagina di cancellazione flash e perché è importante la sua dimensione?
La flash integrata non può essere riscritta un byte alla volta come può fare RAM. Per riportare i bit già programmati da 0 a 1, il controller flash deve cancellare un'intera pagina, e solo dopo è possibile programmarvi nuovi dati. La pagina è quindi l'unità atomica per qualsiasi aggiornamento sul campo, sia che si tratti del bootloader che scrive una nuova immagine applicativa, di un blocco di impostazioni riscritto o di un aggiornamento over-the-air che prepara una nuova versione del firmware.
Un progetto basato su RBT6 che cancella la flash in unità da 1 Kbyte e memorizza due blocchi dati indipendenti a distanza 1 Kbyte l'uno dall'altro perché quella era una barriera di cancellazione sicura per quel componente, si basa su una caratteristica dell'array flash a media densità. Trasferire lo stesso firmware su RCT6 senza ricontrollare questo aspetto significa che il comando di cancellazione ora elimina 2 Kbyte alla volta: il secondo blocco dati, che il firmware considera ancora isolato, si trova all'interno della pagina appena cancellata insieme al primo.
Questa modalità di guasto inizialmente non sembra un problema della flash. Si manifesta con impostazioni che tornano silenziosamente ai valori precedenti, una partizione applicativa che si corrompe dopo un aggiornamento o un'immagine OTA che si avvia una volta e poi non riesce dopo il ciclo di scrittura successivo. Poiché il sintomo compare durante l'uso anziché durante la programmazione, è facile perdere tempo controllando temporizzazione, alimentazione o interrupt prima di verificare la vera causa: un'ipotesi errata sulla dimensione della pagina.
5. Dove si interrompe un bootloader con una dimensione di pagina codificata?
Tre punti di una tipica build firmware codificano un'ipotesi sulla dimensione della pagina di cancellazione, e tutti e tre devono essere verificati passando da una classe di densità all'altra:
- Le definizioni delle regioni flash nello script del linker. Una suddivisione personalizzata tra bootloader e applicazione spesso allinea le regioni al limite della pagina di cancellazione utilizzato durante lo sviluppo. Se tale limite è stato scelto come 1 Kbyte su RBT6, le regioni restano indirizzi validi su RCT6, ma non sono più allineate al reale limite di cancellazione 2 Kbyte di quel componente; durante un aggiornamento, ciò può lasciare pagine parziali a cavallo tra le regioni dell'applicazione e del bootloader.
- La routine di cancellazione del driver flash. Sia ST's HAL sia la libreria periferica standard espongono funzioni di cancellazione flash che accettano un indirizzo di pagina, ma la costante della dimensione di pagina usata per calcolare quante chiamate di cancellazione siano necessarie, o dove inizi la pagina successiva, è talvolta definita localmente nel codice dell'applicazione invece di essere letta dall'organizzazione della memoria del componente.
- Qualsiasi libreria OTA o per la memorizzazione delle impostazioni importata dall'esterno di HAL. Le librerie di memorizzazione su flash di terze parti utilizzano spesso per impostazione predefinita una dimensione di pagina configurabile, che deve essere impostata per ciascun target; lasciare inavvertitamente un valore predefinito 1 Kbyte mentre si utilizza silicio RCT6 riproduce lo stesso rischio di corruzione senza alcun sintomo a livello di linker.
La correzione pratica è la stessa in tutti e tre i casi: individuare ogni riferimento alla dimensione della pagina di cancellazione nella build, verificare che sia letto dall'organizzazione effettiva del componente target (o che vi corrisponda esplicitamente) nel datasheet corrente e nel manuale PM0075, quindi ripetere un ciclo completo di cancellazione/programmazione/verifica su un intervallo rappresentativo di indirizzi, non solo sugli indirizzi usati durante la messa in servizio iniziale.
6. Cos'altro cambia oltre alla flash?
SRAM aumenta nella stessa direzione della flash, ma con una variazione relativa maggiore: 20 KB su RBT6 rispetto a 48 KB su RCT6 è più del doppio, mentre 64 KB su RET6 è più del triplo. Un progetto che era al limite per RAM sul componente più piccolo guadagna margine significativo per buffer più grandi, un heap maggiore o ulteriori attività RTOS. Un progetto che aveva allocato con precisione RAM per RBT6's 20 KB dovrebbe verificare nuovamente che tutte le allocazioni statiche di dimensione fissa, le dimensioni dello stack e i simboli del linker siano ancora sensati; passare a un componente con più RAM disponibile non obbliga a utilizzarlo tutto, ma qualsiasi codice che calcolava gli indirizzi in relazione a una dimensione fissa RAM più piccola dovrebbe essere rivisto nello stesso modo delle ipotesi sulla flash.
Il core, l'albero dei clock, la struttura GPIO e le periferiche di comunicazione (I2C, SPI, I2S, USART, USB, CAN) non cambiano tra questi tre componenti. Le specifiche elettriche, l'intervallo della tensione di alimentazione e i tempi di funzionamento di tali periferiche sono stabiliti dal progetto della famiglia performance-line, non dalla densità della memoria; pertanto, una qualificazione a livello di periferica non deve essere ripetuta solo a causa dell'aumento della flash.
7. Cosa deve essere verificato prima di aggiornare il componente?
Un aumento di densità in questa famiglia è sicuro dopo aver verificato cinque elementi rispetto al datasheet corrente e al manuale di programmazione flash del componente target specifico, senza dedurlo dalla sola compatibilità dei pin.
- Codice del package ordinabile. Confermare che il codice d'ordine esatto LQFP64 per la densità target sia aggiornato e disponibile presso la fonte prevista; le opzioni di package possono variare nell'intero intervallo di densità per uno stesso produttore.
- Dimensione della pagina di cancellazione flash. Confermare se il bootloader, la libreria OTA o la memoria delle impostazioni presuppongono una dimensione di pagina fissa, quindi aggiornare tale costante affinché corrisponda alla classe di densità del componente target (1 Kbyte per la media densità, 2 Kbyte per l'alta densità).
- Allineamento delle regioni nello script del linker. Verificare nuovamente che le regioni dell'applicazione e del bootloader siano allineate al nuovo limite della pagina di cancellazione, non soltanto a un indirizzo flash valido.
- Indirizzamento relativo a RAM. Esaminare qualsiasi codice che calcoli le posizioni dei buffer o i limiti dello stack in relazione a una dimensione SRAM specifica invece di utilizzare i simboli del linker della toolchain.
- Test completo di cancellazione/programmazione/verifica. Eseguire il percorso completo di aggiornamento, inclusa una scrittura interrotta simulata se l'applicazione supporta aggiornamenti a prova di errore, prima di qualificare il nuovo componente per la produzione.
Documentare a quale componente specifico (RBT6, RCT6 o RET6) è destinata una determinata build firmware ed evitare di distribuire un unico binario tra classi di densità diverse senza un controllo esplicito della dimensione della pagina all'interno del driver flash stesso.
8. Esistono alternative compatibili a livello di pin al di fuori della famiglia ST?
Esistono componenti STM32F103 compatibili di seconda fonte presso altri produttori e generalmente venduti con la stessa disposizione dei pin LQFP64 per densità equivalenti, seguendo la stessa logica della precedente guida di riferimento incrociato STM32F103C8T6 su questo sito. La cautela è identica anche in questo caso: la compatibilità dei pin è un'affermazione meccanica relativa al package e, da sola, non dimostra che il controller flash, la dimensione della pagina di cancellazione o i tempi di programmazione flash siano identici. Prima di presumere che un componente di seconda fonte si comporti come l'originale ST a livello firmware, verificare nel manuale di programmazione del produttore specifico la dimensione della pagina di cancellazione e la configurazione del ciclo di accesso alla flash.
9. Cosa deve contenere la richiesta di approvvigionamento?
Quando si approvvigiona un componente con densità maggiore, una richiesta che indichi il componente target esatto riceve una risposta utilizzabile più rapidamente di una che specifichi soltanto la dimensione della flash. Un fornitore può confermare la disponibilità in base al codice d'ordine completo, ma un semplice "256 KB STM32F103" non specifica il package, la classe di temperatura o il suffisso esatto.
I campi utili sono il codice completo del componente ordinabile (inclusi package e suffisso di temperatura), la quantità per build con il volume annuo, l'indicazione che il progetto stia passando da un componente più piccolo specifico (riportare il codice esatto del componente di origine) e se la routine corrente di cancellazione flash del firmware sia già stata aggiornata per la classe di densità target. Quando conta solo la densità target e andrebbero bene sia RCT6 sia RET6, dichiararlo; quando è necessaria una dimensione RAM specifica, indicarla invece di richiedere "la più grande disponibile".
Per verificare la disponibilità attuale di questa famiglia, cercare l'elenco STM32F103RCT6, l'elenco STM32F103RBT6 e l'elenco STM32F103RET6 su chip-seek.com. Queste pagine restituiscono risultati di catalogo aggiornati, non una dichiarazione di disponibilità; confermare quantità e codice data sulla quotazione. La precedente guida di riferimento incrociato STM32F103C8T6 e guida STM32F103CBT6 copre i membri più piccoli LQFP48 della stessa famiglia per progetti che non hanno adottato il footprint a 64 pin. Una richiesta di approvvigionamento con più righe può essere inviata tramite modulo BOM e RFQ.
Domande frequenti
Posso usare lo stesso binario firmware su RBT6 e RCT6 senza modifiche? Solo se il firmware legge già la geometria della flash dalle definizioni proprie del componente, invece di impostare una dimensione di pagina fissa. La maggior parte del codice di bring-up scritto per un singolo target la imposta così; quindi esaminare il driver della flash e lo script del linker prima di riutilizzare il binario.
Il footprint LQFP64 è effettivamente identico su RBT6, RCT6 e RET6? Sì, per il package LQFP 64, 10 × 10 × 1.4 mm indicato nelle informazioni di ordinazione correnti ST per ciascun componente. Verificare il codice ordinabile specifico del componente target, poiché la disponibilità del package può cambiare durante il ciclo di vita di un prodotto.
Qual è la differenza tra densità media e alta nella terminologia di ST? È una classe di capacità della flash definita nel manuale di riferimento RM0008 di ST: la densità media comprende da 64 a 128 Kbyte di flash, mentre quella alta comprende da 256 a 512 Kbyte. La classe determina l'organizzazione interna dell'array flash, inclusa la dimensione della pagina di cancellazione.
Una maggiore quantità di SRAM richiede di per sé modifiche al firmware? No. La RAM inutilizzata non deve essere utilizzata. La verifica è necessaria solo per il codice che calcolava indirizzi o limiti in relazione alla dimensione fissa RAM del componente più piccolo, invece di usare i simboli forniti dal linker.
I ADC, i timer, le periferiche USB e CAN cambiano tra questi tre componenti? No. L'insieme delle periferiche principali, le specifiche elettriche e l'albero di clock sono definiti dal progetto della famiglia performance-line e non cambiano con la densità di memoria in questi tre componenti.
Cosa succede se la dimensione della pagina di cancellazione è errata nel firmware di produzione? I dati adiacenti all'interno della stessa pagina fisica di cancellazione possono essere cancellati involontariamente quando viene cancellata una regione; ciò si manifesta in genere come impostazioni corrotte o un aggiornamento non riuscito, anziché come un errore di programmazione immediato.
Fonti
- Fotografia di copertina: Raimond Spekking, Fotografia del package STMicroelectronics STM32F107RBT6 LQFP64, CC BY-SA 4.0. Chip-seek ha ritagliato e disposto la copertina con la stessa licenza. La fotografia mostra la stessa famiglia di package LQFP64 e non è una fotografia specifica di STM32F103RBT6, RCT6 o RET6, né costituisce una prova di disponibilità a magazzino.
- Pagina prodotto ST STM32F103RB: dimensione della flash, SRAM, opzioni di package e informazioni per l'ordinazione.
- Datasheet ST STM32F103RC/RD/RE, DS5792: descrizione della famiglia performance-line ad alta densità, capacità della flash e di SRAM, informazioni sul package.
- Pagina prodotto ST STM32F103RE: dimensione della flash, conferma di SRAM e del package LQFP64.
- Manuale di programmazione ST PM0075, microcontrollori con memoria flash STM32F10xxx: organizzazione del modulo flash, dimensione della pagina per classe di densità, definizioni di densità bassa/media/alta.
- Datasheet ST STM32F103x8/B: dichiarazione di compatibilità pin-to-pin, software e funzionalità della famiglia performance-line.
Serve aiuto per approvvigionare la densità corretta?
Inviare il codice del componente di origine (se si migra da una densità inferiore), la dimensione della flash target e il suffisso esatto del package. Richiedere la conferma della quantità, del codice lotto/data e della titolarità dell'inventario prima dell'approvazione. Questa guida non ha verificato la disponibilità attuale; i soli risultati di catalogo non dimostrano la titolarità dell'inventario né la compatibilità del firmware.
Stai lavorando invece con la famiglia a 48 pin? La guida di riferimento incrociato STM32F103C8T6 copre il package LQFP48 più piccolo.