"Розгін" AVR


12

У таблицях даних AVR у розділі "Електричні характеристики" ви зазвичай знайдете такий графік (цей із ATMega328):

введіть тут опис зображення

Я бачив конструкції, які, здається, "працюють", але працюють поза затіненим конвертом. Зокрема, я бачив конструкції 3,3 В (Arduino), які працюють на тактових частотах із зовнішнього кристала 16 МГц. Зрозуміло, що це поза специфікою. Які практичні негативні наслідки бігання за межі цього конверта?


13
Якщо ви будете запускати це лише sortof у специфікації, то він буде працювати лише сортоф.
Олін Латроп

Може здатися німим, але ви не могли замінити XTal?
Хоссен

Не дуже гарна ідея, більшість шансів не спрацює, і все одно ви отримаєте дуже мало від додавання під 1 MIPS до 20 MIPS-процесора, вище, ніж я на 100%, AVR вийде з ладу. Ви повинні тримати налаштування та утримувати час для внутрішніх сигналів, макс. Частота. сприймає гірший сценарій у найбільш критичному шляху сигналу всередині AVR, варіації виготовлення можуть зробити один чіп трохи більш незахищеним до розгону, але дуже мало і пам’ятайте, що навіть якщо ядро ​​само працює нормально, це не означає, що периферія буде чи це ви може тиражувати його іншим чіпом з різних партій.
user34920

1
Щоб змінити анекдот: "Якщо вони будуть робити вигляд, що нас чекають у межах специфікації, ми будемо робити вигляд, що працюємо".
nitro2k01

Це може бути німим питанням, але я думав, що всі AVR Arduinos працювали на 5В, за винятком Mini Pro-3.3V, який працює лише на 8 МГц ... чи є більш швидка 3.3V модель, яку я не бачив?
Жуль

Відповіді:


42

Як зробити життя цікавішим 101:

  • Якщо вам все одно

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

    то обов'язково запустіть деталь за межами специфікацій виробника

Ви отримуєте те, за що не платите.
Якщо у вас є голова 10 доларів, придбайте шолом 10 доларів.

Це може часто спрацювати.
Іноді це може не спрацювати.
Можливо, не очевидно, що іноді це не працює.

  • Розділ зазвичай може спрацювати
  • Зазвичай може прийти стрибок.
  • Таблиця може бути правильно оглянута.
  • Значення АЦП може бути правильним.

    Чи ні

    введіть тут опис зображення


4
я люблю цю відповідь lol
vicatcu

2
Це дивовижно.
Андрій Віхров

6
Насправді, якщо у вас є 10 доларів голови, ви повинні придбати шлем шаблону $ 10 * ймовірність_фатастрофічного_файлура.
Нік Джонсон

4
Я знайшов свої нові шпалери
Rick_2047

4
Це геніально: "Якщо вам все одно (...), що ваш клон Segway лише зрідка робить обличчя рослинами без очевидних причин"
Каміль

