lift_indicator_suite/sdk/README.md
Ezra Maccabee ce717ce9dd # 3
СБорка базового проекта
2026-03-06 15:27:39 +03:00

147 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Добавление и использование драйверов NXP SDK
Руководство по добавлению новых драйверов из SDK в проект и их использованию в BSP и firmware.
---
## Структура sdk/
```bash
sdk/
├── CMakeLists.txt # все SDK таргеты
├── CMSIS/
│ └── Include/
└── devices/
└── MIMXRT1052/
├── system_MIMXRT1052.c
├── drivers/ # здесь живут все драйверы
│ ├── fsl_flexcan.c / .h
│ ├── fsl_lpuart.c / .h
│ └── ...
└── utilities/
```
---
## Как добавить новый драйвер
### Шаг 1 — Найти исходник драйвера
В SDK смотришь `devices/MIMXRT1052/drivers/`. Каждый драйвер — пара `.c` + `.h` файлов.
Если нужен FlexCAN — это `fsl_flexcan.c` + `fsl_flexcan.h`.
Для сложных драйверов (USDHC, SEMC) загляни в NXP-овский cmake файл рядом с драйвером — там указаны зависимости. Например файл `driver_flexcan.cmake` содержит:
```cmake
target_sources(... fsl_flexcan.c)
# зависит от driver_common
```
Это подскажет какие ещё таргеты нужно добавить в зависимости.
### Шаг 2 — Добавить таргет в sdk/CMakeLists.txt
Открываешь `sdk/CMakeLists.txt` и добавляешь через макрос `add_sdk_driver`:
```cmake
# Простой драйвер без дополнительных зависимостей
add_sdk_driver(flexcan fsl_flexcan.c)
# Драйвер с зависимостью от другого SDK таргета
add_sdk_driver(flexcan fsl_flexcan.c)
target_link_libraries(sdk_flexcan PUBLIC sdk_clock)
```
Макрос `add_sdk_driver(ИМЯ ФАЙЛ)` автоматически:
- Создаёт таргет `sdk_ИМЯ`
- Добавляет `fsl_ИМЯ.c` как источник
- Прокидывает `devices/MIMXRT1052/drivers` как PUBLIC include
- Линкует `sdk_device` как PUBLIC зависимость
### Шаг 3 — Использовать в BSP или firmware
**В BSP** — если драйвер нужен для инициализации платы (clock, gpio, common):
```cmake
# bsp/CMakeLists.txt
target_link_libraries(bsp_board PUBLIC
sdk_device
sdk_clock # ← добавил
sdk_common # ← добавил
)
```
`PUBLIC` — транзитивно подтянется во все firmware таргеты которые линкуют `bsp_board`.
**В firmware** — если драйвер нужен только конкретному проекту:
```cmake
# firmware/test/CMakeLists.txt
target_link_libraries(firmware_test PRIVATE
bsp_board # транзитивно даёт sdk_device, sdk_clock, sdk_common
sdk_flexcan # ← добавил только здесь — нужен только тестовой прошивке
sdk_lpuart
)
```
`PRIVATE` — драйвер линкуется только в этот бинарь, не экспортируется наружу.
---
## Справочник таргетов sdk/
| Таргет | Файл | Когда нужен |
| ------------- | --------------------- | ------------------------------------ |
| `sdk_device` | `system_MIMXRT1052.c` | Всегда (базовый) |
| `sdk_common` | `fsl_common.c` | Всегда (базовые утилиты) |
| `sdk_clock` | `fsl_clock.c` | Всегда (тактирование) |
| `sdk_gpio` | `fsl_gpio.c` | Кнопки, светодиоды, дискретные входы |
| `sdk_lpuart` | `fsl_lpuart.c` | UART1, RS_RX в режиме UART |
| `sdk_flexcan` | `fsl_flexcan.c` | CAN |
| `sdk_usdhc` | `fsl_usdhc.c` | uSD слот |
| `sdk_semc` | `fsl_semc.c` | SDRAM (обычно не нужен — DCD) |
| `sdk_flexspi` | `fsl_flexspi.c` | QSPI Flash (обычно не нужен — FDCB) |
| `sdk_lcdifv2` | `fsl_lcdifv2.c` | LCD интерфейс |
| `sdk_pwm` | `fsl_pwm.c` | FlexPWM (VOLUME, подсветка) |
| `sdk_adc` | `fsl_adc.c` | ADC |
---
## Правила использования PUBLIC / PRIVATE
```bash
PUBLIC — используй в bsp_board и sdk таргетах
(зависимость экспортируется транзитивно)
PRIVATE — используй в firmware таргетах
(зависимость только для этого бинаря)
```
**Пример транзитивной цепочки:**
```bash
firmware_test
└── bsp_board (PRIVATE)
├── sdk_device (PUBLIC) ← подтягивается в firmware_test автоматически
├── sdk_clock (PUBLIC) ← подтягивается в firmware_test автоматически
└── sdk_common (PUBLIC) ← подтягивается в firmware_test автоматически
```
Благодаря этому в `firmware_test/CMakeLists.txt` не нужно явно прописывать `sdk_device`, `sdk_clock`, `sdk_common` — они приходят через `bsp_board`.
---
## Пример: добавить поддержку I2C (LPI2C) для BM8563
```cmake
# 1. sdk/CMakeLists.txt — добавляешь таргет
add_sdk_driver(lpi2c fsl_lpi2c.c)
# 2. bsp/CMakeLists.txt — если I2C нужен для инициализации платы
target_link_libraries(bsp_board PUBLIC sdk_lpi2c)
# ИЛИ firmware/app/CMakeLists.txt — если только в боевой прошивке
target_link_libraries(firmware_app PRIVATE sdk_lpi2c)
```