A close-up photograph capturing an engineer's hand wearing a white glove, gently probing a central processor unit (CPU) on an open automotive engine control unit (ECU). The ECU is connected by a cable to a multi-channel signal generator with a display showing waveform, and then to a laptop. The laptop screen displays 'Fault Injection Management' software, showcasing charts like 'Fault Detection Rate' (green bars) and 'Fault Injector Status', indicating an ongoing fault injection reliability test. The background is a well-lit, professional electronics development lab with an oscilloscope and other equipment blurred.

Testando a confiabilidade de circuitos integrados e software: um guia prático para injeção de falhas.

Autor: Johnny Liu, CEO da Dowway Vehicle

Publicado: 21 de julho de 2026

Categoria: Sistemas Embarcados, Segurança Automotiva, Engenharia de Hardware, Conformidade

Como CEO da Dowway Vehicle, onde desenvolvemos sistemas críticos para a segurança de automóveis, sei que confiabilidade não é apenas um requisito básico. Em nossa área de atuação, uma falha não detectada em um chip ou um breve erro de software podem causar sérios problemas de segurança.

A injeção de falhas é a maneira mais confiável de testar a capacidade de um sistema de lidar com erros. Este guia aborda os principais métodos de injeção de falhas, ajudando você a projetar sistemas que falham de forma controlada e atendem a padrões como o IEC 61508.

1. Por que devemos injetar falhas

Em meados da década de 1970, as missões espaciais relataram pela primeira vez comportamentos estranhos em sistemas causados ​​por erros em chips. Desde então, projetistas e fabricantes de chips têm se concentrado intensamente na confiabilidade. Hoje, precisamos analisar como os circuitos digitais em aviões, carros e outros sistemas críticos se comportam quando ocorrem erros. O teste de injeção de falhas é uma das melhores maneiras de avaliar essa confiabilidade. De fato, normas de segurança funcional como a IEC 61508 recomendam fortemente a injeção de falhas em todas as fases do ciclo de desenvolvimento.

Quando os sistemas falham, geralmente travam de forma drástica, destruindo dados de estado valiosos. Os erros também podem permanecer ocultos por um longo período antes de causarem um problema visível. Isso torna extremamente difícil encontrar a causa raiz de uma falha em um sistema em produção. Para configurações grandes e complexas, reproduzir essas raras condições de falha é praticamente impossível.

A injeção de falhas resolve isso. Ela permite testar o desempenho de um sistema:

  • Detecta falhas.
  • Isola as falhas para impedir que se propaguem.
  • Reconfigura-se automaticamente para continuar funcionando com segurança.
  • Retorna ao estado normal.

2. Dentro de um Ambiente de Injeção de Falhas

Um ambiente profissional de injeção de falhas é um ecossistema estruturado. Ele utiliza nove componentes principais para executar testes sem danificar o sistema alvo:

  1. Sistema alvo: O hardware ou software que você está testando.
  2. Injetor com defeito: A ferramenta (hardware ou software) que introduz o erro.
  3. Biblioteca de falhas: Um banco de dados separado armazena os parâmetros dos testes, como tipos de falha, localização, tempo e regras de hardware ou software. Manter essa biblioteca independente torna todo o sistema altamente flexível e fácil de migrar para outros projetos.
  4. Gerador de carga de trabalho: Uma ferramenta que envia comandos operacionais para o sistema alvo. Esses comandos podem ser aplicações reais, benchmarks padronizados ou tarefas sintetizadas.
  5. Biblioteca de cargas de trabalho: Uma coleção de cargas de trabalho e casos de teste predefinidos.
  6. Controlador: O programa que executa todo o experimento. Ele pode ser executado no próprio sistema alvo ou em um computador host independente.
  7. Monitor: Uma ferramenta que monitora a execução do sistema em tempo real para detectar quando os comandos são executados e quando ocorrem anomalias.
  8. Coletor de dados: Uma ferramenta que registra dados do sistema em tempo real quando acionada pelo monitor.
  9. Analisador de dados: Uma ferramenta offline que processa e analisa os dados coletados para medir a confiabilidade.