14

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

  1. У багатьох випадках швидкість виконання обмежується часом відгуку флеш-масиву, з якого процесор зчитує код. Якщо занадто швидкий запуск процесора викликає помилку читання випадкових записів тут чи там, це може змусити процесор виконувати зовсім інший код від призначеного. У багатьох програмах навіть одноразова помилка читання може докорінно змінити поведінку; рідко практично намагатися робити будь-які прогнози щодо того, що може статися в таких випадках. Найкраще, що можна зробити в деяких випадках, - це "обладунок" певними частинами програми, щоб зробити махове виконання неправдоподібним. Наприклад, можна залишити захищений EEPROM, доки він не захоче записати його, а потім використовувати код на зразок:
    uint32_t eep_checksum, eep_addr, eep_data;
    
    #define EEPROM_WRITE (адреса, дані, предикат) \
      eep_checksum = 0xC0DEFACE, eep_addr = (адреса), eep_data = (дані), \ 
      eep_checksum + = eep_addr + eep_data, ((предикат) || HARD_CRASH ()), \
      eep_checksum + = (0xCAFEBABE - C0DEFACE), eep_do_write ()
    
    void eep_do_write (пустота)
    {
      ENABLE_EEPROM_WRITE_HARDWARE ();
      if (eep_checksum! = eep_addr + eep_data + 0xCAFEBABE)
      {
        DISABLE_EEPROM_WRITE_HARDWARE ();
        HARD_CRASH ();
      }
      DO_EEPROM_WRITE ();
      DISABLE_EEPROM_WRITE_HARDWARE ();
    }  
    
    Це малоймовірно, що програма eeprom_write буде намагатися записувати дані, якщо не буде виконано "eep_checksum = 0xC0DEFACE" перед завантаженням адреси та даних. Після виконання цього присудок перевірятиметься на дійсність перед пристосуванням контрольної суми до належного значення та викликом процедури eeprom_store.
  2. Окрім чітких ризиків, спричинених неправильним кодом, ще одним джерелом потенційної випадкової поведінки є метастабільність. Зазвичай на будь-якому циклі кожен фліп-флоп буде застібати або високий, або низький. Якщо, однак, вхід до фліп-флопу змінюється так само, як приходить годинник, він може протягом деякої довільної тривалості виводити дивні речі, які можуть довільно переходити між високим і низьким, в будь-якій схемі, до наступного циклу годин; цілком можливо, що деякі пристрої вниз за течією від фліп-флопа побачать його як "високий", а інші - "низький". Як правило, процесори покладаються на багато пристроїв, які домовляються про те, що вони робитимуть. Якщо під час виконання інструкції "decrement-and-branch-if-not -рівня", а деякі схеми вважають, що слід брати гілку, а інші -

Виробники задають робочі параметри для процесорів таким чином, що в межах цих параметрів процесори будуть просто працювати. Натискання предметів за межі цього конверта може знизити процесор до 99,9999999 надійним. Це може здатися не надто злим, але намагатися діагностувати процесор, який робить щось довільно неправильно раз на хвилину або близько того (фігуруючи 16 МГц), не цікаво.


2
Було б добре відзначити, що броня EEPROM просто робить повне гальмування пристрою статистично менш вірогідним, це не робить багато для того, щоб зробити неправдиве виконання менш ймовірним. Тим не менше, це здається гарною політикою. Я здивований, що 9 дев'яти надійностей мають таку велику ймовірність виходу з ладу за одну хвилину всього на 16 МГц.
Кевін Вермер

@Kevin Vermeer: ​​Часто важко переконатися, що пристрій ніколи не працюватиме з його безпечної робочої області, враховуючи можливості ослаблення джерела живлення, електростатичних подій тощо. Бронювання EEPROM не розроблене для того, щоб зробити помилкове виконання більш імовірним - -ілюстративний спосіб мінімізації наслідків. Подібні методи часто корисні для коду, який оперує зовнішнім обладнанням. Не слід покладатися на код для критично важливих для безпеки систем, але, наприклад, виробник етикеток може використовувати логіку, як описано вище, для захисту елементів керування ярликами, тому випадкове виконання не знищить 5 доларів на складі етикетки.
supercat

Щоб було зрозуміло, я говорю конкретно про мікроконтролери Atmel AVR - які сильно відрізняються від процесорів загального призначення ...
vicatcu

2
@vicatcu: Чи існує якийсь конкретний спосіб, коли ви думаєте, що вони відрізняються від PIC, 8x51, 68HC05, ARM тощо? Або, з цього питання, більш старі процесори, такі як 6502 чи Z80? У сучасних процесорах розгін може спричинити саморуйнівний перегрів, але на менших або повільніших процесорах це не проблема з будь-якою швидкістю, де пристрій мав би шанс працювати.
supercat

3

Спрощена відповідь на ваше запитання:

Робота за межами "зони безпечної швидкості" може призвести до нестабільності роботи вашої системи. Що це означає? Неправильні результати обчислення, скидання мікроконтролера тощо.

Якщо ви хочете зробити це просто для розваги, вам слід переглянути ці сторінки / статті:

Розгін Arduino з охолодженням рідким азотом. 20-65,3 МГц при -196 ° C / -320 ° F

