文章總列表

自製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,順序剛好倒置


以紅喇叭為例,還真的改成了!



工具操作的小抄,下次用



結語

大學念電信,這些音效編碼,天線干擾我也只是一知半解,動手擺弄通訊系統(藍芽)也是很苦手。學過一點基礎,能推敲原因,動手解決問題,感覺很不錯


    留言

    這個網誌中的熱門文章

    ELM327 OBD-II 心得 (2),ELM327底層介面

    STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收

    玩CAN bus的傢伙們 (1) CandleLight-based USB-CAN