日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android BCM4330 蓝牙BT驱动调试记录

發(fā)布時間:2025/4/5 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android BCM4330 蓝牙BT驱动调试记录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

網(wǎng)上關(guān)于BT的驅(qū)動很少,所以我在開發(fā)過程中把其中的步驟記錄下來。供大家相互學(xué)習(xí)討論。


一、關(guān)于BT driver的移植:


1. Enablebluetootch in BoadConfig.mk

?????? BOARD_HAVE_BLUETOOTH := true


2.實現(xiàn)BT電源管理rfkill驅(qū)動。

Kernel/driver/bluetooth/bluetooth-power.c??? 高通的這個文件基本上不用動。

在kernel\arch\arm\mach_msm7x27.c: static int bluetooth_power(int on)中

實現(xiàn):上電:把bt_reset pin 和bt_reg_on pin 拉低

?????? ???????? mdelay(10);

????????????? 把bt_resetpin 和bt_reg_on pin 拉高

????????????? mdelay(150)

????? 下電:把bt_reset pin 和bt_reg_on pin 拉低?? ????

?

3. RebuildAndroid image and reboot

命令行測試:

echo 0 >/sys/class/rfkill/rfkill0/state?? //BT下電

echo 1 >/sys/class/rfkill/rfkill0/state?? //BT上電

brcm_patchram_plus-d --patchram /etc/firmware/BCM4329B1_002.002.023.0061.0062.hcd/dev/ttyHS0

hciattach -s115200 /dev/ttyHS0 any

沒任何錯誤提示是可以用以下測試

hciconfig hci0up

hcitool scan

?

4.實現(xiàn)BT睡眠喚醒機(jī)制

Kernel\drivers\bluetooth\bluesleep.c一般來說這個文件改動比較少,但可能邏輯上會有些問題。需要小的改動。

在kernel\arch\arm\mach_xxx/board_xxx.c:bluesleep_resources中定義gpio_host_wake(BT喚醒host腳)、gpio_ext_wake(host喚醒BT腳)、host_wake(BT喚醒host的中斷號)。

注:各個平臺的board_xxx.c文件名字不同,請客戶確認(rèn)?


5.系統(tǒng)集成

1)在init.qcom.rc中確認(rèn)有下面的內(nèi)容:

service hciattach/system/bin/sh /system/etc/init.qcom.bt.sh

??? user bluetooth

??? group qcom_oncrpc bluetooth net_bt_admin

??? disabled

??? oneshot

?

2)修改init.qcom.bt.sh

確認(rèn)有:

BLUETOOTH_SLEEP_PATH=/proc/bluetooth/sleep/proto

echo 1 >$BLUETOOTH_SLEEP_PATH

/system/bin/hciattach-n /dev/ttyHS0 any 3000000 flow & 改為:

./brcm_patchram_plus--enable_lpm –enable_hci --patchram /system/etc/wifi/BCM4329BT.hcd --baudrate3000000 /dev/ttyHS0 &

注掉:高通下載firmware的命令。

?

6.重新編譯system。此時BT應(yīng)該能運行了。


二、BT的休眠喚醒配置


BT的休眠在driver/bluetooth/bluesleep.c中,首先驅(qū)動的名字叫“bluesleep”與arch/arm/mach-msm/board-msm7x30.c相匹配就執(zhí)行platform_driver_probe(&bluesleep_driver, bluesleep_probe)然后調(diào)用static int __init bluesleep_probe(struct platform_device *pdev),這里會配置兩個引腳HOST_WAKE_BT & BT_WAKE_HOST?

bsi = kzalloc(sizeof(struct bluesleep_info), GFP_KERNEL);
?? ? ? ?if (!bsi)
?? ? ? ? ? ? ? ?return -ENOMEM;

?? ? ? ?res = platform_get_resource_byname(pdev, IORESOURCE_IO,
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"gpio_host_wake");
?? ? ? ?if (!res) {
?? ? ? ? ? ? ? ?BT_ERR("couldn't find host_wake gpio\n");
?? ? ? ? ? ? ? ?ret = -ENODEV;
?? ? ? ? ? ? ? ?goto free_bsi;
?? ? ? ?}
?? ? ? ?bsi->host_wake = res->start;
?? ? ? ?//[SIMT-zhangmin-111230] change the configuration of BT sleep gpio from bt_power to here {
?? ? ? ?gpio_tlmm_config(GPIO_CFG(bsi->host_wake, 0, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA),GPIO_CFG_ENABLE);
?? ? ? ?//[SIMT-zhangmin-111230] }
?? ? ? ?ret = gpio_request(bsi->host_wake, "bt_host_wake");
?? ? ? ?if (ret)
?? ? ? ? ? ? ? ?goto free_bsi;
?? ? ? ?ret = gpio_direction_input(bsi->host_wake);

?bsi->host_wake_irq = platform_get_irq_byname(pdev, "host_wake");

如上代碼所示,主要將HOST_WAKE_BT設(shè)置為輸出腳,BT_WAKE_HOST 設(shè)置為輸入腳并也設(shè)置為中斷腳,等待BT芯片的喚醒。

然后再bluesleep_init函數(shù)中建立BT目錄/proc/bluetooth/sleep/讀btwake中HOST_WAKE_BT的狀態(tài)。讀出的狀態(tài)值為0或1。

或在BT目錄/proc/bluetooth/sleep/寫btwake中HOST_WAKE_BT的狀態(tài)。寫出狀態(tài)值為0或1。

總結(jié)

以上是生活随笔為你收集整理的Android BCM4330 蓝牙BT驱动调试记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。