Чи можливо фізично знищити мікроконтролер за допомогою програмного забезпечення?


29

Припущення:

  • Жодна зовнішня схема не підключена (крім схеми програмування, яку ми вважаємо правильною).
  • uC не є несправним.
  • Під руйнуванням я маю на увазі звільнення синього диму від смерті, а не забиття його в програмному забезпеченні.
  • Це "звичайний" UC. Не дуже дивний пристрій на мільйон із цільовим призначенням.

Хтось коли-небудь бачив, щоб щось подібне сталося? Як це можливо?

Фон:

Доповідач зустрічі, якому я допомагав, сказав, що це можна (і навіть не так важко) зробити, і деякі інші люди погодилися з ним. Я ніколи не бачив, щоб це сталося, і коли я запитав їх, як це можливо, я не отримав реальної відповіді. Мені зараз дуже цікаво, і я хотів би отримати відгуки.


3
Єдиний можливий спосіб цього відбутися, IMO, це якщо штифт фізично підключений до VCC / COM, і зазначений штифт налаштований так, щоб він рухався навпроти того, з чим він підключений, викликаючи перевантажений стан. Але це комбінований збій HW / SW.
Шамтам

6
Багато контролерів мають спалах, який можна записати під програмним керуванням і який може бути зношеним. Чи вважатиметься програмне забезпечення, яке зношувало пам'ять за короткий проміжок часу, як "знищення" мікросхеми?
supercat

1
Окрім спостереження за допомогою Seconding @ supercat щодо EEPROM або зносу спалаху (можливо, EEPROM зношується за кілька хвилин), я додам, що в багатьох випадках різниця між фізично зруйнованим пристроєм і «цегляним пристроєм» у багатьох випадках дуже велика. 'продукт. Якщо доведеться повернутися на завод, це виглядає приблизно так само.
Spehro Pefhany

1
Остерігайтеся нескінченної бінарної петлі n-й складності . Це було віками ...
jippie

3
@Roh Я вже записав чіп, бо апаратник поміняв шпильки Vcc та GND на друкованій платі. (Я думаю, він хоч, що мікросхема була краплиною заміни ... Це не було.) Був дим і палав пластик. Це не тривало довго, але провід може пережити це, мабуть.
Mishyoshi

Відповіді:


20

Звичайно, ви можете, з інструкцією HCF !

Тим не менш, я кажу, що це неможливо без будь-якої зовнішньої схеми, крім живлення та іншого.

Навіть включення деяких ненавмисно несправних з'єднань, можливо, не перерве це: якщо ви прив’яжете всі гпіоси до силової рейки, встановивши їх як вихід (до протилежної силової шини), що може розсіювати досить багато енергії. Шпилька gpio, ймовірно, захищена від короткого замикання, і так нічого шкідливого не станеться.

Проектування зовнішньої схеми, що знищує мікросхему за бажанням, на мою думку, теж не банально. Перше, що спадає на думку, потребує джерела живлення високої напруги, нмосу та резистора:

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab Де:

  • - звичайне джерело живлення для мікрофонів, якесь від 3v3 до 5V або все, що потрібноVСС
  • НВ - це джерело живлення, напруга якого значно перевищує абсолютні максимальні показники мікро
  • D1 є для захисту вашого цінного джерела напруги 3V3
  • R1 піднімає ворота MOSFET високо, коли мікро не тримає його на землі
  • М1 - призначений вбивця

операція проста: якщо мікровипуск GPIOx M1 включається, Vcc піднімається, і ваш чіп загоряється. Зауважте, що це шалене налаштування, наприклад, HV потрібно включити після того, як ви впевнені, що GPIOx міцно тримається за землю. Деяким транзисторам, можливо, не сподобаються якісь -5В Vgs і так далі ... Але ви отримаєте малюнок.


3
люблю посилання на HCF.
заповнювач

Гей, дякую за те, що ви дали мені новий телесеріал, щоб перевірити!
OJFord

@OllieFord Я не впевнений, про що ти говориш ...
Володимир Крейвер


15

Відмова: supercat сказав це першим у коментарі.

Власне, більшість MCU неможливо фізично знищити, але їх можна надягати достатньо, щоб почати несправність до тієї точки, в якій він непридатний. У мене є досвід роботи з TSP MSP430, тож ось що:

Ці MCU дозволяють перепрограмувати весь спалах у будь-який час. Знову спалаху можна не тільки переписати мільйони разів, поки не вийде з ладу, але і генератор програмування спалаху на мікросхемі може спричинити збій у нижньому кінці процесора, якщо генератор програмування неправильно налаштований. Це допустимий діапазон частот, дозволений для програмування. Якщо виходити за межі цього діапазону (повільніше), час програмування може стати надмірно довгим і спричинити збій флеш-комірок. Пройшовши лише кілька сотень циклів, можна «спалити» спалахи, спричинивши постійний збій.

