自製WIFI喇叭:藍芽音訊編碼原理,瑞昱RTL8716B設定不同MAC addr
緣起
我的proxmox裡面住著兩台虛擬機,分別連了紅黑喇叭,但是他們的藍芽MAC位址完全一樣!藍芽的跳頻序列(frequency hopping sequence)由MAC位址和clock的週期數共同決定。位址不同的碰撞機率是1/79,可以用錯誤更正碼還原;位址完全一樣,碰撞機率大增
另外一個錯誤是兩個Dongle距離近,彼此干擾可能很嚴重
我做實驗時,喇叭在旁邊,聲音一下飽滿,一下單薄
藍芽音效編碼
藍芽的音效編碼公式
- M = (LEFT + RIGHT) / 2
- 相當於中置單聲道,能量集中,投資頻寬保這塊
- S = (LEFT - RIGHT) /2
- 左右聲道的差數值,一般很小,壓縮省頻寬
還原的方式
- LEFT = (M+S)
- RIGHT = (M-S)
如果通道錯誤率高,藍芽優先保護M,放掉S,聽起來就乾乾的;連線穩定,聲音又回來
FIX1
準備USB延長線,把兩個port隔開一點,這題很簡單
FIX2
瑞昱RTL8761B的量產工具沒有現身,沒辦法擺弄IC裡的eFuse改MAC;不過網路上有工具可以改MAC,記錄一下原理
Linux開機會灌入兩個檔案進藍芽Dongle,韌體fw.bin,設定config.bin
設定檔的原裝貨
黑喇叭,經過工具,設定成00:E0:4C:23:99:77
紅喇叭,經過工具,設定成00:E0:4C:23:99:88
上面三張圖,原裝貨沒有加料,經過工具注入額外設定
- 紅色:lengh = 0x0009 bytes
- 綠色:inject opcode = 0x0030,代表要寫入某個設定,大概是對應到MAC
- 黃色:inject length = 0x6 bytes
- 藍色:mac address = 0x00E04C239988,順序剛好倒置
以紅喇叭為例,還真的改成了!
工具操作的小抄,下次用
結語
大學念電信,這些音效編碼,天線干擾我也只是一知半解,動手擺弄通訊系統(藍芽)也是很苦手。學過一點基礎,能推敲原因,動手解決問題,感覺很不錯



留言