Присоединюсь. 1 лайк - 1 факт про микроконтроллеры

favorite 272
message 131

0x00. Поехали. Давно идёт война между домами, кто зовет микроконтроллеры, микропроцессоры или системы на кристалле (System-On-Chip) —

— по факту, точная разница перестала существовать лет 30 назад, а существующий ассортимент не вписывается ни в одну из точных классификаций

0x01. Долгое время в прикладных применениях рулили 8-битные микро. Процессоры уже были и 32, и 64, но эти сохраняли консервативность

.. всё, что можно представить, от вендинговых аппаратов до продвинутых игрушек, управлялось 8-битными микроконтроллерами. И продолжает!

0х02. Самый массовый и распространённый микро - это Intel 8051 (8 бит). Не очень быстрый, но очень надёжный, и простой по микроархитектуре

0х03. Микропроцессор Intel 8051 пережил дичайшее количество перевыпусков, от оригинальной архитектуры осталось, пожалуй, только ядро

0х04. На рынке (Китай) существует огромное их разнообразие с самым фантастическим набором периферии, от сканера до USB-контроллера

0х05. Китайцы их пихают вообще во всё, что можно. Если вы видите какой-нить noname-чип, 99% это это реинкарнация 8051, но "переточенная"

0х06. В перевыпусках 8051 менялись даже тайминги операций. Современное ядро 51го элементарно реализуется даже в простенькой ПЛИС (если надо)

0х07 "Современный" китайский 51 это до сотни мегагерц частотой, под завязку регистров внешних операций, кастомная периферия на кристалле

-- угадайте, какой чип будут в ближайшем будущем ставить в китайские секс-игрушки? никогда не догадаетесь!

0x08. 51й такой древний и такой популярный, что был выпущен даже его советский аналог, на советском же техпроцессе и сырье - КР1816ВЕ51

0х09. Несмотря на то, что везде пишут про компилятор С, по факту эффективно использовать этот микро можно было только из-под ассемблера

0х0a. Отчасти этим можно было объяснить такую консервативность: библиотеки микропрограмм на ассемблере - ценные, полезные, переписывать лень

0х0b. Одной из компаний, которая лицензировала ядро i51 и стала выпускать свои микроконтроллеры, стала AVR. Её расцвет пришёлся на 199х-200х

0х0с. Где-то в 95-96 году компания разработала RISC-архитектуру имени себя, и стала выпускать уже свои процессоры. И они обрели популярность

0х0d. Наверное, не стоит говорить, что это была 8-битная архитектура. В то время на 16-битные и выше не смотрел почти никто -- "НЕ НУЖНО"

0х0e. АVR учли проблемы предшественников: микро стал эффективно программироваться на С, и при этом его ассемблер был прост и удобен

0х0f. Кроме того, AVR предложили развитую периферию, перепрограммируемый ввод-вывод, three-state состояние пинов. И это всё за меньше $/чип!

0х10. Неудивительно, что все угорели по AVR, а их моделей выпустили огромную гору! Кстати, дико популярный сейчас Arduino построен на AVR

0х11. Факт: твиты с фактами особо не читают. В факте 0х0b компания Atmel была названа "компанией AVR", что неверно

0х12. Названия чипов у Atmel достаточно неконсистентны. Atmega328 и ATMEGA32U4 это, считай, один и тот же чип. Надо смотреть внимательнее

0х13. Почему я пишу такие детали? Потому что рано или поздно конструкторов типа ArduinoIDE становится мало, и тогда начинается МЯСО

0х14. В связи с "мясом" факт - если вы планируете отсидеться в окопе ArduinoIDE, то фиг вам. Всё равно придётся освоить avr-gcc тулкит

Вы тут, наверное, поняли: если вам нужен цифровой кастом, то: - берёшь блять ПЛИС - суёшь в него ядро i51 на HDL - чувствуешь себя НОРМАЛЬНО