Також деякі моделі дозволяють розігнати серцевину так, щоб вона зростала до більшої швидкості за рахунок збільшення внутрішньої напруги. Блок живлення працює від напруги напруги 1,8-3,6 В, але сам сердечник розроблений для роботи на рівні 1,8 В. Якщо ви розігнали занадто багато ядра на силовій рейці 3,6 В, перемикаючи всі введення-виведення, активуючи всі периферійні пристрої та працюючи на палаючих 40 МГц (звичайно, макс. серцевина через перегрів. Насправді деякі хлопці сказали, що вони досягли цих частот (зазвичай DCO виходить з ладу раніше і чіп зберігається, але добре ... можливо).

Просто спробувати?


nit-pick - я вважаю, що більшість флешів гарантовано працюють не більше 10 000 записів, а не "мільйони". Напевно, не варто виправляти, як ви робите точку.
gbulmer

2
Ах ... спалах одягу. Я пам’ятаю, коли вперше у мене виникла помилка, яка викликала постійні записи в EEPROM на фотографії. Потрібно лише 10 секунд або близько того часу. Щоб зрозуміти, що сталося, мені знадобилося хвилину :-)
slebetman

6

За словами stackexchange - "Це дійсно погана ідея залишати вхідний штифт MCU плаваючим?"

Він описує кілька обставин, за яких мікросхему може пошкодити штифт відкритого ланцюга. Редагувати: приклад продуктів Spansion Analog and Microcontroller Products :

4.1 Портовий вхід / невикористані цифрові вводи
/ виводи PIN-кодів Настійно рекомендується не залишати цифрові штифти вводу-виводу без з'єднання, поки вони перемикаються на вхід. У цьому випадку ці штифти можуть перейти у так званий плаваючий стан. Це може спричинити високий струм ICC, що несприятливо для режимів низької потужності. Також може статися пошкодження MCU.

Умовою у цьому питанні є саме шпильки відкритого кола.

Таким чином, наше завдання полягає в тому, щоб керувати , що з травня в буде пошкодити штифт. Я вважаю, що цього достатньо, щоб вийти за рамки "перешкод".

Один з механізмів, визначений у цій відповіді, - це введення вхідного штифта до напруги середнього значення, де два допоміжних транзистора обидва є "включеним". Працюючи в такому режимі, контактний інтерфейс може нагрітися або вийти з ладу.

Вхідний штифт має дуже високий опір, а також є конденсатором. Імовірно, їх достатньо з'єднання між сусідніми штифтами, що перемикання сусідніх штифтів може досить швидко загнати заряд на вхідний штифт і підштовхнути його до цього «гарячого» стану. Чи може половина штифтів вводу / виводу, що приводяться в цей стан, нагріти мікросхему достатньо, щоб завдати шкоди?

(Чи існує режим, коли ємність відкритого штифта може використовуватися як подвійник напруги? Хм.)

Я також думаю, що пошкодження спалаху достатньо. Я думаю, що це досить погано, щоб зробити чіп марним.

Це не потрібно, щоб це було всім спалахом, а лише сторінка, яка містить вектори включення, RESET тощо. Обмеження на одній сторінці може зайняти кілька десятків секунд.

Я мав вказівку, але не має надійних доказів), що для деяких MCU це може бути гірше. Я відвідав презентацію пару років тому. Хтось запитав, чому конкуренти пропонують деталі зі значно більшими флеш-циклами. (Великий неназваний виробник MCU) ведучий заявив, що вони застосували набагато більш консервативний підхід у своїх специфікаціях для флеш-пам’яті. Він сказав, що їх гарантія була визначена при значно більш високій температурі, ніж це було промисловою нормою. Хтось запитав "так що". Доповідач зазначає, що у кількох виробників вироби будуть значно менші терміни перезапису, ніж їх частини при тих же темпах, що і раніше. Мій спогад у 5 разів стане <1x. Він сказав, що це дуже нелінійно. Я вважав, що це означає, що програмування на 80С замість 25С було б "поганою справою".

Отже, перезапис флеш-пам’яті у поєднанні з дуже гарячим чіпом може також зробити його марним менше ніж за 10 секунд.

Редагувати:
Я вважаю, що «звільнити синій дим від смерті» - важче обмеження, ніж потрібно. Якщо будь-яка з: контактна схема RESET, детектор коричневого виходу, схема включення живлення, RC або кристалічний генератор (і, можливо, кілька інших ланцюгів) можуть бути пошкоджені, мікросхема буде непридатною.

Як зазначали інші, розбиття спалаху також вбило б його непоправно.

"Дим" звучить вражаюче, але менш очевидні смертельні напади все ще є смертельними, і набагато складніше їх виявити.