3. Injeção de falhas de hardware versus software

A sua escolha entre métodos de hardware e software depende dos tipos de falhas que deseja testar e do esforço necessário para configurá-los.

Tipo de falha / ModeloInjeção de falhas de hardwareInjeção de falhas de software
Circuito abertoSimNão
PonteSimNão
Inversão de bitsSimSim
Corrente espúriaSimNão
Sobrecarga de energiaSimNão
Preso emSim (Melhor para controle de localização)Difícil / Alto custo fixo
Corrupção de dados armazenados (memória, registradores, disco)RaramenteSim
Corrupção de dados de comunicação (barramento, rede)RaramenteSim
Manifestação de defeitos de software (nível de máquina e superior)NãoSim

Se você deseja testar falhas permanentes (onde uma linha física é forçada a permanecer em um nível lógico 1 ou 0), um injetor de hardware é a melhor opção, pois permite controlar o ponto físico exato. Simular falhas permanentes com software é extremamente lento ou completamente impossível.

Se o seu foco for corrupção de dados, ferramentas de software geralmente são suficientes. Alguns erros, como uma inversão de bit em uma célula de memória, podem ser detectados tanto por hardware quanto por software. Nesses casos, a escolha deve ser feita com base no custo, na precisão, no grau de interferência da ferramenta com o sistema e na facilidade de repetição do teste.

4. Injeção de Falhas Implementada por Hardware

Os métodos de hardware utilizam equipamentos físicos adicionais para introduzir erros diretamente no hardware alvo. Dividimos esses métodos em dois grupos principais: por contato e sem contato.

Injeção de hardware por contato (nível de pino)

Essa é a abordagem de injeção de hardware mais comum. Ela requer contato físico direto com os pinos do chip alvo.

  • Sondas ativas: As pontas de prova se conectam diretamente aos pinos para injetar corrente. Isso altera o estado dos pinos. É usado principalmente para falhas do tipo “stuck-at”, embora também seja possível conectar dois pinos em paralelo. Tenha cuidado: injetar corrente em excesso com pontas de prova ativas pode danificar o chip alvo.
  • Inserção do soquete: Você coloca um soquete personalizado entre o chip alvo e sua placa de circuito. Esse soquete força níveis de tensão analógica específicos nos pinos para simular falhas de curto-circuito, circuito aberto ou erros lógicos complexos. Ele pode inverter sinais de pinos, executar operações AND ou OR com pinos vizinhos ou até mesmo executar operações combinando o sinal atual com sinais anteriores no mesmo pino.

Esses métodos de contato oferecem um ótimo controle sobre o tempo e a localização da falha. Eles também praticamente não interferem no software em execução no dispositivo alvo. No entanto, como essas falhas ocorrem no nível do pino, elas não são exatamente iguais às falhas internas de curto-circuito ou de curto-circuito que acontecem nas profundezas do silício. Mesmo assim, são excelentes para testar circuitos de detecção de erros. Você também pode conectar pontas de prova ativas à linha de alimentação para injetar flutuações na fonte de alimentação, embora isso apresente um alto risco de danificar o dispositivo.

Injeção de hardware sem contato

O injetor não toca no sistema. Em vez disso, utiliza forças físicas externas para causar problemas dentro do chip.

  • Radiação de íons pesados: Os íons atravessam as regiões de depleção do chip, criando correntes elétricas transitórias.
  • Campos eletromagnéticos: Colocar o hardware em ou perto de campos eletromagnéticos fortes simula a interferência física natural.

Esses métodos sem contato são ótimos para testar protótipos de projetos iniciais, especialmente quando você precisa de rastreamento de hardware de alta velocidade (como medir quanto tempo uma CPU leva para reagir a um erro) ou quando precisa alcançar pontos internos que sondas físicas não conseguem atingir. Os sistemas de hardware podem rastrear e detectar esses erros com alta velocidade e baixíssima interferência no sistema, geralmente usando temporizadores de hardware ou aguardando um evento específico (como um endereço que aparece no barramento).

