はじめに
Armadillo-640は弊社製のBT/THオプションモジュールによってBLE通信を行う事が出来ます。
弊社製のオプションモジュールを使用する事で、ハードウェア・ソフトウェアの開発の手間を軽減し、
かつ品質面でも安心してお使いいただく事が出来ます。
ただし、拡張インタフェースを使って大幅なハードウェア拡張をお考えになられている場合であれば、
拡張基板上にBLE通信デバイスを実装したり、USBドングルを使用してBLE通信機能の実現をお考えになられるケースもあるかと存じます。
この記事では、比較的簡単に入手しやすいRealtek社のRTL8761BをUSB接続で使用してBLE通信を行います。
検証にあたっては、RTL8761Bを内蔵している以下のUSBドングルを使用しました。
Amazon.co.jp:Bluetoothアダプタ 5.0
ドライバ
LinuxカーネルVer.5.8以降では、RTL8761Bのドライバが組み込まれているとの事ですが、
Armadillo-600シリーズの対応しているLinuxカーネルはVer.4.14なので対応していません。
そのため、ソースコードの変更が必要となります。
GitHubにLinuxカーネル4.9に対してRTL8761Bのドライバに対応させるためのpatchファイルがありましたので、
こちらを参考にLinuxカーネル内の「/drivers/bluetooth//btrtl.c」を修正しました。
GitHub:cdliyi
/rtl8761b-fix-patch-for-kernel4.9
*このパッチファイルはLinuxカーネル4.9向けなので、Armadillo-640のLinuxカーネルにそのまま適用できません。ご注意ください。
この変更を施してビルドしたカーネルを使用すれば、RTL8761Bが接続された場合に正常に認識できるようになります。
ファームウェアの入手
RTL8761Bを正常に認識出来るようになりましたが、使用出来るようにするにはファームウェアが必要となります。
Realtek社のデバイスのファームウェアはDebianパッケージとして配布されていますので、
以下のコマンドで当該パッケージをインストールしてください。
[armadillo ~]# apt-get install firmware-realtek
こちらをインストールした上で、さらに別途ファイルのダウンロードとコピーが必要です。
[armadillo ~]# wget https://raw.githubusercontent.com/Realtek-OpenSource/android_hardware_realtek/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_config
[armadillo ~]# wget https://raw.githubusercontent.com/Realtek-OpenSource/android_hardware_realtek/rtk1395/bt/rtkbt/Firmware/BT/rtl8761b_fw
ファイル名変更
[armadillo ~]# mv rtl8761b_config rtl8761b_config.bin
[armadillo ~]# mv rtl8761b_fw rtl8761b_fw.bin
コピー
[armadillo ~]# cp rtl8761b_config.bin /lib/firmware/rtl_bt
[armadillo ~]# cp rtl8761b_fw.bin /lib/firmware/rtl_bt
動作確認
hciconfig コマンドを実行してBD ADDRESSが以下のように正常に表示されていれば使用可能な状態となります。
hcitoolコマンドやbluetoothctlコマンド等で外部デバイスとの通信を確認してみて下さい。
[armadillo ~]# hciconfig
hci0: Type: Primary Bus: USB
BD Address: [任意のBDアドレス] ACL MTU: 1021:6 SCO MTU: 255:12
UP RUNNING
RX bytes:1068 acl:0 sco:0 events:100 errors:0
TX bytes:14847 acl:0 sco:0 commands:100 errors:0
00:00:00:00のように表示されている場合は、正常に動作していません。
以下のコマンドを実行した上で再度hciconfigを実行しても状態が変わらない場合は実施した手順を見直してください。
[armadillo ~]# hciconfig hci0 up