É possível destruir fisicamente um microcontrolador com software?


29

Suposições:

  • Nenhum circuito externo conectado (exceto o circuito de programação, que assumimos estar correto).
  • O uC não está com defeito.
  • Destruindo, quero dizer liberar a fumaça azul da morte, não acumulá-la em software.
  • É um uC "normal". Não é um dispositivo específico de propósito único muito estranho, de um em um milhão.

Alguém já viu algo assim acontecer? Como isso é possível?

Fundo:

Um orador de um encontro ao qual ajudei disse que era possível (e nem tão difícil) fazer isso, e algumas outras pessoas concordaram com ele. Nunca vi isso acontecer e, quando perguntei como era possível, não obtive uma resposta real. Estou muito curioso agora e gostaria de receber algum feedback.


3
A única maneira viável de isso acontecer, IMO, é se um pino estiver fisicamente conectado ao VCC / COM, e esse pino estiver configurado para ser acionado oposto ao que está conectado, causando uma condição de sobrecorrente. Mas isso é uma falha combinada de HW / SW.
Shamtam 15/08/14

6
Muitos controladores possuem flash que pode ser gravado sob controle de software e que está sujeito a desgaste. Os softwares que esgotam a memória em um curto período de tempo contam como "destruindo" o chip?
Supercat

1
Além de ressaltar a observação da @ supercat sobre a EEPROM ou o desgaste do flash (é possível desgastar a EEPROM em alguns minutos), acrescentarei que, em muitos casos, há muito pouca diferença de um ponto de vista do usuário entre um dispositivo destruído fisicamente e um 'tijolo' ' produtos. Se precisar voltar para a fábrica, parece praticamente o mesmo.
Spehro Pefhany

1
Cuidado com o loop binário infinito de enésima complexidade . Tem sido em torno de idades ...
jippie

3
@ Oh, eu já queimei um chip, porque o cara do hardware trocou os pinos Vcc e GND no PCB. (Acho que ele pensou que o chip era uma queda na substituição ... Não era.) Havia fumaça e plástico queimado. Não durou muito, mas o fio pode sobreviver a isso aparentemente.
Mishyoshi 15/08/14

Respostas:


20

Claro que você pode, com a instrução HCF !

Dito isto, eu digo que é impossível sem nenhum circuito externo, além de energia e coisas do tipo.

Mesmo incluindo algumas conexões com falha não intencional, possivelmente não será suficiente: se você amarrar todos os gpios a um trilho de potência, configurá-los como saída (no trilho de força oposto) que pode dissipar bastante energia. Um pino gpio provavelmente está protegido contra curto-circuito e, portanto, nada prejudicial acontecerá.

Projetar um circuito externo que destrói o chip à vontade também não é trivial na minha opinião. A primeira coisa que vem à mente precisa de uma fonte de alimentação de alta tensão, uma Nmos e um resistor:

esquemático

simular esse circuito - esquema esquemático usando o CircuitLab Onde:

  • é o suprimento usual para o micro, alguns 3v3 a 5V ou o que for necessárioVCC
  • HV é uma fonte cuja tensão está bem acima das classificações máximas absolutas do micro
  • D1 está lá para proteger sua valiosa fonte de tensão 3V3
  • R1 puxa o portão mosfet alto quando o micro não o mantém no chão
  • M1 é o assassino designado

a operação é simples: se o micro libera o GPIOx M1, o Vcc aumenta e seu chip pega fogo. Observe que esta é uma configuração de baixa qualidade, por exemplo, a HV deve ser ligada depois que você tiver certeza absoluta de que o GPIOx está firmemente preso ao solo. Alguns transistores podem não gostar de -5V Vgs, e assim por diante ... Mas você entendeu.


3
adoro a referência HCF.
placeholder

Ei, obrigado por me dar uma nova série de TV para conferir!
OJFord 17/08/14

@OllieFord Eu não tenho certeza do que você está falando ...
Vladimir Cravero


15

Disclaimer: supercat disse isso primeiro em um comentário.

Na verdade, não é possível destruir fisicamente a maioria dos MCUs, mas é possível usá-lo o suficiente para começar a funcionar mal a um ponto em que ele não possa ser usado. Tenho experiência com o MSP430 da TI, então aqui vai:

Esses MCUs permitem reprogramar o flash inteiro a qualquer momento. Não apenas é possível usar o flash reescrevendo-o milhões de vezes até que ele falhe, mas o gerador de programação em flash no chip pode causar falhas no processador de ponta, se o gerador de programação estiver configurado incorretamente. Esse é um intervalo de frequência permitido para programação. Ao sair desse intervalo (mais lento), o tempo de programação pode se tornar excessivamente longo e causar uma falha nas células flash. Após apenas algumas centenas de ciclos, é possível "queimar" as células flash causando falha permanente.