0x15. Компанию Microchip Technology я страстно недолюбливаю, поэтому в данной ленте не будет ни одного твита про чипы семейств PIC

0х16. На большинстве современных чипов (неважно какого семейства) есть EEPROM -- настроечки можно хранить прямо в нём при отключении питания

0х17. Память большинства микроконтроллеров -- сделана по технологии SRAM. Это значит, что она может работать на сколь угодно низкой частоте

-- звучит не как то, чем можно гордиться, НО: это значит, что можно не тратить энергию

0х18. Микроконтроллеры -- это про энергосбережение. Именно поэтому у современных микро существуют десятки режимов энергосбережения

0х20. Энергосбережение рулится частотой. Поэтому у многих микро её можно настроить, или выбрать источник синхронизации

-- меньше частота, меньше тратится энергия. Внешний генератор -- значит, свой можно отключить и не тратить энергию

Это был 0x19! https://t.co/DqWbzRu9Iw

0х21. Чтобы запрограммировать микро, нужен программатор. Без вариантов. Его можно купить, можно собрать на другом микро. Как же у Arduino?

0х22. Arduino пользуется хаком: бутлоадер всегда сидит в микроконтроллере, прикидывается программатором и пишет программу на свободную часть

0х23. Помимо всех способов есть и хардкорные. AVR можно нахрен стереть, приложив к спец.выводам 15-22 вольта и скомандовав ГОРИ, ТВАРЬ

0х1a. Себестоимость деталей на ардуино - порядка 80-160 рублей. Цена в рознице - 350-700р. Как обычно

0х1b. Собрать самостоятельно клоны Arduino -- просто, если руки прямые. Основаня проблема в том, что детали в розницу золотые

0х1с. Широко доступный и известный 16-битный микроконтроллер - это msp430. Вообще, именно 16 разрядов там что-то не прижились

0х1d. Заодно, этот микроконтроллер один из самых экономичных, а так же отличается ортогональной системой команд, похожей на ТОТ САМЫЙ PDP-11

0х1e. На этом перечень преимуществ этого микроконтроллера и заканчивается. Медленный, мало памяти, да ещё и сделан TI. Ужас-ужас

0х1f. Cемейство DSP типа TMS320 тексасу удалось гораздо лучше. Но мы о них не будем. Так же TI приобрел ARM-лицензиата. Тоже не будем о них

-- если интересно, контора звалась Luminary Micro. Теперь этот продукт известен как семейство TI Tiva. Сменили имя и удалили из интернета!

0x24. Если попробовать порулить нагрузкой (моторчиком, например) прямо с ноги микро, то он, скорее всего, сгорит. Или выгорит одна нога!

0х25. Суть в том, что токовый предел большинства чипов ~50mA. Всё, что больше -- это короткое замыкание. Нужен токовый драйвер (чип такой)

0х26. Расчитали, что у вас 20mA, и поэтому драйвер не нужен? Ок! Но не забывайте, что если выходов у вас не один и не два, перегрев -- ваш

0x27. Самые продвинутые в плане схемотехники и софта для микроконтроллеров вовсе не японцы и китайцы. Самые продвинутые -- итальянцы

0х28. Типичную программу для микроконтроллера правильнее называть "циклограммой" -- обычно она не заканчивается, и работает как "gameloop"

0х29. Т.е. с точки зрения наблюдателя микроконтроллер это симулятор устройства с заданным поведением: READ-EVAL-OUT, и так в цикле

0х2a. Несмотря на цифровую природу, разработка под микро требует понимания аналога. Поэтому начинайте с "Искусства схемотехники" Хоровитца

0х2b. Хобиист-микроконтроллерщик, разбуженный среди ночи, может без запинки назвать номиналы элементов для фильтра по питанию к своему чипу

0х2с. Аналогично называются и артикулы чипов, осуществляющих преобразование 3.3V<->5V (буферы и charge pumps)