5

Одним з потенційних джерел такого руйнування є замикання SCR, де ненавмисні (внутрішні) транзистори в мікросхемі збираються разом, щоб утворити своєрідний TRIAC, який потім може потонути багато струму. Це може легко продути з'єднувальні дроти, і я навіть бачив пристрої з пластмасовими корпусами, помітно викривленими через тепла.

Типовою причиною є введення (навіть на мить) введення вище або нижче рейки подачі або наземного відповідно, але я думаю, ви могли б побачити це, якщо вхід залишився плаваючим. І тоді не важко уявити схему, де плаваюча вхідність контролюється програмним забезпеченням (хоча це було б дуже дурною справою).


4

МОЖЛИВО, що програмне забезпечення, навмисно написане для цілей, орієнтованого на дуже конкретний процесор, може бути в змозі змусити розгону до точки, в якій процесор перегріється. За умови, звичайно, що процесор містить програмно-налаштовані регістри управління тактовою системою.

Звичайно, НЕ можливо, що ВСІ процесори можуть бути пошкоджені таким чином. Якби це було правдою, у нас були мільярди Z80s і 6800s та 6502s, які були прокладені в сторону незрозумілими тировими написами програмного забезпечення назад, коли ми ще вводили машинний код вручну, роблячи безліч випадкових помилок.


2
Вам не потрібен доступ для налаштування годинника. Вам просто потрібно запустити програмне забезпечення таким чином, як не передбачав дизайнер процесора. Ось якийсь код, який намагається досягти теоретичних 4 FLOPS за цикл на процесорі серії Intel Core: stackoverflow.com/questions/8389648/… . Відомо, що цей код перегріває процесори.
slebetman

1
Це пов’язано з програмами "вірусу живлення" ?
davidcary

1
@davidcary, це абсолютно новий термін для мене. Хоча я мав на увазі не серію інструкцій, що голодують на годинник, а саме про фактичну зміну тактової частоти (деякі процесори підтримують програмний контроль над тактовою частотою шляхом маніпулювання контрольними регістрами) на більш високу частоту, ніж ЦП або його радіатор. може мати справу.
TDHofstetter

3

Це моя запис про зруйнування мікроконтролера з якомога менше деталей ...

Просто перемкніть вихідні штифти на кілька кГц!

Ви все одно можете не бачити диму, хоча це залежить від внутрішнього режиму відмови.

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

- редагувати, додано 22 серпня--

Тепер я не думаю, що ви можете зіпсувати мікроконтролер за вказаними критеріями. Але ви можете ЛЕГКО зіпсувати зовнішню схему з неправильним кодом. Приклад, який спадає на думку, - це простий перетворювач прискорення, який я нещодавно розробив ... просто призупинення коду під час налагодження могло коротко встановити індуктор на землю через MOSFET. POOF


2
Я не хочу бути "тим хлопцем", але припущення №1: "Жодна зовнішня схема не підключена"
Radian

1
Ти - "Той хлопець". Підтекст цієї відповіді - "Ні, ви не можете зіпсувати подібний чіп".
Даніель

2

З точки зору звичайного коду в режимі користувача, я не думаю, що ви можете написати щось, що порушить чіп.

Однак я пам’ятаю дні мікропроцесорів, які могли бути знищені менше ніж за хвилину чи навіть секунди, якби тепловідвід відпав. Потім вони додали схеми термічного детектування, які б відключили годинник, якщо деталь нагрілася. Тепер, коли ми можемо поставити набагато більше транзисторів, ніж можна використати одразу, мікросхеми здатні виробляти більше тепла, ніж тепловідвід може розсіюватися, а його керування живленням та теплові ланцюги, які захищають його. Наприклад, див. Intel Turbo Boost 2.0. Тому здається, що цілком можливо розплавити мікросхему, якщо ви зможете обійти або підвищити ліміт управління живленням і тепловим контуром. Отже, якщо вони знаходяться під контролем програмного забезпечення (не маю ідеї; можливо, це потребує оновлення BIOS?), Тоді ви можете запустити купу паралельних циклів "нічого не робити" разом з інтегрованою роботою GPU, а також апаратним декодуванням і кодуванням H.264, і все, що може зробити чіп, все відразу, поки чіп не перегріється і не викине чарівний синій дим.


2

Я найбільше знайомий з процесорами STM32, тому вони найбільше стосуються цієї родини. Але подібний підхід можливий і для інших процесорів:

  1. Існує постійний режим захисту від запису. Тож якщо ви програмуєте цей біт та якусь непотрібну програму на FLASH, MCU більше ніколи не можна використовувати. Я не знаю, чи вважається це «стримуючим», але воно передбачає постійний апаратний механізм.

  2. Шпильки програмування можна налаштувати як GPIO. Оскільки годинниковий штифт керується пристроєм програмування, це може бути використане для спричинення короткого замикання. Швидше за все, він би зламав той єдиний штифт, який, будучи шпилькою програмування, був би дуже поганим.

  3. Як і згадував dirkt, PLL можна використовувати для розгону процесора. Це може призвести до його перегрівання або пошкодження іншим способом.


