• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLE SoC PHY6202

cool2000

Member
@pvvx Понятно, положение этих полей от длины пакета зависит.

Если подтвердится, что у phy62x2 проблема с приёмом Coded PHY, то это значит, что продукт не соответствует стандарту BLE 5.x, и сертификат (если он есть) нужно отзывать ;). Поэтому китайцы будут упираться до последнего.
 

pvvx

Активный участник сообщества
Запрос на соединение длиной 36 байт. Пробовал ставить 36, не влияет. Если бы он ждал все 50 байт, то задержка бы была ~ 896мкс = 14*64
ACCESS_CODE + .. + 36 + .. = ?
Для полноты надо проверить выставленные флаги прерываний от RF - их должно быть более 3-х.
FLD_RF_IRQ_TX
FLD_RF_IRQ_RX
FLD_RF_IRQ_RX_TIMEOUT
Может отрабатывает по тайм-ауту. Задан неправильный ACCESS_CODE или ещё чего...
 

pvvx

Активный участник сообщества
В стандарте BT5.0 LE LR необязателен.
Это расплывчато описано в стандарте от Bluetooth SIG.
 

pvvx

Активный участник сообщества
1.2 OVERVIEW OF BLUETOOTH LOW ENERGY OPERATION
...
The 1 Msym/s symbol rate may optionally support error correction
coding, which is referred to as the LE Coded PHY.

Скорость передачи символов 1 Мсим/с может дополнительно поддерживать кодирование с коррекцией ошибок, которое называется PHY с кодированием LE.

Все ссылаются на это "optionally" :)
 

pvvx

Активный участник сообщества
И в BT5.4 формулировка не поменялась: "The 1 Msym/s symbol rate may optionally support error correction coding, which is referred to as the LE Coded PHY."
 

pvvx

Активный участник сообщества
@cool2000 - из толпы пользователей THB2 уже нашелся чип, на котором соединение в 1M PHY не работает.
Я прошил остальные 9 устройств и могу подключиться ко всем из них.
Только к первому не могу подключиться.
Но это не такая уж большая проблема по сравнению с тем, насколько дешевы они были.
 

cool2000

Member
Если ACCESS_CODE задать неверно, вообще не принимается.
С флагами пробовал ставить разные, тоже не влияет, всегда одинаковые на входе в обработчик. Надо ещё посмотреть, может в ROM эти флаги на входе в прерывание проверяются.
 

cool2000

Member
пользователей THB2 уже нашелся чип, на котором соединение в 1M PHY не работает
В SDK 3.1.3 китайцы много намудрили с окнами и интервалами. Возможно с тем кодом у него заработает.

Ещё хотел спросить, вы же собирали какой-то проект с переключением phy в режим Coded в процессе соединения? Хочу попробовать соединиться в Legacy, и переключиться в Coded.
 

pvvx

Активный участник сообщества
Проект любой, где есть соединение.
Добавки были эти (подбирались и были испробованы все варианты). Собирал в Keil с любыми SDK.
Процесс переключения начинался и потеря связи, с конкретным выходом по тайм-ауту соединения.
На чем и было заключено, что китайцы не дописали Coded PHY.
 

cool2000

Member
Процесс переключения начинался и потеря связи, с конкретным выходом по тайм-ауту соединения.
На чем и было заключено, что китайцы не дописали Coded PHY.
Очень весьма вероятно, что причина та же: hardware не отдаёт вовремя прерывание по концу принятого пакета.
 

cool2000

Member
@pvvx Пока китайцы думают над ответом, решил попробовать Coded PHY в простом соединении. Но nRF Connect не хочет переключаться в Coded PHY. Как заставить nRF Connect посылать запрос на переключение в Coded PHY?
В Set initial preferred PHY стоит галка только на LE Coded (Long Range).
FUTURES выставил (вроде). LL_FEATURE_CSA2 по идее не нужно, но поставил тоже. phyplus бодро рапортует версию Bluetooth® Core Specification 5.0(0x0B) (BT Core Specification) и флаги LL_FEATURE_2M_PHY|LL_FEATURE_CODED_PHY|LL_FEATURE_CSA2.
Чтобы не удлинять лог, пакеты подтверждения вырезал.

Код:
Timestamp: 27.514631    Length: 36      RSSI: -64       Channel: 38     PHY: 1M
Ad Type: CONNECT_IND
ChSel: 1 TxAdd: 1 RxAdd: 0 Ad Length: 34
InitA: 4B:24:05:CB:D8:9A (RPA) AdvA: 66:55:44:33:22:11 (Public) AA: 0x16B07A7D CRCInit: 0x52DBD6
WinSize: 2 WinOffset: 30 Interval: 36 Latency: 0 Timeout: 500 Hop: 7 SCA: 5
Channel Map: FF FF FF FF 1F (all channels)
00000000  65 22 9a d8 cb 05 24 4b  11 22 33 44 55 66 7d 7a  |e"....$K."3DUf}z|
00000010  b0 16 d6 db 52 02 1e 00  24 00 00 00 f4 01 ff ff  |....R...$.......|
00000020  ff ff 1f a7                                       |....            |
00000024

Timestamp: 27.555453    Length: 11      RSSI: -55       Channel: 30     PHY: 1M Event: 0
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 0 Data Length: 9
Opcode: LL_FEATURE_REQ
00000000  03 09 08 ff fd 81 07 00  00 00 00                 |...........     |
0000000b

Timestamp: 27.645683    Length: 11      RSSI: -61       Channel: 21     PHY: 1M Event: 2
LLID: LL CONTROL
Dir: S->M NESN: 0 SN: 1 MD: 0 Data Length: 9
Opcode: LL_FEATURE_RSP
00000000  0b 09 09 25 49 00 00 00  00 00 00                 |...%I......     |
0000000b