0x2d. У многих микроконтроллеров есть встроенный источник опорного напряжений. С его помощью выполняется АЦП (в долях от опорного, по сути)

0х2е. Мало кто знает, что с его помощью можно выполнять трюки похитрее -- например, измерить текущее напряжение питания самого микро!

0х30. Вообще, компании-разработчики предпринимают усилия, чтобы мир отказался от 8 бит в пользу 32 бит. Так будет проще всем

0х31. Современный техпроцесс достиг того, что 32-битный микроконтроллер умеет больше, работает быстрее, стоит меньше, чем 8-битная классика

0х32. Это всё фрустрирует компании так сильно, что некто STM выпустила даже свою оригинальную 8-битную линейку -- чтобы таки влезть в нишу

0х33. Но лично я не видел живого человека, чтобы он строил свой проект вокруг STM8 -- сейчас их используют только как вспомогательный чип

0х34. Итак, мы проскакиваем 16 бит и переходим сразу к 32. Основное, что надо запомнить про 16 бит -- их почти нет на рынке

0x35. Самое важное про 32-битные микроконтроллеры -- это два факта, и их легко запомнить. Нумеро уно -- почти 100% построено на ядре ARM

0х36. Нумеро дуо: ядро ARM гораздо-гораздо сложнее в инициализации и в понимании работы, чем старенький восьмибитный AVR или i51

0х37. Но даже отечественная военочка отказалась от 16битных чипов в пользу 32. Тем более, что есть даже отечественные 32-битные микро

0х38. ARM процессор -- это не чип. ARM это микроархитектура, которую можно реализовать в кремнии и получить свой чип. Её можно себе купить

0х39. По сути ARM -- это как франшиза. Что привело к тому, что десятки и сотни компаний купили себе лицензию на ядро и стали клепать чипы

0х40. Отличия этих камней в том, что поставляется ВМЕСТЕ с ARM-совместимым ядром. Ситуация стала напоминать вон ту, с i51 и периферией

0х3a. Удачные конфигурации микроархитектуры ARM стали носить имена собственные (например, Cortex-Mx, x кодирует конкретные особенности)

0х3b. Наличие аппаратного USB не отменяет того, что придётся кропотливо разбираться, как он работает. + USB в микро обычно забагованы

0х3с. Кстати, титул "Короля багов" заслуженно получает STM32. Это хардварный Мистер Эррата. С первого раза у STM получается примерно ничего

0х3d. Зато! Зато! У STM (и партнёров) самые недорогие и доступные варианты чипов ARM32 (без учёта спецакций у других) в России.

0х3f. Для любителей покликать мышкой -- у STM же самый удобный визуальный конфигуратор (да, да, ARM32 такой сложный, что нужен конфигуратор)

0x40. Конечно, энтузиасты призывают писать весь пролог ARM32-программы руками, чтобы не отрываться от железа. Пусть пишут, не будем мешать

0х41. Призрак бедных и голодных 8-бит преследует так неотрывно, что в ARM32 до сих пор осталось его наследие в виде Thumb-режима (16 бит)

0х42. Thumb это попытка уплотнить код за счёт компактного кода инструкций. Не нужно, почти не используется, но осталось на память

0х43. Современный ARM-процессоры развиваются в сторону удлинения конвейера, увеличения числа ядер, и разработки расширений набора инструкций

0х44. Т.е. относить эти ARM к микроконтроллерам уже некорректно. Но и чистым микропроцессором назвать нельзя, на кристалле полно всего уже

0x45. Поставить *nix на микроконтроллер можно, начиная с 32-битного чипа. В принципе, сгодился бы и 16-битный, но их особо и нет

0х46. Из известных, но незаслуженно забытых микроконтроллеров есть ещё AVR32 (задавлен ARMом), Motorola 68HCxx (вытеснен i51 и AVR)

