2025年2月19日 星期三

Openwrt: Support Bluetooth in D-Link M32

這一篇是紀錄,不是要上什麼pr什麼的。感謝Openwrt論譠上的討論,一些東西讓我可以比較有根據的去驗證。

更新 2025-02-21

1. 看了一堆有的沒有的資料並且邊驗證邊試出來M32的藍芽是在MT7915AN的晶片上,經由UART3的TXD/RXD/CTS/RTS與MT7622B互連。

    1a. MT7622B自己也有藍芽但線路上是用0Ohm接地掉了,沒有拉天線出來使用。

    1b. 除了UART3的訊號外還有一個GPIO61會在Bootloader階段拉High。

    1c. 官方的M32的DTS與我手邊機器有些地方不一樣,在原始M32的討論篇中也有人提出來。所以改了也不少。參考連結Support for DLink M32 Mesh System and R32 Router

2. Openwrt論譠上有人提供了Unifi 6 Lite的Bluetooth Patch。幫助很大但也有限,後面再說明。參考連結 UART3 Bluetooth in UniFi 6 Lite

3. mt7915_patch_e2_hdr.bin這個檔案就自己想辦法了,不確定同平台的能不能通用。

4. 經過一連串的嘗試錯誤後的組合結果如下,不太會用diff與patch,打不進去的話再自己修改一下。

5. Build完後在目標機器上跑的時候需要先安裝WIFI Driver,接著安裝完btmtkuart後"必須"把/etc/modules.d/btmtkuart刪除,並在/etc/rc.local加入sleep 5;insmod btmtkuart;。

    5a. 因為MT7915的WIFI與BT的Reset控制是一起的,目前試出來的結論是由WIFI Driver控制。這樣在Software Reboot時才能正常。

    5b. 目前驗證的結論是要晚一點載入btmtkuart,才會正常的跑完Firmware Patch;否則隨機性的掉Frame後失敗。雖然可以寫進btmtkuart.c當中啦…但想想還是算了。

    5c. 順利的話開機會花9秒左右完成初始化,之後使用hciconfig hci0 up與hcitool -i hci0 lescan。