Автор: Джонни Лю
Заголовок: Генеральный директор компании Dowway Vehicle
Дата: 24 июня 2026 г.
Категория: Автомобильная электроника / Функциональная безопасность / Встроенное программное обеспечение
Table of Contents
Краткий раздел часто задаваемых вопросов
Что означает LBIST на AURIX TC3xx? Это аппаратная самодиагностика, которая проверяет цифровые логические элементы микроконтроллера. Она использует внутренние цепочки сканирования, запускает псевдослучайные тестовые шаблоны и создает уникальную сигнатуру для подтверждения отсутствия скрытых структурных дефектов в оборудовании.
Почему запуск LBIST вызывает «теплый сброс»? Тест сканирования искажает и дезорганизует состояние цифровых цепей. Для сброса этих некорректных состояний и загрузки системы в чистом, предсказуемом состоянии необходима «тепловая перезагрузка».
Где найти золотой сертификат для теста? Это статическое, предварительно вычисленное 32-битное значение. Сигнатуру для конкретного количества и частоты шаблонов можно найти в приложении «Блок управления системой (SCU)» руководства пользователя Infineon AURIX TC3xx.
Почему это руководство важно (Угол ISO 26262)
В конструкциях автомобилей, критически важных с точки зрения безопасности (от ASIL-B до ASIL-D), необходимо выявлять случайные аппаратные неисправности. Особенно опасны скрытые неисправности. Это неисправности, которые остаются незамеченными во время обычной езды, но могут привести к нарушению правил безопасности при возникновении второй неисправности.
Встроенная функция самотестирования логики (LBIST) — это ключевой механизм обеспечения безопасности оборудования.SM:MCU:LBIST) на AURIX TC3xx. Он нацелен на метрику скрытых ошибок (LFM). Поскольку он проверяет цифровые логические элементы ядра, успешный запуск LBIST позволяет нам проверить ЦП, шину и контроллеры безопасности при загрузке. Это устраняет необходимость в медленных и сложных программных проверках логики на более поздних этапах.
Быстрое сравнение тестов для самотестирования стартапов
Чтобы ваша разработка оставалась чистой, не путайте LBIST с другими встроенными тестами на этой платформе:
| Механизм испытаний | Что именно проверяется | Причины перезагрузки? | Когда это запускать | Основная цель |
| ЛБИСТ | Внутренняя цифровая логика | Да (Теплая перезагрузка) | Ранняя загрузка (холодный PORST / пробуждение в режиме ожидания) | Обнаруживает структурные неисправности затвора для LFM. |
| МБИСТ | SRAM и флэш-память | Нет (Настраиваемый) | Запуск или среда выполнения | Обнаруживает сбои в работе ячеек памяти и адресных линий. |
| МОНБИСТ | Мониторы напряжения PMS | Нет | Ранняя загрузка | Проверяет пути резервного копирования монитора напряжения. |
| FwCheck | Конфигурации ключевых регистров | Нет | После сброса / Во время выполнения | Регистр проверок и следы встроенного программного обеспечения |
Как TC3xx LBIST работает в аппаратном обеспечении
Цепочки сканирования и сжатие сигнатур
LBIST основан на структурном сканирующем тестировании. В процессе производства разработчики микросхем соединяют внутренние триггеры вместе, образуя последовательные регистры, называемые сканирующими цепочками.
+---------------------------------------------------------------------------------+
| AURIX TC3xx SCU |
| |
| +-------------------+ Test Patterns +-------------------------------+ |
| | LFSR Engine |====================>| Internal Scan Chains | |
| | (Seed & Patterns) | | (Registers linked in series) | |
| +-------------------+ +-------------------------------+ |
| || |
| || Capture & Shift |
| \/ |
| +-------------------+ Final Signature +-------------------------------+ |
| | LBISTCTRL3 |<====================| MISR Compressor | |
| | (SIGNATURE) | | (Compresses output stream) | |
| +-------------------+ +-------------------------------+ |
+---------------------------------------------------------------------------------+
Аппаратное обеспечение проходит чистый, автоматизированный цикл:
- Генерация шаблонов: Линейный регистр сдвига с обратной связью (LFSR) создает псевдослучайные тестовые шаблоны на основе начального значения ( Семя).
- Перемещение внутрь: Контроллер переносит эти шаблоны во внутренние цепочки сканирования.
- Этап захвата: Система использует один или несколько функциональных тактовых генераторов. Логические элементы обрабатывают сигналы, а триггеры захватывают выходной сигнал.
- Сдвиг наружу и сжатие: Захваченные данные поступают в многовходовой регистр подписи (MISR), который сжимает длинный поток битов в один. 32-битная подпись.
- Оценка: Программное обеспечение сравнивает эту сигнатуру с эталонным значением, чтобы подтвердить исправность оборудования.
Что не охватывает LBIST
Учитывайте следующие аппаратные ограничения:
- Аналоговые модули: Он не тестирует аналоговые блоки PMS, EVR или ADC.
- Состав SRAM: Проверка памяти выполняется программой MBIST. Поскольку LBIST шифрует аппаратные данные, она повреждает некоторые регистры блока тестирования памяти (MTU). Ваше программное обеспечение должно создавать резервные копии и восстанавливать значения этих регистров.
Знания о аппаратных регистрах
Настройка теста включает в себя запись в регистры блока управления системой (БИС). Эти записи защищены Safety Endinit (SEINIT) чтобы предотвратить случайное исполнение.
LBISTCTRL0(Управление 0): Содержит избыточные биты запуска (ЛБИСТРЕКиLBISTREQRED), бит сброса контроллера (ЛБИСТРЫ), и флаг завершения (ЛБИСТДОНЕ).LBISTCTRL1(Контрольный образец 1): Устанавливает делитель частоты тестового тактового сигнала (ЧАСТО), логическая структурная схема (ТЕЛО), изменение ограничений скорости для управления текущими скачками (РАЗДЕЛЕНИЕ), и начальное значение LFSR (СЕМЯ).LBISTCTRL2(Контроль 2): Задает количество тестовых шаблонов для выполнения (ДЛИНА).LBISTCTRL3(Контроль 3): Содержит окончательную 32-битную тестовую подпись (ПОДПИСЬ).РССТАТ(Сброс статуса): Отслеживает, как завершилось тестирование, посредствомЛБТЕРМ(тест завершился в обычном режиме) иЛБПОРСТ(тест не был прерван перезагрузкой при включении питания) флаги.
Граница «Теплой перезагрузки»
Аппаратное обеспечение всегда принудительно выполняет «тепловую перезагрузку» системы после завершения теста. Это преднамеренное конструктивное решение.
Поскольку при сканировании через микросхему пропускаются случайные значения, внутренние состояния логических элементов становятся недействительными. Функция «Теплый сброс» очищает все регистры и запускает микроконтроллер из чистого состояния.
Хотя SRAM сохраняет свои данные при «теплой перезагрузке», эта перезагрузка повреждает части MTU. Программное обеспечение должно тщательно обрабатывать этот переход.
Разработка конечного автомата с перекрестным сбросом
Поскольку тест запускает «теплую перезагрузку», вам необходимо разделить драйвер программного обеспечения на две части: Фаза запуска предварительной перезагрузки и Этап анализа после сброса.
+--------------------+
| Power On |
+--------------------+
|
v
+------------------------+
| Read RSTSTAT Register |
+------------------------+
|
Is Cold PORST or Standby Wakeup?
/ \
YES NO
/ \
v v
+------------------+ +--------------------+
| Check Persistent | | Skip LBIST & Boot |
| Context State | +--------------------+
+------------------+
/ | \
START RUN PASS/FAIL (Terminal States)
/ | \_______________________
v v \
[Trigger] [Analyze Signature] v
/ \ +--------------------+
Valid Invalid | Continue app boot |
/ \ +--------------------+
v v
Set PASS Retries < 3?
Clear Flags / \
App Boot YES NO
/ \
v v
Increment Set FAIL
Retry Counter Enter Safe State
Re-Trigger
1. Настройка постоянного хранилища
Для передачи информации о состоянии при «теплой перезагрузке» необходим небольшой блок памяти, который не очищается во время перезагрузки. В AURIX TC3xx мы используем выделенный сегмент памяти. DLMU SRAM настроено на сохранение питания в режиме ожидания.
Вот как можно настроить этот блок памяти в языке C:
typedef enum {
LBIST_STATE_START = 0xA5A5A5A5U,
LBIST_STATE_RUN = 0x5A5A5A5AU,
LBIST_STATE_PASS = 0x3C3C3C3CU,
LBIST_STATE_FAIL = 0xC3C3C3C3U
} LbistState_t;
typedef struct {
LbistState_t state;
uint32_t retryCounter;
uint32_t callerIntentCheck; // Prevents wild triggers via a CRC
uint32_t lastFailureReason;
} LbistPersistedContext_t;
/* Map this struct to a non-initialized retention RAM area */
__attribute__((section(".bss.backup_ram_noinit")))
volatile LbistPersistedContext_t g_LbistContext;
2. Процесс разработки программного обеспечения и этапы его выполнения.
Этап А: Предварительный триггер сброса
- Причина сброса настроек: Читать
РССТАТ. Запускайте тест только в том случае, если сброс был выполнен. Холодный ПОРТС или Режим ожидания Пробуждение. Для сбросов, инициированных программным обеспечением, этот шаг можно пропустить. - Ознакомьтесь с текущим состоянием: Читать
g_LbistContext.state. При холодном запуске инициализируйте это значение.LBIST_STATE_START. - Резервное копирование регистров MTU: Сохраните все критически важные состояния регистров MTU в оперативной памяти для сохранения, чтобы вы могли восстановить их после перезагрузки.
- Настройка оборудования: Отключить прерывания. Разблокировать защиту Safety Endinit.
UnlockSEINIT()Запишите параметры начального значения, частоты и количества шаблонов в файл.LBISTCTRL1иLBISTCTRL2. - Проверка намерения записи: Вычислите контрольную сумму (CRC) конфигурации и запишите её.
g_LbistContext.callerIntentCheck. Это предотвращает случайное срабатывание теста из-за серьезных программных ошибок. - Установить состояние на ВЫПОЛНЕНИЕ: Писать
LBIST_STATE_RUNкg_LbistContext.state. - Избыточный триггер: Писать
1к обоимLBISTCTRL0.LBISTREQиLBISTCTRL0.LBISTREQREDв том же тактовом цикле. - Блокировка ЦП: Войдите в бесконечный цикл ассемблера (
while(1);) и дождитесь завершения аппаратной перезагрузки.
Этап B: Анализ после сброса настроек
- Запись при загрузке: Микроконтроллер загружается. Программное обеспечение считывает данные.
РССТАТи обнаруживает функцию “Теплый сброс”. - Проверить штат: Программа читает
g_LbistContext.stateи обнаруживает, что он установлен наLBIST_STATE_RUN. - Подтверждение намерения: Рассчитайте CRC и сравните его с
g_LbistContext.callerIntentCheck. Если они не совпадают, отметьте ошибку повреждения данных и пропустите тест, чтобы избежать циклической перезагрузки. - Отметьте флаги: Подтвердите это
RSTSTAT.LBTERM == 1,RSTSTAT.LBPORST == 0, иLBISTCTRL0.LBISTDONE == 1. - Подтвердите подпись: Прочитайте подпись от
LBISTCTRL3.SIGNATUREи сравните его с золотым знаменателем.- Если совпадает: Установить состояние на
LBIST_STATE_PASS. Перезагрузите контроллер LBIST черезЛБИСТРЫ. Сбросить флаги холодной перезагрузки вРССТАТЧтобы предотвратить повторный запуск теста при последующих перезагрузках, восстановите регистры MTU и запустите приложение. - Если не совпадает: Запустить логику повторной попытки.
- Если совпадает: Установить состояние на
3. Внедрение продукта C
Вот чистая, готовая к использованию в производственной среде реализация драйвера:
#include "tc3xx_scu_registers.h"
#define GOLDEN_LBIST_SIGNATURE 0x2E4A9F18U // Golden signature from User Manual
#define MAX_LBIST_RETRIES 3U
void Handle_Fatal_Safety_Fault(uint32_t reason) {
// Notify the SMU and transition the ECU to a safe state
while (1);
}
void Execute_LBIST_Evaluation_Sequence(void) {
uint32_t rststat = SCU_RSTSTAT.U;
// Check if the reset source is Cold PORST or Standby Exit
if ((rststat & SCU_RSTSTAT_COLD_RESET_MASK) != 0U) {
// Safe initialization check for retention RAM
if (g_LbistContext.state == 0xFFFFFFFFU) {
g_LbistContext.state = LBIST_STATE_START;
g_LbistContext.retryCounter = 0U;
}
switch (g_LbistContext.state) {
case LBIST_STATE_START: {
Backup_MTU_Configuration();
// Unlock Safety Endinit and write configurations
Unlock_Safety_Endinit();
SCU_LBISTCTRL1.U = (0x1U << 16) | (0x0U << 8) | 0x5A5A5A5AU; // SPLITSH, BODY, SEED
SCU_LBISTCTRL2.U = 0x000003E8U; // LENGTH (1000 Patterns)
Lock_Safety_Endinit();
// Protect against wild software jumps
g_LbistContext.callerIntentCheck = Calculate_CRC32((uint8_t*)&g_LbistContext, sizeof(g_LbistContext) - 8);
g_LbistContext.state = LBIST_STATE_RUN;
// Redundant trigger write
Unlock_Safety_Endinit();
SCU_LBISTCTRL0.U |= (1U << SCU_LBISTCTRL0_LBISTREQ_POS) | (1U << SCU_LBISTCTRL0_LBISTREQRED_POS);
Lock_Safety_Endinit();
// Wait for hardware reset
while (1) {
__nop();
}
break;
}
case LBIST_STATE_RUN: {
// Verify caller intent CRC
uint32_t calc_crc = Calculate_CRC32((uint8_t*)&g_LbistContext, sizeof(g_LbistContext) - 8);
if (calc_crc != g_LbistContext.callerIntentCheck) {
g_LbistContext.state = LBIST_STATE_FAIL;
Handle_Fatal_Safety_Fault(0xFEED0001U);
return;
}
// Verify hardware flags
uint32_t test_done = (SCU_LBISTCTRL0.U & (1U << SCU_LBISTCTRL0_LBISTDONE_POS));
uint32_t normal_term = (rststat & (1U << SCU_RSTSTAT_LBTERM_POS));
uint32_t power_interrupted = (rststat & (1U << SCU_RSTSTAT_LBPORST_POS));
if ((test_done != 0U) && (normal_term != 0U) && (power_interrupted == 0U)) {
uint32_t signature = SCU_LBISTCTRL3.U;
if (signature == GOLDEN_LBIST_SIGNATURE) {
g_LbistContext.state = LBIST_STATE_PASS;
// Reset the controller and clear reset flags
Unlock_Safety_Endinit();
SCU_LBISTCTRL0.U |= (1U << SCU_LBISTCTRL0_LBISTRES_POS);
SCU_RSTCON.U |= SCU_RSTCON_CLEAR_COLD_FLAGS_MASK;
Lock_Safety_Endinit();
Restore_MTU_Configuration();
return; // Continue to main boot
}
}
// Run retry strategy
g_LbistContext.retryCounter++;
if (g_LbistContext.retryCounter >= MAX_LBIST_RETRIES) {
g_LbistContext.state = LBIST_STATE_FAIL;
Handle_Fatal_Safety_Fault(0xFEED0002U); // Hardware error
} else {
Unlock_Safety_Endinit();
SCU_LBISTCTRL0.U |= (1U << SCU_LBISTCTRL0_LBISTRES_POS);
Lock_Safety_Endinit();
g_LbistContext.state = LBIST_STATE_START;
Execute_LBIST_Evaluation_Sequence(); // Re-run
}
break;
}
case LBIST_STATE_PASS:
// Passed; continue standard boot
break;
case LBIST_STATE_FAIL:
default:
Handle_Fatal_Safety_Fault(0xFEED0003U);
break;
}
}
}
Практические инженерные ловушки
1. Настройки питания SRAM в режиме ожидания
В режиме ожидания система может отключить питание оперативной памяти. В этом случае переменная состояния сбрасывается, и микроконтроллер будет запускать новую проверку при каждом пробуждении, что приведет к бесконечному циклу загрузки.
- Как исправить: Настройте
СТБЫРАМЕЛЬиПРОКОНРАМ.ЛМУИНСЕЛЬрегистры в SCU, чтобы принудительно поддерживать питание секторов LMU RAM в режиме ожидания. Также убедитесь, что ваш скрипт компоновщика добавляетg_LbistContextпеременная в.noinitэтот раздел, чтобы ваш код инициализации на языке C при запуске не очищал его при пробуждении.
2. Ловушки раннего доступа к данным
Чтение неинициализированных секторов SRAM сразу после холодного запуска может вызвать Ловушка доступа к данным На некоторых этапах разработки микросхем AURIX это происходит из-за неисправных битов ECC или битов четности.
- Как исправить: Обработчик прерываний должен проверить, произошло ли исключение в области памяти сохранения во время ранней загрузки. Если да, то записать фиктивные данные для инициализации битов ECC, очистить состояние прерывания и возобновить выполнение вместо остановки процессора.
3. Координация загрузки многоядерных процессоров
AURIX — это многоядерная платформа. Если все ядра загружаются одновременно во время циклов «теплой перезагрузки», это может помешать работе конечного автомата.
- Как исправить: Настройте последовательность загрузки по принципу «ведущий-ведомый». Во время запуска удерживайте все вспомогательные ядра в состоянии остановки (используя заголовки режима загрузки или элементы управления SCU). Разрешите только… Ядро 0 Для запуска конечного автомата LBIST. После того, как ядро 0 проверит тест и запишет результат, оно запустит тест.
LBIST_STATE_PASS, это позволит освободить и другие ядра для загрузки.
Лабораторные испытания и валидация
Для проверки вашей конструкции перед экспертами по функциональной безопасности можно использовать следующие методы тестирования:
- Проверьте Золотой Путь: Используйте отладчик, чтобы убедиться, что конечный автомат успешно завершил переход: $$\text{START} \longrightarrow \text{Теплый сброс} \longrightarrow \text{RUN} \longrightarrow \text{PASS}$$
- Ошибки внедрения данных: Остановите процессор во время
НАЧИНАТЬфаза, вручную повредитьg_LbistContext.callerIntentCheckКонтрольная сумма CRC в памяти и возобновление работы. Убедитесь, что программное обеспечение перехватывает ошибку и переходит в безопасное состояние без запуска теста. - Сбои при внедрении подписи: Немного измените конфигурацию теста (например, измените количество шаблонов в
LBISTCTRL2Это изменит подпись. Убедитесь, что:- Код пытается запустить тест до 3 раз.
- Микроконтроллер переходит в безопасное состояние на третьей неудачной попытке.
Подведение итогов
Запуск LBIST на AURIX TC3xx — это высоконадежный способ удовлетворить диагностические требования ISO 26262 для цифровой логики. Используя внутренние цепочки сканирования и псевдослучайные шаблоны, оборудование точно определяет структурные сбои в логических элементах.
Для безопасного выполнения этой операции необходимо создать чистый, кросс-сбрасываемый конечный автомат. Сосредоточьтесь на защите конфигураций оперативной памяти, управлении ловушками при запуске, координации работы ядер ЦП и установке надежного лимита повторных попыток. Это гарантирует безопасность и надежность самотестирования.