0x47. Больше всего, наверное, интересует, какой чип стоит взять для хобби. Мой ответ -- берите Arduino и AVR, потом переползайте на ARM

0х48. Arduino сложно запороть, и очень удобен, чтобы убедиться, что микроконтроллеры это не ваше. А 32 бита и 100Мгц для ARM это реальность

0х49. Существуют микроконтроллеры (ядра), которые никогда не оформлялись как микросхема. Пример - NIOS, который используется только для ПЛИС

0х4a. На самом деле, если вы умеете в ПЛИС, то сделать своё процессорное ядро, и даже ассемблер к нему, несложно - это уровень бакалавра

0x4b. На многих 8-битных микроконтроллерах нет операции деления - нужна библиотека. Да что там, на некоторых даже умножение выполняется..

.. аппаратно, т.е. при помощи явного обращения к устройству, которое ещё и инициализировать предварительно надо. welcome to co-cpu world

0x4c. О том, чтобы были цифры с плавающей точкой и прочие "излишества", можно только мечтать. Или реализовывать программно (ОЧЕНЬ МЕДЛЕННО)

*числа, конечно же

0x4d. Вообще, вся разработка под микроконтроллеры это колебания между "БЛЯТЬ ОПЯТЬ НЕ УСПЕЛИ В ТАЙМИНГ" и "БЛЯТЬ ОПЯТЬ НЕ ВЛЕЗАЕТ В РЕСУРСЫ"

0x4f. Поэтому разработчики-микроконтрщики смотрят на этих ваших джава-разработчиков с гигами памяти как на сами знаете что

0x4e. Программу в EEPROM микроконтроллера можно записать примерно от 1 тыс. до 10 тыс раз, прежде чем износится. Вам хватит

0x50. Для внутрисхемной отладки не так давно (лет 10-20 назад) мир наконец пришёл к консенсусу и предложил протокол JTAG. До этого был хаос

0х51. Через JTAG можно заставить микроконтроллер пройти по шагам через программу (вот где SRAM в тему!), а можно даже его перепрошить

0х52. Наличие JTAG не мешает бракоделам из STM и TI предлагать собственные проприетарные, не совместимые с другими, разъёмы и протоколы

0х53. Степень продвинутости разработчика можно проверять, глядя на то, как легко (или нелегко) он оперирует с таймерами и прерываниями чипа

0x54. После ВНИМАТЕЛЬНОГО чтения спеки на кристалл обычно обнаруживается ровно то, что было так необходимо! Не пренебрегайте даташитами

0х55. Важный раздел даташита -- это errata: известные баги, которые никто не будет исправлять в данной ревизии чипа. Тоже стоит проверить

0х56. Например, спеки на чип Atmega полезно читать, даже если у вас Arduino: могут быть исключения и особенности чипа, которые вас подкосят

0x57. На многих старых микроконтроллерах была проблема неуправляемого поведения при колебаниях питания. Мог сам себя рандомно перезаписать!

0x58. Это опасно, и от такого стали по умолчанию защищаться встроенной в чип схемой BOD https://t.co/SkTWapkAD0

0х59. Отдельная интересная область - это цифровая обработка сигналов. Но с контроллером общего назначения там делать, по сути, нечего

0х5a. В связи с набирающим обороты т.н. IoT получат популярность 32-битные контроллеры, пригодные для исполнения даже js!

0х5b. Возможно, это не самый эффективный способ расходования батареи, но зато на модуле уже размещён wi-fi или bluetooth LE

0х5с. Например, nodemcu управляется lua-скриптом, который можно отредактировать в облачном редакторе и залить тут же https://t.co/D3Wmtn9ggf

0x5d. Самая сложная задача в системах на микроконтроллере - подружить его с окружающим миром, который, сука, нифига не цифровой

0х5e. Немалая часть ошибок -- это как раз проблемы с аналоговой частью, на разборки с которой и уходит большая часть времени