Timestamp: 27.690453    Length: 11      RSSI: -56       Channel: 31     PHY: 1M Event: 3
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 0 Data Length: 9
Opcode: LL_LENGTH_REQ
00000000  03 09 14 fb 00 48 08 1b  00 48 01                 |.....H...H.     |
0000000b

Timestamp: 27.735683    Length: 11      RSSI: -67       Channel: 25     PHY: 1M Event: 4
LLID: LL CONTROL
Dir: S->M NESN: 0 SN: 1 MD: 0 Data Length: 9
Opcode: LL_LENGTH_RSP
00000000  0b 09 15 fb 00 48 08 fb  00 48 08                 |.....H...H.     |
0000000b

Timestamp: 27.780453    Length: 8       RSSI: -67       Channel: 0      PHY: 1M Event: 5
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 0 Data Length: 6
Opcode: LL_VERSION_IND
00000000  03 06 0c 0b 1d 00 ee 5d                           |.......]        |
00000008

Timestamp: 27.825683    Length: 8       RSSI: -57       Channel: 6      PHY: 1M Event: 6
LLID: LL CONTROL
Dir: S->M NESN: 0 SN: 1 MD: 0 Data Length: 6
Opcode: LL_VERSION_IND
00000000  0b 06 0c 09 04 05 08 02                           |........        |
00000008

Timestamp: 27.870452    Length: 14      RSSI: -56       Channel: 28     PHY: 1M Event: 7
LLID: LL CONTROL
Dir: M->S NESN: 0 SN: 0 MD: 1 Data Length: 12
Opcode: LL_CONNECTION_UPDATE_IND
00000000  13 0c 00 01 00 00 06 00  00 00 f4 01 10 00        |..............  |
0000000e

Timestamp: 27.871008    Length: 13      RSSI: -56       Channel: 28     PHY: 1M Event: 7
LLID: LL DATA
Dir: M->S NESN: 1 SN: 1 MD: 0 Data Length: 11
00000000  0e 0b 07 00 04 00 10 01  00 ff ff 00 28           |............(   |
0000000d

Timestamp: 27.915452    Length: 13      RSSI: -70       Channel: 9      PHY: 1M Event: 8
LLID: LL DATA
Dir: M->S NESN: 1 SN: 1 MD: 0 Data Length: 11
00000000  0e 0b 07 00 04 00 10 01  00 ff ff 00 28           |............(   |
0000000d
...
 

pvvx

Активный участник сообщества
А как пробовали Coded PHY?
Проверить можно на термометре с TLSR825x, включив только опцию BT5.0+, без LE LR.
Если не указан приоритет соединения Coded PHY, cоединяетесь в nRFConnnect на 1M или 2M.
Если RSSI большой, то соединение происходит на 2M.
Некоторые примеры PHY тоже соединяется на 2M. Причину не смотрел.
Затем в nRFConnnect даете команду переключения соединения на Coded PHY.
 

pvvx

Активный участник сообщества
Если у PHY не выставлены флаги для Coded PHY, то команда переключения в nRFConnnect в логе отвечает что соединение переключено на 1M.
А когда флаги CSA2 и приоритет соединения на Coded PHY в инициализации PHY выставлены, то переключение происходит и связь обрывается через период в тайм-аут соединения.
Т.е. что-то переключается, но держать соединение PHY отказывается и тут-же происходит потеря связи.
 

cool2000

Member
Спасибо, буду пробовать.

Китаец мне написал, что аппаратная задержка при приеме LE Coded должна равняться 40мкс. По факту, получается 100 и соответственно не укладываемся в интервал 150 мкс.
Надеялся под шумок выцыганить исходники, но пока жмут.
 

pvvx

Активный участник сообщества
А если поднять частоту CPU?
Может какой делитель CLK не тот на какую-то шину/устройство?
 

pvvx

Активный участник сообщества
Если программа работает из Flash, тогда:
Возьмем частоту SPI 60MHz, тогда выборка кэш (пусть будет блок по 8 байт, DSPI - два сигнала данных):
((5+8)*8/2)/60000000=0.000000866 ->0.87мксвыборка в кэш Flash.
Если их много - накопиться доп. задержка...
Почти в любой call() обычно 2 выборки из Flash - сам код и подгрузка адреса/констант из конца кода функции по PC. Тупой Cortex - совершенно не оптимизирован под работу из SPI Flash :)
 

cool2000

Member
Если программа работает из Flash
Эта часть программы, которая готовит ответ, находится в SRAM. Перепроверю, на всякий случай.

Calls это вообще зло. Часть функций в ROM, например, обращение к регистрам радио, вообще в пару операторов, а трамплин (venir) больше чем эти функции.
 

pvvx

Активный участник сообщества
Ещё интересно с какими блоками работает кэш SPI Flash...
GCC компилятор точно не имеет оптимизации под работу с кэш SPI Flash
 

pvvx

Активный участник сообщества
Bluetooth 5.4 в процессоре (?):


AMD Ryzen PRO 8040 Series mobile processors are also some of the first CPUs in-market to feature support for technologies like Bluetooth 5.4 and Wi-Fi 7, offering seamless connectivity when it comes to speed and latency and helping to provide extra-long battery life as a result; ideal for remote professionals sending and receiving large files.

"Мобильные процессоры AMD Ryzen PRO серии 8040 также являются одними из первых процессоров на рынке, поддерживающих такие технологии, как Bluetooth 5.4 и Wi-Fi 7, ... "

И как это будет работать в Linux? :love:
AMD напишет драйвера в кернел и перепишет Bluez (?) :oops:
 
Сверху Снизу