Além disso, alguns modelos permitem fazer o overclock do núcleo para que ele atinja uma velocidade mais alta aumentando a tensão interna. O MCU funciona com fonte de tensão de 1,8-3,6V, mas o próprio núcleo foi projetado para funcionar com 1,8V. Se você overclockar demais o núcleo em um trilho de energia de 3,6V enquanto alterna todas as E / Ss, ativando todos os periféricos e funcionando a 40MHz (em geral, é o máximo de 25MHz em modelos maiores) em um pequeno gabinete fechado, você pode acabar fritando o núcleo por causa do superaquecimento. Na verdade, alguns caras disseram que atingiram essas frequências (geralmente o DCO falha antes e o chip é salvo, mas bem ... talvez).

Apenas tente?


nit-pick - Eu acredito que a maioria dos flash tem garantia de não trabalhar mais que 10.000 gravações, e não "milhões". Provavelmente não vale a pena consertar, pois você está fazendo uma observação.
Gbulmer 15/08/14

2
Ah ... desgaste de flash. Lembro-me da primeira vez em que tive um bug que causava gravações constantes na EEPROM em uma foto. Bastou 10 segundos ou mais do tempo de execução. Levei cerca de um minuto para perceber o que aconteceu :-)
slebetman

6

De acordo com o stackexchange - "É realmente uma má idéia deixar um pino de entrada do MCU flutuando?"

Ele descreve várias circunstâncias nas quais um chip pode ser danificado por um pino de circuito aberto. Editar: um exemplo de produtos analógicos e microcontroladores da Spansion diz:

4.1 Entrada de porta / pinos de E / S digitais não utilizados
É altamente recomendável não deixar os pinos de E / S digitais desconectados enquanto estiverem na entrada. Nesse caso, esses pinos podem entrar no chamado estado flutuante. Isso pode causar uma corrente ICC alta, o que é adverso aos modos de baixa energia. Também podem ocorrer danos ao MCU.

A condição nesta pergunta é exatamente pinos de circuito aberto.

Então, a nossa tarefa é dirigir que a partir de Maio a irá danificar o pino. Eu acho que isso é suficiente para ir além do 'bricking'.

Um mecanismo identificado nessa resposta está direcionando um pino de entrada para uma tensão de valor médio, em que os dois transistores complementares estão "ligados". Operando nesse modo, a interface do pino pode esquentar ou falhar.

Um pino de entrada tem uma impedância muito alta e também é um capacitor. Presumivelmente, o acoplamento é suficiente entre os pinos adjacentes, e alternar os pinos vizinhos com rapidez suficiente pode carregar a carga no pino de entrada e empurrá-lo para o estado "quente". A metade dos pinos de E / S sendo acionados nesse estado pode aquecer o chip o suficiente para causar danos?

(Existe um modo em que a capacitância de um pino de circuito aberto possa ser usada como um dobrador de tensão? Hmm.)

Eu também acho que o flash prejudicial é suficiente. Eu acho que isso é ruim o suficiente para tornar o chip inútil.

Ele não precisa ser totalmente flash, mas apenas a página que contém os vetores Power-on, RESET etc. O limite em uma única página pode levar algumas dezenas de segundos.

Eu tinha uma indicação, mas nenhuma evidência sólida) de que, para alguns MCUs, pode ser pior. Eu assisti a uma apresentação alguns anos atrás. Alguém perguntou por que os concorrentes ofereciam peças com ciclos de gravação em flash muito mais altos. O apresentador (grande fabricante não identificado de MCU) disse que adotou uma abordagem muito mais conservadora nas especificações de memória flash. Ele disse que sua garantia foi definida a uma temperatura significativamente mais alta do que a norma da indústria. Alguém perguntou "e daí". O palestrante disse que vários produtos de fabricantes teriam uma vida útil de reescrita significativamente menor do que suas peças nas mesmas temperaturas que usavam. Minha lembrança era de 5x se tornaria <1x. Ele disse que é muito não linear. Entendi que a programação a 80 ° C em vez de 25 ° C seria uma "coisa ruim".

Portanto, a reescrita do flash combinada com um chip muito quente também pode torná-lo inútil em menos de 10 segundos.

Edit:
Eu acho que "liberar a fumaça azul da morte" é uma restrição mais difícil do que o necessário. Se algum dos circuitos de pinos: RESET, detector de queda de energia, circuito de inicialização, RC ou oscilador de cristal (e provavelmente alguns outros circuitos) puderem ser danificados, o chip ficará inútil.

Como outros observaram, quebrar o flash também o mataria irreparavelmente.

"Fumaça" parece impressionante, mas ataques fatais menos óbvios ainda são fatais e muito mais difíceis de detectar.


