В предыдущих статьях мы уже немного касались темы требований функциональной безопасности для автомобильной электроники. Очевидно, что отказ автомобильной электронной системы ABS или ECU может привести к тяжёлым последствиям. Для автомобильной электрики/электроники был разработан стандарт ISO26262, который, в частности, содержит требования по отказу и надёжности. По этому стандарту, все устройства делятся на 4 уровня по требованиям, которые приведены в таблице ниже. Таблица из стандарта IS26262 с detection rate для SPF/LF и FIT  ASIL-A ASIL-B ASIL-C ASIL-D SPF Metric Not applicable > 90% > 97% > 99% LF Metric Not applicable > 60% > 80% > 90% Failure rate 10-6 / hour 10-7 / hour 10-7 / hour 10-8 / hour FIT < 1000 < 100 < 100 < 10 В этой статье мы будем рассматривать один из основных управляющих элементов для построения подобных систем, а именно, микроконтроллер. По статистике, ряд электронных устройств для автомобиля строится на микроконтроллерах общего применения, таких как STM32, ESP32 и других. Они подробно документированы, поддерживаются опытными разработчиков, но не слишком подходят для ответственного автомобильного применения. Также ряд производителей выпускает микроконтроллеры, специально предназначенные для автомобильного сегмента. Микросхемы, которые применяются в автомобилях, должны соответствовать квалификации AEC-Q100 и иметь набор документов, связанных с функциональной безопасностью. В частности Safety Manual, в котором изложены требования к дизайну железу и софту, а также расписаны конкретные Safety Mechanisms. К сожалению, в связи с текущей геополитической ситуацией, популярные микроконтроллеры, удовлетворяющие требованиям ISO26262, стали практически недоступны. При этом отечественная микроэлектронная промышленность только набирает обороты в производстве безопасных автомобильных микроконтроллеров. В результате поисков доступных альтернатив мы вышли на китайского производителя Flagchip as Flagship, контроллеры которого обладают достаточно неплохими характеристиками и Safety Mechanisms для реализации автомобильных ECU с уровнем до ASIL-D при доступности для российского рынка. Сейчас в линейке компании Flagchip есть два микроконтроллера серии Raptor (FC4150) и Rex (FC7300), характеристики которых  показаны в таблице:  FC4150x FC7300x Core 1x Cortex-M4 150MHz Up to 6x Cortex-M7 300MHz with Lockstep capabilities RAM Up to 256 KB with SECDED Up to 512 KB with  SECDED Flash 512KB / 2MB with SECDED 4 / 8 MB with SECDED Analog ADC Up to 2 12bit SAR with up to 32 channel per module Up to 2 12bit SAR with up to 32 channel per module CMP Up to 3 comparators with 8bit DAC Up to 3 comparators with 8bit DAC Communication UART Up to 6 with LIN Up to 18 with LIN SPI Up to 4 with 1/2/4 lane Master/Slave up to 8 with 1/2/4 lane with Master/Slave I2S Up to 2 - Network 1 MII/RMII (Only in 2MB version) 1 MII/RMII/RGMII CAN Up to 6 with 3 CAN-FD Up to 10 with CAN-FD Safety ASIL Level Up to ASIL-B Up to ASIL-D Safety Mechanism ECC, 4x CMU, ISM, MAP, AFCB, CRC, WDOG, EIM, ERM, FWM, BIST Lockstep, Triple critical registers, ECC, CMU, FCSMU, PMC, AFCB, CRC, WDOG, EIM, ERM, LBIST, MBIST Operational Conditions Voltage Range, V 3.0 - 5.5 3.0 - 5.5 Temperature range -40 - +125 -40 - +125 Package LQFP 64/100/144/176 LQFP 144/176, MAPBGA 320 Обычно требования к электронному устройству разделяются на программные и аппаратные. Рассмотрим требования к аппаратной части MCU SEooC и отдельно остановимся на реализованных Safety Mechanisms. Механизм HW redundancy является одним из критичных для реализации электронных блоков с уровнем ASIL-D. В отношении вычислительных ядер этот механизм реализуется через избыточность - добавление N ядер, выполняющих одинаковые операции параллельно. При отличии в результатах операции генерируется сигнал Fault. Для ASIL-D является достаточным 2 ядра в режиме Lockstep - оба ядра работают на одной тактовой частоте с одинаковыми входными данными. Наглядно это показано на рисунке ниже: Не менее важным для соответствия требованиям ISO26262 является механизм ECC, обеспечивающий детектирование и/или исправление ошибок. В частности, у микроконтроллеров Flagchip используется механизм SECDED. Также важные регистры имеют трехкратную избыточность, что даёт возможность продолжить работу при повреждении одной копии. За счет этого реализуется принцип мажоритарности. Обычно к требованиям ISO26262 относится мониторинг тактовых сигналов (CMU/CCS), критичных напряжений питания и температуры, так как они являются важными для работы MCU в целом, и могут приводить к "странным" недетектируемым событиям. Рассмотрим подробно отладочные платы на основе безопасных микроконтроллеров FC4150 и FC7300. На плате установлен микроконтроллер с наибольшим количеством периферийных устройств и встроенным Flash - FC4150F2MBS1P144T1A. Также на плате присутствует довольно большой набор периферийных устройств: Количество Функция Компонент Комментарий 1 CAN NXP TJA1042T/3  1 CAN NXP TJA1043T / Infineon TLE6251 С поддержкой Wake / Error detection 2 LIN NXP TJA1021T/20  1 EEPROM BL24C64A-PARC  2  Potentiometer  3  Blue Leds  2  RGB Leds  4  User Keys  1 SPI Flash Gigadevice GD25Q32CSIGR Разделяют общие пины, выбор производится перепайкой 0 омных резисторов на плате. 1 100Base-TX Motorcomm YT8512H 1 100Base-T1 Motorcomm YT8010A Для подключения отладчика используется стандартный для ARM 20pin JTAG разъём с выведенными на него интерфейсами отладки JTAG и SWD. Также на плате присутствуют 3 PLD разъёма с большим количеством User GPIO. Даже по маркировке на плате MOTOR1/MOTOR2 понятно, что они предназначены для управления BLDC моторами, что, впрочем, не мешает подключить на них что-то другое. Также во Flash записана тестовая программа от производителя, которая при запуске пытается поднять линк на Ethernet порту и отправляет сообщения в UART. На плате установлен довольно мощный FC7300F8MDT2A320T1A в BGA корпусе. В этом микроконтроллере установлено 3 ядра: два D-Core LS M7 и один B-Core M7 по терминологии Flagchip. D-Core LS - это как раз безопасные Lockstep ядра. B-Core - обычное M7. Количество Функция Компонент Комментарий 5 CAN NXP TJA1042T/3  1 CAN NXP TJA1043T / Infineon TLE6251 С поддержкой Wake / Error detection 4 LIN NXP TJA1021T/20  1 EEPROM FM24C256EA1SO  2  Потенциометр  3  Blue LED  1  RGB LED  4  Кнопки пользователя  1 SPI Flash Gigadevice GD25Q32ESIGR  1 1000Base-TX Motorcomm YT8531SH / Realtek RTL8211FS-CG  1 1000Base-T1 Semidrive JL3113 SGMII YT8531/RTL8211 Производитель вместе с SDK распространяет свою среду разработки FC IDE на базе opensource Eclipse: Сразу хочу заметить, что мы получили в своё распоряжение версию SDK 1.2.1, поэтому всё нижеследующее относится в первую очередь к ней. В SDK встречаются ошибки, связанные с регистром в именовании файлов, что намекает на использование авторами Windows. Впрочем, всё это легко исправляется. SDK выглядит довольно традиционно - примеры использования различных драйверов и шаблон для сборки проекта. К сожалению, Flagchip не делится библиотеками для работы с HSM, которые поставляются пресобранными в директориях _gcc_libs / _iar_libs соответственно. Также пресобранными поставляется библиотека для работы со встроенной Flash-памятью, которая, впрочем, представляет набор обёрток для функций из ROM, которые описаны в Reference Manual. Также производитель поставляет MCAL библиотеки, но они доступны от производителя только за отдельную плату. Как легко можно заметить, сборка проектов предполагается в IAR, Keil или FC_SDK (среда от  Flagchip на базе Eclipse + GCC), но мы планируем использовать для сборки make + GCC, то требуется небольшая доработка до приемлемого состояния. Нам понадобится arm-none-eabi-  версию gcc. В примерах разработчики подключают в файлы проекта ./Inlclude/_driver_header.h, включающие в себя inlcude нужных драйверов из ./Driver/include, которые включают в себя include из ./HwA/Include, которые включают в себя ./Device/fc/fc4xxx_.h, содержащие уже конкретные структуры и дефайны. ./Template/Sources/main.c мы не будем использовать, напишем свой, который будет конфигурировать клоки и мигать светодиодами:  Для сборки нам понадобятся Startup_FC4150.S и скрипт линкера FC4150_2M_ram.ld, которые мы можем позаимствовать из проекта, который генерируется FC_IDE или любого примера. Тут следует обратить внимание, что файл имеет расширение .S и содержит в себе директивы препроцессора, поэтому собирать его надо gcc.   После сборки всех объектных файлов, линкуем их с использованием скрипта линкера FC4150_2M_ram.ld, в котором код секции text / rodata / init располагается в SRAM с адреса 0x20000000. Заливаем код в SRAM, записываем в регистры PC и SP значения по смещению +0 и +4 соответственно и продолжаем выполнение. Запускаем openocd и наблюдаем за миганием светодиодов на плате. Flagchip производит безопасные микроконтроллеры, которые доступны в РФ и подходят для применения в автомобильной промышленности. Это особенно актуально в текущей ситуации, когда многие компании прекратили поставки собственных микроконтроллеров на наш рынок. С помощью отладочных плат на базе безопасных микроконтроллеров Flagchip можно достаточно хорошо изучить и опробовать возможности данных чипов и убедиться в возможности сборки на них собственных приложений. Применение данных микроконтроллеров может существенно повысить надежность и безопасность устройств автомобильной электроники с учетом их соответствия требованиям ISO-26262.