Полный текст настройки и диагностики технических страниц 4–7 китайского источника V1.0 от 2018-11-16, всего 7 страниц. Заголовок говорит Android 9.0, раздел назначения — Android 8.1; оба сохранены как исторические сведения, не гарантия текущей совместимости. Только китайский источник, английских оригинальных рисунков нет. Технических изображений и таблиц нет; DTS и команды редактируемы. Обложка, история изменений, оглавление и колонтитулы удалены. Команды, изменения прошивки и аппаратные тесты не выполнялись.
Проверка: соединены DTS между страницами, пути libbt и свойства snoop после переносов. Сохранены исходные 32k, GPIO, порты, свойства и написание кода. В исходном pinctrl DTS неполные скобки/точки с запятой; они не дополняются по догадке. Перед использованием сверить с кодом и аппаратурой. Команды питания — только для разрешённых устройств. Snoop-журналы могут раскрывать обмен и сведения об устройствах: ограничьте доступ, отключайте запись после отладки и удаляйте ненужные журналы.
1 Назначение
Описание автоматической совместимости BT на Android 8.1 и необходимых мер предосторожности. Прошивка, собранная по приведённым инструкциям полной автоматической совместимости, поддерживает соответствующие BT-модули; один образ может поддерживать несколько модулей.
1.1 Замечания по ядру
- Сначала настройте wifi_chip_type. Система загружает разные библиотеки libbt в зависимости от chip_type.
wireless-wlan {
compatible = "wlan-platdata";
wifi_chip_type ="ap6255"; //或者如”rtl8723ds”;
WIFI,host_wake_irq = <&gpio0 GPIO_D4 GPIO_ACTIVE_HIGH>;
status = "okay";
};
- Настройка DTS для BT
wireless-bluetooth {
compatible = "bluetooth-platdata";
clocks = <&rk808 1>;
clock-names = "ext_clock";
//wifi-bt-power-toggle;
uart_rts_gpios = <&gpio2 19 GPIO_ACTIVE_LOW>;
pinctrl-names = "default", "rts_gpio";
pinctrl-0 = <&uart0_rts>;
pinctrl-1 = <&uart0_gpios>;
//BT,power_gpio = <&gpio3 19 GPIO_ACTIVE_HIGH>;
BT,reset_gpio = <&gpio0 9 GPIO_ACTIVE_HIGH>;
BT,wake_gpio = <&gpio2 26 GPIO_ACTIVE_HIGH>;
BT,wake_host_irq = <&gpio0 4 GPIO_ACTIVE_HIGH>;
status = "okay";
};
&pinctrl {
wireless-bluetooth {
uart0_gpios: uart0-gpios {
rockchip,pins =
<2 19 RK_FUNC_GPIO &pcfg_pull_none>;
}
};
Приведённая конфигурация DTS задаёт главным образом управление питанием, прерывания и другие функциональные выводы BT. Изменяйте её в соответствии с реальной принципиальной схемой.
- Драйвер питания BT находится в net/rfkill/rfkill-bt.c и создаёт узел /sys/class/rfkill/rfkill0/state.
Первая команда ниже вручную включает питание Bluetooth-модуля, вторая выключает. При включении Bluetooth система подаёт питание автоматически.
echo 1 > /sys/class/rfkill/rfkill0/state
echo 0 > /sys/class/rfkill/rfkill0/state
1.2 Замечания по Android
1. Libbt
Libbt инициализирует Bluetooth-чип, в том числе загружает firmware. Для разных чипов используются разные реализации libbt, обычно от производителя. В источнике преимущественно используются Broadcom и Realtek с кодом в hardware/broadcom/libbt и hardware/realtek/rtkbt/code/libbt-vendor соответственно. Обычно достаточно настроить порт модуля и путь firmware; иных изменений libbt не требуется. Конфигурации различаются: hardware/broadcom/libbt/conf/rockchip/rksdk/bt_vendor.conf для Broadcom и hardware/realtek/rtkbt/code/vendor/etc/bluetooth/rtkbt.conf для Realtek.
2. bluedroid
Исходный код Bluedroid находится в system/bt. Начиная с Android 9.0 собирается библиотека libbluetooth.so. Некоторые настраиваемые макросы можно разместить в device/rockchip/rk3368/bluetooth/bdroid_buildcfg.h.
Для изменения уровней журналирования компонентов Bluedroid редактируйте /system/etc/bt_stack.conf на устройстве.
“persist.bluetooth.btsnoopenable” управляет записью snoop log. “persist.bluetooth.btsnooppath” меняет путь сохранения; по умолчанию это “/data/misc/bluetooth/logs/btsnoop_hci.log”. “persist.bluetooth.btsnoopsize” задаёт размер файла snoop log.
3. Тестирование BT на PCBA
Код теста BT для PCBA по умолчанию использует порт модуля /dev/ttyS0. При необходимости другой порт задаётся в /system/etc/bt_stack.conf.
2 Диагностика BT
2.1 BT не включается
1. Аппаратные проблемы
(1) Измерьте правильность последовательности включения питания BT; (2) проверьте нормальную подачу тактового сигнала 32k; (3) проверьте обмен данными по последовательному порту.
2. Программные проблемы
(1) Проверьте порт связи BT-модуля с основным CPU; (2) проверьте соответствие DTS ядра аппаратной схеме; (3) проверьте соответствие firmware Bluetooth-модулю.
- По источнику, стек Bluetooth после Android 8.0 по умолчанию требует BLE. Поэтому нужен модуль с BLE, иначе Bluetooth не запустится.
2.2 Прерывания Bluetooth-музыки
1. Аппаратные проблемы
(1) Проверьте пайку BT-антенны; (2) измерьте соответствие радиочастотных параметров BT требованиям.
2. Программные проблемы
Прерывания музыки часто связаны с аппаратурой. Сосуществование Wi-Fi и BT также может быть причиной, поэтому сначала обеспечьте актуальность Wi-Fi-драйвера. У многих бюджетных комбинированных Wi-Fi/BT-модулей сканирование Wi-Fi или BT также может вызывать прерывания Bluetooth-музыки.