0х5f. Тут на помощь поспешили разные Cypress Semi, выпускающие mixed signal processors - чип с встроенной аналоговой частью

0х60. Посмотрите, например, на Cypress PSoCx. Это такая штука, в которой аналоговую часть вы тоже собираете (программируете) из микроблоков!

0x61. Самая распространённая причина, по которой собранная руками схема на микроконтроллере не работает -- "непропай". Учитесь паять, ребята

0x62. Си это не единственный язык, на котором можно писать low-level для микро. Есть качественные компиляторы с Паскаля и даже бейсика

0х63. В 200x под крылом Intel проходил эксперимент по разработке си-подобного языка с ООП времени компиляции. Назывался nesC

0x64. Сейчас материалов по этому языку почти не найти. Вместе с этим языком была разработана и крошечная операционная система - tinyOS.

0x65. Логический анализатор-приставка ("цифровой осциллограф") стоит всего $150, но сильно упрощает жизнь во время наладки схемы

0x66. Сможет ли микроконтроллер на 3.3V пережить подачу 5V на ногу, зависит от производителя. STM деревянные, им похер, Atmel могут сгореть

0x67. Несмотря на то, что микро упакован разной периферией, для прецизионных операций всё равно приходится использовать внешние чипы I/O

0х68. Операционные системы (а скорее, операционные среды) для микроконтроллеров начали писать как только, собственно, появились контроллеры

0х69. Первые микроОС для контроллеров были больше похожи, скорее, на библиотеки примитивов. Т.е. были ближе всего к экзоядерным системам

0х6a. Экзоядерная RTOS это когда ты линкуешь свой код с прологом системы и другими библиотечками, которые дают тебе таймеры, семафоры, IPC..

0х6b. Опять же, в половине исходников этих RTOS можно было найти итальянские фамилии среди автором. Как я и говорил, итальянцы жгут

0х6с. Большинство RTOS носили чисто прикладной характер: мультитаскинг обеспечивал большую composability, чем классическая циклограмма

0х6d. Постепенно наколеночные поделки уступили место тем, за которыми стояли вендоры. Самая известная сейчас это FreeRTOS

0x6e. 10 лет назад FreeRTOS представляла довольно жалкое зрелище. Но её со временем допилили, ввели PAL (platform abstraction level)

0x6f. Так что FreeRTOS теперь можно (в достаточно ограниченном объёме) запустить даже на ATMega. Ну, не саму, а проект с нею

0х70. Для более мощных чипов проблема другая: периферии столько, что без библиотек драйверов не разобраться. Там ОС = библиотеки драйверов

0x71. Типовой MP3-плеер на микроконтроллере делается так: - берётся микроконтроллер - берётся подходящий декодер mp3-аудиопотока ..

0x72. Типовой аудиоусилитель на микроконтроллере делается так: - берётся микроконтроллер - берётся усилитель со звуковым процессором

0х73. В общем, система должна быть понятна. Микроконтроллер это не про операции (это low budget у бедного рыцаря). Микро это про управление

0x74. Банки памяти ушли в прошлое относительно недавно. До этого часто приходилось передёргивать начало сегмента памяти. Бесило ужасно

0х75. Аппаратные таймеры могут работать в дюжине различных режимов, самых изощрённых. Смотрите документацию на ваш конкретный кристалл

0х76. Так как для обработки (фильтрации) большого потока данных микро в чистом виде не применим, стали появляться гибриды микро+FPGA

0x77. Например, гибридом является активно продвигаемый сейчас ZYNQ. На нём стоит мощное ядро Cortex и коммутатор к не самой слабой ПЛИС

0х78. Особенность гибридов mcu+FPGA: в отличие от просто микро, ПЛИС не ставит целью оптимизировать потребление. И обычно греется как тварь

0х79. Кстати, даже на примере ZYNQ можно видеть, что микроконтроллер уже выходит за рамки управления и превращается в Application Processor

>