STM32F103RBT6 a RET6: Guia de migração da densidade da flash
O STM32F103RCT6 e os seus equivalentes RBT6 e RET6 partilham o mesmo encapsulamento 64-pinos LQFP e o mesmo núcleo Cortex-M3, precisamente por isso uma atualização da flash nesta família é tratada como substituição direta quando não o é. A compatibilidade dos pinos é mecânica. O tamanho da página de apagamento da flash, SRAM e os pressupostos do próprio bootloader não são garantidos pelo encapsulamento, e o manual de programação do próprio ST documenta diretamente essa diferença.
1. O que muda realmente entre RBT6, RCT6 e RET6?
As três peças são microcontroladores da linha de desempenho STM32F103, baseados no mesmo núcleo Arm Cortex-M3 72 MHz, no mesmo conjunto de periféricos e no mesmo encapsulamento LQFP64, com um corpo de 10 × 10 × 1.4 mm. A letra depois de “F103”, juntamente com o número, codifica o tamanho da flash: RBT6 inclui 128 Kbytes de flash e 20 Kbytes de SRAM, RCT6 inclui 256 Kbytes de flash e 48 Kbytes de SRAM, e RET6 inclui 512 Kbytes de flash e até 64 Kbytes de SRAM. Nada no silício altera o número de pinos, a atribuição dos pinos ou os periféricos principais; apenas muda a quantidade de memória no chip.
Essa combinação, encapsulamento idêntico e mais memória, é o que faz deste um verdadeiro caso de “atualização de capacidade”, e não uma substituição entre fabricantes. Não há necessidade de redesenhar a placa, não há um novo padrão de ilhas nem uma alteração no conetor de depuração SWD ou JTAG. O trabalho restante é inteiramente no firmware: confirmar que nada na compilação, no script do linker ou no controlador da flash partia da geometria do componente menor.
A folha de dados de alta densidade do próprio ST (DS5792, que abrange os componentes 256 a 512 Kbyte) e a folha de dados de densidade média referem ambas a mesma descrição da família de desempenho, e a folha de dados comercial STM32F103x8/B afirma que a família foi concebida para compatibilidade completa pino a pino, de software e de funcionalidades. Essa afirmação diz respeito à relação entre os componentes da família, não substitui a verificação do mapa de memória específico do componente pretendido.
2. A disposição dos pinos é realmente idêntica?
Mecanicamente, sim, para este trio específico. RBT6, RCT6 e RET6 indicam todos uma opção de encapsulamento LQFP 64, de 10 × 10 × 1.4 mm, nas páginas de informações para encomenda de ST, com 51 pinos de E/S de uso geral nessa configuração. Os mesmos números de peça também estão disponíveis noutros encapsulamentos (RBT6 acrescenta, por exemplo, uma opção TFBGA64), pelo que o sufixo do encapsulamento e o código exato de encomenda têm de ser verificados individualmente. A afirmação de “mesmo número de pinos” não equivale a uma correspondência de footprint verificada para a peça específica encomendada e utilizada.
| Componente | Flash | SRAM | Classe de densidade | LQFP64 disponível |
|---|---|---|---|---|
| STM32F103RBT6 | 128 KB | 20 KB | Medium-density | Yes |
| STM32F103RCT6 | 256 KB | 48 KB | High-density | Yes |
| STM32F103RET6 | 512 KB | 64 KB | High-density | Yes |
Antes de tomar uma decisão definitiva sobre redesenhar ou não a placa, consulte a tabela atual de informações do componente na folha de dados referente ao código exato encomendável que está a ser adquirido. O catálogo de ST, como o da maioria dos fabricantes, adiciona ou descontinua periodicamente opções específicas de encapsulamento por número de peça, e é o sufixo do código de encomenda (o “T6” aqui, além de quaisquer letras finais de encapsulamento ou temperatura) que um distribuidor efetivamente utiliza para manter o stock.
3. Porque é que ST chama a estas classes diferentes de “densidade”?
O manual de referência STM32F10xxx de ST (RM0008) e o manual de programação da flash (PM0075) dividem a família STM32F101/F102/F103 em classes de baixa densidade (16 a 32 Kbytes de flash), densidade média (64 a 128 Kbytes), alta densidade (256 a 512 Kbytes) e densidade XL. RBT6 pertence à densidade média; RCT6 e RET6 pertencem à alta densidade. Isto não é uma designação de marketing: a classe de densidade determina a organização interna da matriz de flash, que é o detalhe que afeta o firmware.
Especificamente, PM0075 afirma que o bloco principal de memória flash está organizado em 32 páginas de 1 Kbyte para dispositivos de baixa densidade, 128 páginas de 1 Kbyte para dispositivos de densidade média e 256 páginas de 2 Kbytes para dispositivos de alta densidade. A granularidade de apagamento, o bloco mais pequeno que o controlador da flash consegue apagar numa operação, está associada à classe de densidade, não à pertença do componente a uma família compatível ao nível dos pinos.
4. O que é uma página de apagamento da flash e porque é que o seu tamanho é importante?
A flash integrada não pode ser reescrita byte a byte da forma que RAM pode. Para alterar bits previamente programados, passando de 0 para 1, o controlador da flash tem de apagar uma página inteira, e só depois podem ser programados novos dados nela. A página é, portanto, a unidade atómica de qualquer atualização em campo, quer se trate de um bootloader a escrever uma nova imagem de aplicação, de um bloco de definições a ser reescrito ou de uma atualização OTA a preparar uma nova versão de firmware.
Um projeto baseado em RBT6 que apaga a flash em unidades de 1 Kbyte e armazena dois blocos de dados independentes separados por 1 Kbyte, por esse ser um limite de apagamento seguro nesse componente, depende de uma propriedade da matriz de flash de densidade média. Transferir o mesmo firmware para RCT6 sem voltar a verificar este ponto significa que o comando de apagamento passa a limpar 2 Kbytes de cada vez: o segundo bloco de dados, que o firmware continua a considerar isolado, fica dentro da página que acabou de ser apagada juntamente com o primeiro.
Este modo de falha não parece inicialmente um problema da flash. Manifesta-se como definições que são silenciosamente repostas, uma partição da aplicação que fica corrompida após uma atualização ou uma imagem OTA que arranca uma vez e depois falha após o ciclo de escrita seguinte. Como o sintoma surge durante a utilização e não durante a programação, é fácil perder tempo a investigar temporização, alimentação ou interrupções antes de verificar a causa real: uma suposição sobre o tamanho da página.
5. Onde é que um tamanho de página codificado interrompe um bootloader?
Há três pontos numa compilação de firmware típica que codificam uma suposição sobre o tamanho da página de apagamento, e os três devem ser revistos ao mudar entre classes de densidade:
- As definições da região de memória flash no script do linker. Uma divisão personalizada entre bootloader e aplicação alinha frequentemente as regiões com o limite de página de apagamento usado durante o desenvolvimento. Se esse limite tiver sido definido como 1 Kbyte em RBT6, as regiões continuam a ser endereços válidos em RCT6, mas deixam de estar alinhadas com o limite real de apagamento 2 Kbyte desse componente, o que pode deixar páginas parciais a abranger as regiões da aplicação e do bootloader durante uma atualização.
- A rotina de apagamento do controlador de memória flash. Tanto o ST's HAL como a biblioteca periférica padrão disponibilizam funções de apagamento da memória flash que recebem um endereço de página, mas a constante do tamanho da página usada para calcular quantas chamadas de apagamento são necessárias, ou onde começa a página seguinte, é por vezes definida localmente no código da aplicação em vez de ser lida da própria organização de memória do componente.
- Qualquer biblioteca de OTA ou de armazenamento de definições incluída a partir de fora do HAL. As bibliotecas de armazenamento em memória flash de terceiros usam frequentemente por predefinição um tamanho de página configurável que tem de ser definido por alvo; deixar silenciosamente um valor predefinido 1 Kbyte enquanto se utiliza silício RCT6 reproduz o mesmo risco de corrupção sem qualquer sintoma ao nível do linker.
A correção prática nos três casos é a mesma: localizar todas as referências ao tamanho da página de apagamento na compilação, confirmar que este é lido da organização real do componente-alvo (ou explicitamente compatível com ela) na ficha técnica atual e no PM0075, e repetir um ciclo completo de apagamento/programação/verificação num intervalo representativo de endereços, não apenas nos endereços usados durante a colocação em funcionamento original.
6. O que muda além da memória flash?
SRAM aumenta na mesma direção que a memória flash, mas por uma proporção relativa maior: 20 KB em RBT6 contra 48 KB em RCT6 é mais do dobro, e 64 KB em RET6 é mais do triplo. Um projeto que estava no limite de RAM no componente menor ganha uma margem significativa para buffers maiores, uma heap maior ou tarefas RTOS adicionais. Um projeto que tenha dimensionado precisamente RAM para RBT6's 20 KB deve verificar novamente se todas as alocações estáticas de tamanho fixo, os tamanhos da pilha e os símbolos do linker continuam a fazer sentido; passar para um componente com mais RAM disponível não obriga a utilizá-lo todo, mas qualquer código que tenha calculado endereços relativamente a um tamanho fixo de RAM menor deve ser revisto da mesma forma que as suposições relativas à memória flash.
O núcleo, a árvore de relógio, a estrutura GPIO e os periféricos de comunicação (I2C, SPI, I2S, USART, USB, CAN) não mudam entre estes três componentes. As especificações elétricas, o intervalo de tensão de funcionamento e a temporização desses periféricos são definidos pelo projeto da família de desempenho, não pela densidade da memória, pelo que a qualificação ao nível dos periféricos não precisa de ser repetida apenas devido à atualização da memória flash.
7. O que deve ser verificado antes de atualizar o componente?
Uma atualização de densidade nesta família é segura depois de verificar cinco itens com base na ficha técnica atual do componente-alvo específico e no manual de programação da memória flash, não os assumindo apenas pela compatibilidade dos pinos.
- Código de encapsulamento encomendável. Confirme se o código de encomenda exato LQFP64 da densidade-alvo está atualizado e disponível junto da fonte pretendida; as opções de encapsulamento podem diferir ao longo da gama de densidades de um determinado fabricante.
- Tamanho da página de apagamento da memória flash. Confirme se o bootloader, a biblioteca OTA ou o armazenamento de definições assumem um tamanho de página fixo e atualize essa constante para corresponder à classe de densidade do componente-alvo (1 Kbyte para densidade média, 2 Kbyte para densidade alta).
- Alinhamento das regiões no script do linker. Verifique novamente se as regiões da aplicação e do bootloader estão alinhadas com o novo limite da página de apagamento, e não apenas com um endereço válido da memória flash.
- Endereçamento relativo a RAM. Reveja qualquer código que tenha calculado localizações de buffers ou limites da pilha relativamente a um tamanho específico de SRAM, em vez de utilizar os símbolos do linker da cadeia de ferramentas.
- Teste completo de apagamento/programação/verificação. Execute o fluxo completo de atualização, incluindo uma escrita interrompida simulada se a aplicação suportar atualizações à prova de falhas, antes de qualificar o novo componente para produção.
Documente qual o componente específico (RBT6, RCT6 ou RET6) visado por uma determinada compilação de firmware e evite distribuir um único binário para várias classes de densidade sem uma verificação explícita do tamanho da página dentro do próprio controlador de memória flash.
8. Existem alternativas compatíveis ao nível dos pinos fora da família ST?
Existem componentes compatíveis com STM32F103 de segunda fonte de outros fabricantes, geralmente comercializados com a mesma disposição de pinos LQFP64 para densidades equivalentes, seguindo a mesma lógica do guia de referências cruzadas STM32F103C8T6 anteriormente publicado neste site. A precaução é idêntica: a compatibilidade dos pinos é uma afirmação mecânica sobre o encapsulamento e, por si só, não comprova um controlador de memória flash idêntico, um tamanho de página de apagamento idêntico ou uma temporização de programação da memória flash idêntica. Confirme no manual de programação do próprio fabricante o tamanho da página de apagamento e a configuração do ciclo de acesso à memória flash antes de presumir que um componente de segunda fonte se comporta como o original ST ao nível do firmware.
9. O que deve constar do pedido de fornecimento?
Ao procurar uma atualização de densidade, um pedido que indique o componente-alvo exato obtém uma resposta útil mais rapidamente do que um pedido que indique apenas uma capacidade de memória flash. Um fornecedor pode confirmar a disponibilidade com base no código completo de encomenda, mas um simples "256 KB STM32F103" não especifica o encapsulamento, a classe de temperatura nem o sufixo exato.
Os campos úteis são o número completo do componente encomendável (incluindo o encapsulamento e o sufixo de temperatura), a quantidade por produção com o volume anual, se o projeto está a passar de um componente menor específico (indique o número exato do componente de origem) e se a rotina atual de apagamento da memória flash do firmware já foi atualizada para a classe de densidade-alvo. Quando apenas a densidade-alvo importa e RCT6 ou RET6 serviriam, indique-o; quando for necessário um tamanho específico de RAM, indique-o em vez de pedir "o maior disponível".
Para consultar a disponibilidade atual desta família, pesquise a listagem STM32F103RCT6, a listagem STM32F103RBT6 e a listagem STM32F103RET6 em chip-seek.com. Estas páginas apresentam resultados de catálogo em tempo real, não uma garantia de stock; confirme a quantidade e o código de data na cotação. O anterior guia de referências cruzadas STM32F103C8T6 e guia STM32F103CBT6 abrange os membros LQFP48 mais pequenos da mesma família para projetos que ainda não adotaram o encapsulamento de 64 pinos. Pode ser enviado um pedido de aprovisionamento com várias linhas através do formulário BOM e RFQ.
Perguntas frequentes
Posso utilizar o mesmo binário de firmware em RBT6 e RCT6 sem alterações? Apenas se o firmware já ler a geometria da memória flash a partir das definições do próprio componente, em vez de codificar diretamente um tamanho de página. A maioria do código de inicialização desenvolvido para um único destino define-o diretamente, por isso reveja o controlador da flash e o script do linker antes de reutilizar o binário.
O encapsulamento LQFP64 é realmente idêntico em RBT6, RCT6 e RET6? Sim, para o encapsulamento LQFP 64, de 10 × 10 × 1.4 mm, indicado nas informações atuais de encomenda ST de cada componente. Confirme o código específico encomendável do componente-alvo, uma vez que a disponibilidade do encapsulamento pode mudar ao longo do ciclo de vida de um produto.
Qual é a diferença entre densidade média e alta densidade na terminologia de ST? É uma classe de capacidade de memória flash definida no manual de referência ST RM0008: a densidade média abrange 64 a 128 Kbytes de flash, enquanto a alta densidade abrange 256 a 512 Kbytes. A classe determina a organização interna da matriz flash, incluindo o tamanho da página de apagamento.
Mais SRAM exige, por si só, alterações no firmware? Não. A capacidade RAM não utilizada não tem de ser utilizada. A revisão só é necessária para código que calcule endereços ou limites relativamente ao tamanho fixo RAM do componente mais pequeno, em vez de utilizar os símbolos fornecidos pelo linker.
Os periféricos ADC, temporizadores, USB e CAN mudam entre estes três componentes? Não. O conjunto de periféricos principal, as especificações elétricas e a árvore de relógio são definidos pelo design da família de linhas de desempenho e não mudam com a densidade da memória neste trio.
O que acontece se o tamanho da página de apagamento estiver errado no firmware de produção? Os dados adjacentes dentro da mesma página física de apagamento podem ser limpos involuntariamente quando uma região é apagada, o que normalmente se manifesta como definições corrompidas ou uma atualização falhada, e não como um erro imediato de programação.
Fontes
- Fotografia de capa: Raimond Spekking, Fotografia do encapsulamento STMicroelectronics STM32F107RBT6 LQFP64, CC BY-SA 4.0. Chip-seek recortou e compôs a capa ao abrigo da mesma licença. A fotografia mostra a mesma família de encapsulamentos LQFP64 e não é especificamente uma fotografia de um STM32F103RBT6, RCT6 ou RET6, nem constitui prova de inventário.
- página de produto ST STM32F103RB: tamanho da flash, SRAM, opções de encapsulamento e informações de encomenda.
- folha de dados ST STM32F103RC/RD/RE, DS5792: descrição da família de linhas de desempenho de alta densidade, capacidade de flash e SRAM, informações sobre o encapsulamento.
- página de produto ST STM32F103RE: tamanho da flash, confirmação de SRAM e do encapsulamento LQFP64.
- manual de programação ST PM0075, STM32F10xxx Flash memory microcontrollers: organização do módulo de flash, tamanho da página por classe de densidade, definições de baixa, média e alta densidade.
- folha de dados ST STM32F103x8/B: declaração de compatibilidade pino a pino, de software e de funcionalidades da família de linhas de desempenho.
Precisa de ajuda para obter a densidade correta?
Envie o número de peça de origem (se estiver a migrar de uma densidade mais baixa), o tamanho de flash pretendido e o sufixo exato do encapsulamento. Solicite a confirmação da quantidade, do código de lote/data e da titularidade do inventário antes da aprovação. Este guia não verificou o stock atual; os resultados do catálogo, por si só, não comprovam inventário próprio nem compatibilidade do firmware.
Está a trabalhar com a família de 48 pinos? O guia de correspondência cruzada STM32F103C8T6 abrange o encapsulamento LQFP48 mais pequeno.