1

Хто коли-небудь говорив, що це не розуміє, наскільки процес проектування таких чіпів. Це не означає, що проскакування не відбувається і те, що висвітлення регресії та кутових випадків кодом іноді пропускає речі, але заявляти, що ВСІ чи навіть більшість процесорів мають цей недолік, є логічно сумнівним.

Просто запитайте себе, що відбувається, коли перекриття шафи перевищує вимоги до часу (якщо припустити, що він не перегрівається). чіп виходить з ладу і, можливо, пошкоджує пам'ять і навіть доступ до жорсткого диска, але принципово процесор знову запустить резервну копію і навіть запустить ОС знову, якщо пошкодження буде виправлено. То який же правильно розроблений мікрокод може спричинити БОЛЬШЕ порушення, ніж цей сценарій? - відповідь, швидше за все, ніхто.

TLDR; У всіх процесорах є така помилка - НЕ


Я вважаю, що деякі / більшість мікроконтролерних процесорів (за обсягом, а не за значенням) не мікрокодуються. Тож чи це оскаржує ваше припущення?
gbulmer

Ні, незалежно від того, розробляєте ви секвенсор або осередок з фіксованою метою, регресії та обмеження / тести на дизайні будуть жорсткими.
заповнювач

Якби синій дим мав місце, процесор так чи інакше перегрівався б. Або, переживаючи дуже високу напругу, відчуваючи дуже високий струм, відчуваючи зворотну полярність або відчуваючи занадто високу напругу, транзистори можуть перемикатися на занадто високій частоті. У програмному забезпеченні можливий лише останній метод. Процесори, що працюють нижче приблизно 500 МГц, навряд чи загинуть через перегрівання програмного забезпечення, але я бачив, як процесори гинуть через перегрівання програмного забезпечення. Припущення, яке ви зробили, саме те, чого не слід.
slebetman

@slebetman ви тут плутаєте дуже багато речей. Як можна отримати "зворотну полярність" за допомогою програмних інструкцій? як можна отримати "занадто багато комутацій на занадто високій частоті", чи є магічний недолік у всіх мікросхемах, які перетворюють їх на масові паралельні трубопроводи виконання?
заповнювач

@placeholder: Я сказав, що ви не можете отримати зворотну полярність за допомогою програмних інструкцій. Ви читали мій коментар?
slebetman

1

Я вважаю, що, звичайно, можливо фізично знищити мікроконтролер (MC) за допомогою програмного забезпечення. Все, що потрібно, - це комбінація МС для виконання "щільного" циклу інструкцій, що спричиняє 100% використання, та "несправного" радіатора, який дозволяє накопичувати тепло всередині мікросхеми. Від того, чи буде відмова тривати секунди, хвилини чи години, буде залежати від того, наскільки швидко накопичується тепло.

У мене портативний комп'ютер, яким я можу користуватися ним лише на 50% безперервного використання. Якщо я перевищую це, комп'ютер вимикається. Це означає, що при 50% використанні температура MC нижче встановленої тригерної точки. Зі збільшенням використання температура MC збільшується до досягнення тригерної точки. Якщо ланцюг термічного вимикання не працював (або не мав), температура МС продовжуватиме зростати, поки вона не зруйнується.


0

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

#include <avr/io.h>

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

Код, наведений вище, змушує MCU підштовхувати PB2 високо, а PB4 низько витягувати, і це створює коротке замикання від VDD до PB2 до PB4 до GND і швидко драйвери портів PB2 та / або PB4 будуть смажитися. Коротке замикання може бути невинною помилкою, як випадковий паяльний міст.


Я скептично налаштований, що це спрацює. Штифти IO, як правило, не можуть джерело або заточують велику кількість струму. Транзистори драйверів IO обмежують струм.
Адам Хаун

@AdamHaun Проблема полягає в тому, що не існує поточного обмеження. Тут відбувається те, що ця схема може спалити ці транзистори.
Макшон Чан

Обмеження струму відбувається від розміру та напруги затвора на вихідних приводних транзисторах. Можливо, 5V AVR може вигоряти драйвери, але, дивлячись на типові діаграми міцності водія ATMega, 3В Vcc короткочасні два штифта можуть навіть не перевищувати абсолютний максимальний струм штифта. І струм знижується при високій температурі! MCU з меншою потужністю, ймовірно, буде добре.
Адам Хаун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.