5

Uma fonte potencial dessa destruição é o travamento de SCR, onde transistores não intencionais (intrínsecos) em um chip se juntam para formar um tipo de TRIAC que pode então afundar muita corrente. Isso pode facilmente explodir os fios de ligação, e eu até vi dispositivos envoltos em plástico visivelmente deformados por causa do calor produzido.

A causa típica é direcionar (mesmo que momentaneamente) uma entrada para acima ou abaixo da fonte ou dos trilhos de aterramento, respectivamente, mas acho que você pode ver isso acontecer se uma entrada for deixada flutuando. E não é difícil imaginar um circuito em que a flutuação da entrada seja controlada por software (embora isso seja uma coisa muito boba de se permitir).


4

É POSSÍVEL que o software intencionalmente escrito para esse fim, direcionado a um processador muito específico, possa forçar o overclock até o ponto em que o processador superaqueça. Desde que, naturalmente, o processador contenha registros de controle de relógio configuráveis ​​por software.

NÃO é possível que TODOS os processadores possam ser danificados dessa maneira, é claro. Se isso fosse verdade, haveria bilhões de Z80s e 6800s e 6502s deixados de lado por erros de escrita de software rebeldes quando ainda estávamos digitando o código da máquina manualmente, cometendo muitos erros aleatórios.


2
Você não precisa de acesso para configurar o relógio. Você só precisa executar o software de uma maneira que o designer da CPU não imaginava. Aqui está um código que tenta atingir os 4 FLOPS teóricos por ciclo em um processador da série Intel Core: stackoverflow.com/questions/8389648/… . Esse código é conhecido por superaquecer CPUs.
slebetman

1
Isso está relacionado aos programas "vírus de energia" ?
Davidcary

1
@ DavidDary, esse é um termo totalmente novo para mim. Eu estava me referindo, no entanto, não a uma série de instruções com fome de relógio, mas sim à alteração real da taxa de clock (alguns processadores suportam controle de software sobre a taxa de clock através da manipulação de registros de controle) a uma frequência mais alta que a CPU ou seu dissipador de calor pode lidar com isso.
TDHofstetter

3

Esta é a minha opinião por arruinar um microcontrolador com o mínimo de peças possível ...

Apenas alterne os pinos de saída em alguns kHz!

Você ainda pode não ver fumaça, dependendo do modo de falha interna.

esquemático

simular este circuito - esquemático criado usando o CircuitLab

--Edit, adicionado 22/08/08 -

Agora, acho que você não pode arruinar um microcontrolador com os critérios dados. Mas você pode facilmente arruinar os circuitos externos com o código errado. Um exemplo que vem à mente é um simples conversor de impulso que eu projetei recentemente ... simplesmente pausar o código durante a depuração pode causar um curto-circuito em um indutor para o aterramento através de um MOSFET. POOF


2
Eu não quero ser "esse indivíduo", mas Assunção # 1: "No circuito externo conectado"
Radian

1
Você está sendo "aquele cara". O subtexto dessa resposta é "Não, você não pode estragar um chip assim".
Daniel

2

Em termos de código de modo de usuário comum, acho que você não pode escrever nada que possa quebrar o chip.

No entanto, lembro-me dos dias dos microprocessadores que poderiam ser destruídos em menos de um minuto ou até segundos se o dissipador de calor caísse. Depois, adicionaram circuitos de detecção térmica que reduziriam o relógio se a peça esquentasse demais. Agora que conseguimos colocar muito mais transistores do que os que podem ser usados ​​de uma só vez, os chips são capazes de produzir mais calor do que o dissipador de calor pode dissipar e são os circuitos térmicos e de gerenciamento de energia que o mantêm seguro. Por exemplo, consulte Intel Turbo Boost 2.0. Portanto, parece bem possível derreter um chip se você puder ignorar ou aumentar o limite no gerenciamento de energia e no circuito térmico. Portanto, se eles estiverem sob controle de software (não tem idéia; talvez exija uma atualização do BIOS?), Você pode executar vários loops paralelos sem fazer nada, juntamente com o trabalho integrado da GPU, juntamente com a decodificação e codificação do hardware H.264 e qualquer outra coisa que o chip possa fazer, de uma só vez, até que o chip superaqueça e emita a mágica fumaça azul.


2

Eu estou mais familiarizado com os processadores STM32, então eles se aplicam mais a essa família. Mas abordagens semelhantes podem ser possíveis com outros processadores também:

  1. Existe um modo permanente de proteção contra gravação. Portanto, se você programar esse bit e algum programa inútil para o FLASH, o MCU nunca poderá ser usado novamente. Não sei se isso conta como 'bricking', mas envolve um mecanismo de hardware permanente.

  2. Os pinos de programação são reconfiguráveis ​​como GPIO. Como o pino do relógio é acionado pelo dispositivo de programação, isso pode ser usado para causar um curto-circuito. Provavelmente quebraria esse pino único, o que seria um pino de programação muito ruim.

  3. Como mencionado pelo dirkt, os PLLs podem ser usados ​​para fazer overclock no processador. Isso pode causar superaquecimento ou danos.


