No description
  • C 92.3%
  • Makefile 7.7%
Find a file
2025-12-29 17:15:28 +03:00
config non work 2025-12-18 01:07:10 +03:00
inc add protobuf test for read data from slave 2025-12-29 17:15:28 +03:00
src add protobuf test for read data from slave 2025-12-29 17:15:28 +03:00
.gitignore igrone build dir 2025-12-06 23:45:18 +03:00
flash_app.jlink igrone build dir 2025-12-06 23:45:18 +03:00
flash_app_safe.jlink igrone build dir 2025-12-06 23:45:18 +03:00
flash_softdevice.jlink igrone build dir 2025-12-06 23:45:18 +03:00
Makefile Transmit work and add waiting cycles for response from miso 2025-12-25 11:29:23 +03:00
nrf52840_xxaa_s140.ld igrone build dir 2025-12-06 23:45:18 +03:00
README.md first commit 2025-12-06 23:38:38 +03:00

nRF52840 BLE Peripheral Project

Проект для nRF52840 (PCA10056) - BLE Peripheral устройство на базе Nordic nRF5 SDK.

Описание

Этот проект реализует BLE Peripheral устройство, которое:

  • Рекламирует себя как "MyDevice" через BLE
  • Принимает подключения от телефона (Central)
  • Использует LED Button Service (LBS) для управления LED и получения состояния кнопки
  • Индикация состояния:
    • LED_1 - горит во время рекламы (advertising)
    • LED_2 - горит при подключении телефона

Требования

Оборудование

  • nRF52840 Development Kit (PCA10056)
  • J-Link программатор (встроенный в PCA10056 или внешний)

Программное обеспечение

  • nRF5 SDK (версия с поддержкой S140 SoftDevice)
    • По умолчанию: /home/lulko/nRF5_SDK
    • Можно изменить через переменную NRF_SDK_ROOT в Makefile
  • ARM GCC Toolchain (arm-none-eabi-gcc)
  • SEGGER J-Link (JLinkExe)
  • nRF Command Line Tools (nrfjprog) - опционально

Структура проекта

nrf52840/
├── src/              # Исходные файлы
│   ├── main.c        # Основной файл приложения
│   └── ble.c         # BLE инициализация (не используется)
├── inc/              # Заголовочные файлы
│   └── ble.h
├── config/           # Конфигурация SDK
│   └── sdk_config.h
├── build/            # Собранные файлы (создается автоматически)
├── flash_app.jlink           # Полная прошивка (SoftDevice + приложение)
├── flash_app_safe.jlink      # Безопасная прошивка приложения (без стирания SoftDevice)
├── flash_softdevice.jlink    # Прошивка только SoftDevice
├── nrf52840_xxaa_s140.ld     # Скрипт линковки
└── Makefile          # Файл сборки

Сборка проекта

Настройка пути к SDK

Если SDK находится не в /home/lulko/nRF5_SDK, измените переменную в Makefile:

NRF_SDK_ROOT := /path/to/your/nRF5_SDK

Или установите переменную окружения:

export NRF_SDK_ROOT=/path/to/your/nRF5_SDK

Компиляция

make

Собранные файлы:

  • build/main.elf - ELF файл для отладки
  • build/main.hex - HEX файл для прошивки

Очистка

make clean

Прошивка устройства

Вариант 1: Полная прошивка (SoftDevice + приложение)

ВНИМАНИЕ: Это стирает все содержимое flash памяти!

make full_reset

Или напрямую через J-Link:

JLinkExe -CommandFile flash_app.jlink

Вариант 2: Прошивка только SoftDevice

make flash_softdevice_jlink

Или напрямую:

JLinkExe -CommandFile flash_softdevice.jlink

Вариант 3: Безопасная прошивка приложения (без стирания SoftDevice)

Рекомендуется для обновления приложения без потери SoftDevice:

make flash_app_jlink

Или напрямую:

JLinkExe -CommandFile flash_app_safe.jlink

Прошивка через nrfjprog

# Прошивка приложения
make flash_app

# Полная прошивка (стирает все)
make flash

Основные команды Makefile

Команда Описание
make Собрать проект
make clean Очистить директорию build
make flash_app_jlink Безопасная прошивка приложения через J-Link
make flash_softdevice_jlink Прошивка SoftDevice через J-Link
make full_reset Полная прошивка (SoftDevice + приложение)
make check_vectors_safe Проверка векторов прерываний (безопасно)
make debug_flags Показать флаги компиляции

Использование

  1. Прошейте устройство:

    make full_reset
    
  2. Подключите устройство:

    • Устройство начнет рекламировать себя как "MyDevice"
    • LED_1 будет гореть во время рекламы
  3. Подключитесь с телефона:

    • Найдите "MyDevice" в сканере BLE
    • Подключитесь к устройству
    • LED_2 загорится при подключении
    • LED_1 погаснет
  4. Использование LED Button Service:

    • Отправка команды на LED: включение/выключение LED_2
    • Нажатие кнопки на устройстве: отправка уведомления на телефон

Технические детали

BLE Конфигурация

  • SoftDevice: S140 v7.2.0
  • Роль: Peripheral
  • Имя устройства: "MyDevice"
  • Advertising interval: 100ms (160 units)
  • Connection parameters:
    • Min interval: 100ms
    • Max interval: 200ms
    • Slave latency: 0
    • Supervision timeout: 4000ms

Используемые модули SDK

  • ble_advertising - управление рекламой
  • ble_lbs - LED Button Service
  • nrf_ble_qwr - Queued Write
  • ble_conn_params - управление параметрами соединения
  • nrf_pwr_mgmt - управление питанием
  • app_timer - таймеры
  • app_button - обработка кнопок

LED Mapping (PCA10056)

  • LED_0 (BSP_BOARD_LED_0) - не используется
  • LED_1 (BSP_BOARD_LED_1) - индикация рекламы
  • LED_2 (BSP_BOARD_LED_2) - индикация подключения
  • LED_3 (BSP_BOARD_LED_3) - не используется

Отладка

GDB отладка

  1. Запустите J-Link GDB Server:

    make jlink_server
    
  2. В другом терминале запустите GDB:

    make gdb_client
    

Проверка состояния устройства

make check_vectors_safe

Устранение неполадок

Устройство не прошивается

  • Убедитесь, что J-Link подключен и устройство включено
  • Проверьте, что J-Link видит устройство: JLinkExe -device NRF52840_XXAA
  • Попробуйте полное стирание: make full_reset

Ошибки компиляции

  • Проверьте путь к SDK в Makefile (NRF_SDK_ROOT)
  • Убедитесь, что установлен ARM GCC toolchain
  • Выполните make clean и попробуйте снова

BLE не работает

  • Убедитесь, что SoftDevice прошит: make flash_softdevice_jlink
  • Проверьте, что устройство видно в сканере BLE на телефоне
  • LED_1 должен гореть во время рекламы

Лицензия

Проект основан на примерах Nordic nRF5 SDK и использует их лицензию.

Автор

Проект создан на базе примера ble_app_blinky из nRF5 SDK.