--- name: hardware-integration-check version: 1.3.0 description: > Проверка использования `GPIO`, `DMA`, `IRQ` и таймеров перед генерацией или правкой `HAL/LL`-кода: сначала источник правды в `docs/HW_IO_MAP.md`, затем производный снимок `docs/hsi/*`, потом `.ioc` и код инициализации. Использовать при любом изменении аппаратных ресурсов; не использовать как общий skill для задач вне аппаратной области. tags: ["hardware", "stm32", "hal", "integration", "check"] project_context: "docs/PROJECT_CONTEXT.md" io_map: "docs/HW_IO_MAP.md" dma_map: "docs/hsi/HSI_DMA_MAP.md" safety_pins: "docs/HW_IO_MAP.md" when_to_use: - "перед генерацией кода инициализации периферии (HAL_Init)" - "при добавлении нового драйвера или модуля, работающего с железом" - "при изменении настроек DMA, GPIO или таймеров" outputs: - "Отчет о конфликтах [HARDWARE CONFLICT] или подтверждение корректности" --- # Skill: Hardware Integration Check ## Миссия Не допустить использования занятых ресурсов, неверной конфигурации периферии или нарушения схемы подключения. Код не должен противоречить документу-владельцу `docs/HW_IO_MAP.md`, файлу `*.ioc` и зафиксированным производным снимкам `docs/hsi/*`. ## Чек-лист проверки Перед написанием кода драйвера/HAL проверь следующее: ### 1. Pin Mux (GPIO) - [ ] **Источник правды:** Сначала сверься с `docs/HW_IO_MAP.md`. Какая роль сигнала, полярность и статус факта (`confirmed / provisional / TBD`) уже зафиксированы? - [ ] **Конфликт пинов:** Затем сверься с `docs/hsi/HSI_IO_MAP.md`. Совместим ли снимок `pinmux` с документом-владельцем? - [ ] **Режим (Mode):** Соответствует ли запрошенный режим (Input/Output/AF) тому, что в таблице? - [ ] **Метка (Label):** Используй `#define` или имя из таблицы (например, `TIM1_BKIN`, `AD7606_BUSY`), а не сырой `PB10`. ### 2. DMA & DMAMUX - [ ] **Конфликт каналов:** Сверься с `docs/hsi/HSI_DMA_MAP.md`. Не занят ли канал другой периферией? (Для STM32G4 учитывай DMAMUX Request ID). - [ ] **Приоритет:** Соответствует ли приоритет DMA требованиям модуля (High для АЦП/ШИМ, Low для UART/логов)? ### 3. NVIC (Прерывания) - [ ] **Safety/RT Priority:** Если это `fast_loop` (PWM, ADC Watchdog) — приоритет должен быть наивысшим (0..4). - [ ] **RTOS Safe Priority:** Если ISR вызывает `FromISR` API FreeRTOS — приоритет должен быть логически ниже (числом больше) или равен `configMAX_SYSCALL_INTERRUPT_PRIORITY` (обычно 5..15). - [ ] **Конфликт векторов:** Не вешай два разных обработчика на один вектор (если они не делят его явно). ### 4. Safety Pins (Критично) - [ ] **BKIN/BKIN2/STO/SKYPER_ERRIN/PRIM_nERROR_IN:** Любые манипуляции с этими safety-линиями из `docs/HW_IO_MAP.md` требуют особой осторожности. Проверь полярность, роль сигнала и то, является ли он базовым или вторичным путем запрета по `docs/PROJECT_CONTEXT.md`. - [ ] **Конфликт документа-владельца и снимка:** Если `docs/HW_IO_MAP.md`, `docs/hsi/*`, `.ioc` и сгенерированный код инициализации расходятся, останови генерацию и потребуй синхронизации документа-владельца, `.ioc` и снимка. ## Контракт ответа Если обнаружен конфликт, **ОСТАНОВИ ГЕНЕРАЦИЮ** и выдай отчет: **⛔ [HARDWARE CONFLICT DETECTED]** * **Resource:** `DMA1_Channel1` * **Requested by:** `UART_RX` * **Already used by:** `TIM3_UP` (согласно `HSI_DMA_MAP.md`) * **Action:** Выбери другой канал или обнови `.ioc` файл. Если конфликтов нет — продолжай генерацию кода.