1

Quem nunca disse que isso não entende o quão envolvido o processo de design está desses chips. Isso não significa que o erro não ocorra e que a cobertura do código das regressões e casos de canto às vezes perca as coisas, mas afirmar que TODOS ou mesmo a maioria dos processadores tem essa falha é logicamente dúbio.

Apenas pergunte a si mesmo, o que acontece quando um contador de horas excede os requisitos de tempo (assumindo que não superaquece). o chip falha e talvez corrompa a memória e até o acesso ao disco rígido, mas fundamentalmente o processador será reiniciado novamente e até executará o sistema operacional novamente se a corrupção for corrigida. Então, que tipo de microcódigo projetado adequadamente pode causar MAIS interrupções do que esse cenário? - responda muito provavelmente nenhum.

TLDR; Todos os processadores têm essa falha - NÃO


Acredito que algumas / a maioria das CPUs de microcontroladores (em volume, não em valor) não são microcodificadas. Isso invalida sua suposição?
precisa saber é o seguinte

Não, esteja você projetando um seqüenciador ou uma célula de finalidade fixa, as regressões e restrições / testes no projeto serão rigorosos.
placeholder

Para que uma nuvem azul de fumaça ocorra, a CPU teria superaquecido de uma maneira ou de outra. Ou experimentando uma voltagem muito alta, experimentando uma corrente muito alta, experimentando polaridade reversa ou experimentando também, os transistores podem comutar em uma frequência muito alta. Somente o último método é possível em software. É improvável que as CPUs que rodam abaixo de 500 MHz tenham morrido por causa do superaquecimento do software, mas eu vi as CPUs morrerem devido ao superaquecimento do software. A suposição que você fez é exatamente o que não deveria.
slebetman

@slebetman, você está confundindo muitas coisas aqui. Como se obtém "polaridade reversa" através das instruções do software? como é possível obter "muitas comutações em uma freqüência muito alta", talvez exista uma falha mágica em todos os chips que os transforma em pipelines de execução massivamente paralelos?
placeholder

@ placeholder: Eu disse que você não pode obter polaridade reversa através das instruções do software. Você leu meu comentário?
slebetman

1

Acredito que certamente é possível destruir fisicamente um microcontrolador (MC) com software. Tudo o que é necessário é a combinação do MC para executar um loop "rígido" de instruções que causam 100% de utilização e um dissipador de calor "defeituoso" que permite que o calor dentro do chip se acumule. Se a falha leva segundos, minutos ou horas, dependerá da rapidez com que o calor se acumula.

Eu tenho um laptop que só posso usá-lo com uma utilização contínua de 50%. Se eu exceder isso, o computador será desligado. Isso significa que, com 50% de uso, a temperatura do MC está abaixo do ponto de disparo definido. À medida que o uso aumenta, a temperatura do MC aumenta até que o ponto de disparo seja atingido. Se o circuito de desligamento térmico não funcionasse (ou não tivesse um), a temperatura do MC continuaria aumentando até ser destruída.


0

esquemático

simular este circuito - esquemático criado usando o CircuitLab

#include <avr/io.h>

int main(void)
{
    DDRB |= _BV(2) | _BV(4);
    PORTB |= _BV(2);
    PORTB &= ~_BV(4);
    for (;;);
}

O código acima faz com que o MCU empurre o PB2 alto enquanto puxa o PB4 para baixo, e isso cria um curto-circuito de VDD para PB2 para PB4 para GND e rapidamente os drivers de porta do PB2 e / ou PB4 fritam. O curto-circuito pode ser um erro inocente, como uma ponte de solda acidental.


Estou cético quanto a isso funcionar. Os pinos de E / S normalmente não podem obter ou absorver grandes quantidades de corrente. Os transistores do driver IO limitariam a corrente.
Adam Haun 24/03

@AdamHaun O problema é que não há limite atual. O que está acontecendo aqui é que esse circuito pode queimar esses transistores.
Maxthon Chan

A limitação de corrente é do tamanho e da tensão de porta dos transistores da unidade de saída. Talvez um AVR de 5V possa queimar os drivers, mas olhando para os gráficos típicos de força do ATMega, com 3V Vcc em curto com dois pinos, pode até não exceder a corrente máxima absoluta dos pinos. E a corrente diminui em alta temperatura! MCUs de menor potência provavelmente estariam bem.
Adam Haun 24/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.