ATmega328 розгін (30 МГц)


3

Один з питань, про який ще не було сказано, що менше стосується роботи на дійсних частотах в недійсних діапазонах напруги (16 МГц при 3,3 В), але більше, ніж для роботи на недійсних частотах у допустимих діапазонах напруги (24 МГц на 5 В), - це тепловиділення.

Кожен раз, коли ворота в мікросхемі включаються або вимикаються, він розсіює тепло. Затвор, що складається з MOSFET, діє як змінний резистор у період між ВКЛ та ВИМКНЕННЯ, або ВИМКНЕНО та ВКЛ. Цей резистор, звичайно, розсіює тепло. Чим частіше він перемикається, тим менше часу між перемиканнями для того, щоб тепло виходило з мікросхеми, і ви ризикуєте накопичити тепло.

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

Найвища номінальна швидкість мікросхеми вибирається таким чином, щоб чіп міг надійно розсіювати свою теплову енергію при дійсних робочих умовах (тобто, температурі навколишнього середовища, як правило, максимум 85 ° С або 105 ° С, наприклад). Перевищення цієї частоти може призвести до перегріву мікросхеми.

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

Інша річ, яку слід врахувати, - це зниження тарифів. Сигнали тактового сигналу (та й інші сигнали теж) потребують часу, щоб піднятися або впасти на потрібний рівень. Якщо внутрішня частина мікросхеми означає, що сигнал синхросигналу займає, наприклад, 15 нс, щоб піднятися від НИЗКОГО до ВИСОКОГО, і ви спробуєте встановити його з частотою, де високий період, наприклад, 42нс (24 МГц), залишає лише 27 нс дійсних тактових годин період залишився. Це лише 64% годин, що насправді є годинниковим сигналом - решта - сміття. Те саме для IO-штифтів. Такі речі, як виходи тактових частот SPI, будуть обмежені швидкістю скорочення штифта IO, тому, якщо ви розігнали чіп, щоб отримати швидший SPI, ви знайдете, що речі не завжди йдуть так, як було заплановано, як хороша квадратна хвиля, яку ви очікуєте від тактового виходу більше не квадратний.


1

Пристрій може не працювати при деякій комбінації напруги / температури.


враховуючи , що вона робить роботу при певній напрузі / температурі (3,3 і 25 ° С ), робить годинник просто працювати уздовж кордону , а не номінальної частоті кристала? "може не спрацювати" дивовижно невизначено ...
vicatcu

@vicatcu - "Жахливо розпливчастий ТОЧНО * специфікація, яку ви отримаєте. Можливо, не буде працювати" - це ** ТОЧНО специфікація. НА межах кордонів буде працювати. Отже, ви можете бути впевнені, що є певний запас безпеки. Наскільки великий? Зробіть свій день ...
Рассел Макмахон

ха-ха, я ніколи не розробляю специфікацію, я просив це бути трохи провокаційним
vicatcu

@vicatcu: Іноді здається, що майже неможливо уникнути проектування принаймні номінально поза специфікацією. Наприклад, якщо два пристрої задають VOut (Max) і VIn (Max) як VDD, а один підключає вихід кожного з входів іншого, навіть якщо вони підключені до тієї ж рейки, я не подивіться, як можна гарантувати, що миттєвий перехідний струм в одному пристрої не міг змусити його ВДД впасти навіть мікровольт нижче напруги, що виводиться іншим пристроєм. Якщо це було зроблено, це може перевищити заданий робочий стан, що вхід не повинен перевищувати VDD.
supercat

1
@vicatcu: Звичайно, я думаю, що більшість інженерів вважають, що спосіб фізично сконструйованих пристроїв майже гарантує існування принаймні декількох мілівольт толерантності до таких речей, але багато аркушів даних не вказують жодної. Не знаю чому. Я можу зрозуміти, що виробник не бажає вказувати щось близьке до того, що сьогодні приймуть деталі без проблем, але уточнювати щось буде здавалося б кращим, ніж нічого не вказувати.
supercat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.