A principal desvantagem é que os métodos sem contato são difíceis de acionar com precisão de tempo ou localização, porque não é possível controlar perfeitamente quando um íon pesado é emitido ou quando uma onda eletromagnética atinge um transistor específico.

5. Injeção de Falhas Implementada por Software (SFI)

As ferramentas de injeção de falhas baseadas em software são extremamente populares. O principal motivo é o custo: não é necessário comprar equipamentos de laboratório caros. O SFI também permite testar aplicativos e sistemas operacionais diretamente, o que é muito difícil de fazer com hardware.

Se você deseja testar um aplicativo, deve inserir o injetor dentro do próprio aplicativo ou entre o aplicativo e o sistema operacional. Se o objetivo for testar o sistema operacional, o injetor deve ser inserido no código do sistema, pois adicionar uma camada extra entre o hardware e o sistema operacional é extremamente difícil.

Apesar de sua flexibilidade, o SFI apresenta três principais desvantagens:

  1. Limites de acesso: Não pode acessar áreas que o software não consegue acessar (como portas lógicas físicas).
  2. Interferência do sistema: O código do injetor pode tornar o sistema alvo mais lento ou até mesmo alterar a estrutura original do software.
  3. Baixa resolução temporal: Isso pode distorcer a precisão do teste. O SFI funciona bem para falhas de desenvolvimento lento (como problemas de memória). Mas, para falhas ultrarrápidas (como falhas de temporização da CPU ou do barramento), o software pode não detectar como o erro se propaga pelo sistema.

A abordagem híbrida

Para corrigir esses problemas de sincronização, os engenheiros às vezes usam um método híbrido. Isso combina a flexibilidade da injeção de software com a velocidade e a precisão do rastreamento por hardware. É ótimo para medir pequenos atrasos de tempo. No entanto, adicionar ferramentas de rastreamento por hardware aumentará seus custos e limitará a flexibilidade dos testes devido às limitações de armazenamento físico de dados.

6. Injeção de Software em Tempo de Compilação vs. Injeção de Software em Tempo de Execução

A injeção de falhas de software é dividida de acordo com o momento em que a falha é introduzida: em tempo de compilação ou em tempo de execução.

SFI em tempo de compilação

Você modifica as instruções do programa antes de carregá-lo ou executá-lo. Em vez de alterar o hardware físico, você modifica o código-fonte ou o código assembly para simular erros de hardware, software ou transitórios. Isso cria uma imagem de programa modificada e defeituosa. Quando o sistema executa essa imagem, a falha é acionada.

Isso não requer nenhum software adicional em tempo de execução e não causa nenhuma perda de desempenho. Como o erro é gravado permanentemente no código, é perfeito para simular falhas permanentes de hardware. A desvantagem é que você não pode injetar falhas dinamicamente enquanto o programa está em execução.

SFI de tempo de execução

Você precisa de uma maneira de acionar falhas enquanto o programa está em execução. Existem três maneiras comuns de fazer isso:

  • Tempos limite: Um temporizador (seja de hardware ou software) dispara uma interrupção após um tempo definido, chamando o injetor de falhas. Isso não requer alterações no código do seu aplicativo. No entanto, como o disparo é baseado no tempo e não na execução do programa, os resultados podem ser imprevisíveis. Essa abordagem é mais adequada para simular falhas de hardware transitórias ou temporárias aleatórias.
  • Exceções e Armadilhas: Uma exceção de hardware ou uma instrução de interrupção de software (como um ponto de interrupção) transfere o controle para o injetor. Ao contrário dos tempos limite, isso permite injetar falhas exatamente quando um evento ou condição específica ocorre (por exemplo, quando o programa tenta acessar um local específico da memória). Ambos devem se conectar diretamente aos manipuladores de interrupção do sistema.
  • Inserção de código: Você adiciona novas instruções ao programa que são executadas imediatamente antes do código alvo. Isso é semelhante a modificar o código, mas ocorre em tempo de execução e adiciona novas instruções em vez de alterar as antigas. Ao contrário das traps, o injetor pode ser executado inteiramente em modo de usuário, em vez de modo de sistema, portanto, não requer privilégios avançados do sistema operacional.

