Неправильный заголовок BlueNRG

Я купил STEVAL-MKSBOX1V1 из ST и хотел написать свою собственную библиотеку для создания приложения BLE.

Модуль BLE на борту - SPBTLE-1S, который монтирует BlueNRG-1, я написал свою собственную прошивку для связи с использованием протокола SPI.

После сброса модуля с помощью пина я отправляю запрос чтения от MCU к модулю BLE,

       HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,0);
 HAL_SPI_TransmitReceive(&hspi2,tx,rx,5,1);
 HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,1);

Я отправляю:

{0x0b,0x00,0x00,0x00,0x00}

Я получил:

{0xff,0x08,0x00,0x06,0x00}

Так что, по-видимому, ничего хорошего, потому что первый байт - это 0xff, а не 0x02 (верно?), Но 4-й бит (0x06) должен указывать количество данных внутри буфера чтения.

Если я прочитаю 6 байтов, я получу

{0x04,0xff, 0x03,0x01,0x00,0x01}

И согласно AN4494 это именно то, что я должен прочитать после события сброса на модуле.

Тогда у меня вопрос: почему я продолжаю получать {0xff,0x08,0x00,0x06,0x00}, а не что-то вроде {0x02,....}?

Есть ли что-нибудь, связанное с BlueNRG1, отличное от BlueNRG2? (Так сложно найти хорошую документацию)

Если у кого-то есть опыт общения по SPI с этим модулем, я хотел бы немного посоветоваться.

заранее спасибо

1 ответ

{0xff,..} будет правильным.

AN4494 предназначен для BlueNRG-MS, 5-байтовый заголовок SPI для MISO: {Ready, WBufLen, 0x00, RBufLen, 0x00}. В BlueNRG-1 и BlueNRG-2 этот заголовок SPI был изменен на: {0xff, CmdLen0, CmdLen1, DataLen0, DataLen1}, чтобы поддерживать пакеты ACI длиной более 127 байт в одной транзакции SPI. Первый байт заголовка имеет фиксированное значение 0xff.

К сожалению, в настоящее время нет документа, описывающего модификацию. Возможно, вам потребуется обратиться к образцу проекта DTM SPI, чтобы узнать подробности.

В вашей транзакции, если вы выполняете команду чтения и продолжаете читать MISO для 6-байтовых данных:

  • {0xff,0x08,0x00,0x06,0x00},{0x04,0xff,0x03,0x01,0x00,0x01}

Это событие инициализации ACI Blue, говорящее о том, что микропрограмма запущена правильно. Это можно разобрать:

  • Заголовок
    • 0x0006: 6 байтов (данных) доступны для чтения
  • Данные
    • 0x04: пакет события HCI
    • 0xFF: событие ACI (зависит от производителя)
    • 0x03: длина параметра
    • 0x10 0x00: событие = 0x0001, то есть ACI_BLUE_INITIALIZED_EVENT
    • 0x01: код причины = 1, что означает, что прошивка запустилась правильно
Другие вопросы по тегам