Неправильный заголовок 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, что означает, что прошивка запустилась правильно