7. Resumindo as diferenças

Vejamos como as duas principais abordagens se comparam:

  • Locais-alvo: O hardware tem como alvo os pinos do encapsulamento e os componentes físicos internos. O software tem como alvo a memória ativa, os registradores da CPU e o estado geral do software.
  • Interferência: O hardware praticamente não causa atrasos de temporização. O software introduz sobrecarga de desempenho porque código extra precisa ser executado.
  • Custo: O hardware é caro e requer um laboratório dedicado. O software, por sua vez, depende de código e é barato de implementar.
  • Resolução Temporal: O hardware é altamente preciso (nanossegundos). O software tem uma resolução mais grosseira (microssegundos ou milissegundos).
  • Foco dos testes: O hardware avalia a detecção e o bloqueio de erros em baixo nível. O software testa programas de recuperação de alto nível, sistemas operacionais e aplicativos.

8. Perguntas Frequentes

Qual é a principal diferença entre injeção de falhas por hardware e por software?

A injeção de hardware tem como alvo pinos e circuitos físicos, enquanto a injeção de software tem como alvo memória, registradores e código. Os métodos de hardware utilizam ferramentas físicas, como sondas ou radiação, para testar reações de circuitos de baixo nível. Os métodos de software modificam o código ou a memória do sistema para testar como os aplicativos e os sistemas operacionais lidam com erros.

A injeção de falhas por software pode simular falhas permanentes de hardware?

Sim, utilizando injeção em tempo de compilação para modificar permanentemente o código do programa. Ao alterar as instruções de código-fonte ou de montagem antes da execução, você cria uma imagem de programa permanentemente defeituosa. Isso simula uma falha física permanente sem causar qualquer atraso no desempenho durante a execução.

Por que a inserção em soquete é mais segura do que o uso de sondas ativas para testes em nível de pino?

A inserção em soquete utiliza manipulação controlada de sinais, enquanto as sondas ativas injetam correntes externas que podem danificar o chip. Sondas ativas forçam a corrente diretamente nos pinos físicos, o que pode facilmente superaquecer o silício. Conectores de derivação interceptam os pinos com segurança e usam portas lógicas (AND, OR, Inversão) para simular falhas sem perigo elétrico.

Considerações finais para arquitetos de sistemas

Na Dowway Vehicle, seguimos uma regra simples: Se você não testou a resposta do seu sistema a uma falha, deve presumir que ele falhará quando essa falha ocorrer. Não dependa de um único método de teste. Utilize injeção de software no início do desenvolvimento para testar máquinas de estado em nível de aplicação e rotinas de recuperação do sistema operacional. Posteriormente, utilize injeção de hardware em protótipos físicos para garantir que seus mecanismos de proteção de hardware, sistemas de proteção de memória e falhas físicas de pinos não causem um desastre em todo o sistema.

Referências

  • [1] Técnicas e ferramentas de injeção de falhas (Pesquisa Acadêmica Abrangente)
  • [2] Um ambiente de injeção de falhas baseado em verificação funcional (Simpósio IEEE sobre Confiabilidade e Manutenibilidade)
  • [3] ISO 26262-11:2018 – Diretrizes sobre a aplicação de semicondutores para a segurança funcional automotiva.
  • [4] IEC 61508 – Segurança funcional de sistemas elétricos/eletrônicos/eletrônicos programáveis ​​relacionados à segurança.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Need a Quote or Have Questions?

Please fill out the form below, our engineers will contact you within 24 hours.