rtthread_uart
rtthread平臺(tái)下通用uart接口實(shí)現(xiàn)。
Ubuntu平臺(tái)下利用qemu實(shí)現(xiàn)藍(lán)牙功能
搭建 RT-Thread QEMU 環(huán)境
目前我們使用qemu-vexpress-a9的bsp環(huán)境。
配置 zephyr_polling 軟件包
1、在 qemu-vexpress-a9 BSP 根目錄輸入:
scons --menuconfig
2、進(jìn)入 RT-Thread online packages → IoT - internet of things 目錄即可看到 zephyr_polling軟件包,勾選軟件包。
3、配置 zephyr_polling項(xiàng)目的參數(shù),如下述配置chipset選common,example選beacon,platform選rtthread_uart。
4、選擇HCI接口參數(shù)
這里 The uart for HCI Transport 默認(rèn)輸入 “uart1” 就好
保存后退出。
下載軟件包
使用 scons —menuconfig 命令后會(huì)安裝及初始化 Env 工具,并在 home 目錄下面生成 “.env” 文件夾,此文件夾為隱藏文件夾,切換到 home 目錄,使用 ls 命令可查看所有目錄和文件。
$ ls ~/.env
env.sh local_pkgs packages tools
運(yùn)行 env.sh 會(huì)配置好環(huán)境變量,讓我們可以使用 pkgs 命令來(lái)更新軟件包,執(zhí)行
$ source ~/.env/env.sh
使用 pkgs —update 命令下載 NimBLE 軟件包到 BSP 目錄下的 packages 文件夾里。
$ pkgs --update
btproxy方式
如果你手頭有一個(gè)USB藍(lán)牙dongle。只要Ubuntu能識(shí)別的都可以使用。
環(huán)境介紹
本次搭建環(huán)境所使用的資源和版本為:
Ubuntu 18.04
Bluez - v5.55
ell - v0.35
qemu - v2.11.1
RT-Thread - v5.0.0
一個(gè)藍(lán)牙適配器
環(huán)境搭建
環(huán)境搭建主要分為兩部分,
bluez 的編譯
Ubuntu里 RT-Thread QEMU 環(huán)境的搭建
首先需要更新源:
sudo apt update
sudo apt upgrade
安裝所需要的依賴:
sudo apt install git automake libtool libelf-dev elfutils libdw-dev libjson-c-dev libical-dev libreadline-dev libglib2.0-dev libdbus-1-dev libudev-dev libncurses5-dev python3 python3-pip qemu
bluez 編譯安裝
bluez 里有許多實(shí)用的工具,例如 btproxy,但是 Ubuntu 自帶的 bluez 并未將這些工具都編譯出來(lái),因此需要我們重新編譯 bluez。
在相同目錄下克隆獲取 0.35 版本的 ell,5.55 版本的 bluez 。
最終 ell 和 bluez 應(yīng)該在同一個(gè)目錄級(jí)別下,目錄結(jié)構(gòu)為:
.
|--- ell
| |--- ell
| |--- unit
|--- bluez
| |--- src
| |--- tools
然后輸入下述命令編譯 bluez:
cd bluez
./bootstrap-configure --disable-android --disable-midi --disable-mesh
make
注意,這個(gè)時(shí)候會(huì)報(bào)錯(cuò),但是不用管,tools目錄下已經(jīng)有所需的btproxy。
QEMU 運(yùn)行 BLE
qemu 運(yùn)行 BLE 時(shí),本質(zhì)上還是在和物理機(jī)的藍(lán)牙設(shè)備通信,下面介紹如何在 qemu 環(huán)境中使用藍(lán)牙設(shè)備。
首先輸入 hciconfig 查看本機(jī)的藍(lán)牙設(shè)備,
我這里是 hci0 藍(lán)牙設(shè)備,需要保證上述紅框框住的部分為 DOWN,也就是該藍(lán)牙設(shè)備未打開,否則需要輸入下述命令關(guān)閉該藍(lán)牙設(shè)備:
sudo hciconfig hci0 down
然后進(jìn)入 bluez 的 tools 目錄,輸入命令為該藍(lán)牙設(shè)備創(chuàng)建一個(gè)代理(proxy)。
sudo ./btproxy -u -i 0
其中 -u 代表使用 Unix Server,默認(rèn)路徑為 /tmp/bt-server-bredr,-i 0 指使用 hci0 藍(lán)牙設(shè)備,如果是 hci1 藍(lán)牙設(shè)備,則需更改為 -i 1 。運(yùn)行成功后會(huì)有下述顯示:
然后在 RT-Thread 的 bsp/qemu-vexpress-a9 目錄下編譯運(yùn)行:
scons
qemu-system-arm -M vexpress-a9 -kernel rtthread.bin -nographic -serial mon:stdio -serial unix:/tmp/bt-server-bredr
即可成功在 qemu 環(huán)境里與藍(lán)牙卡片交互,下面稍微介紹下原理和注意事項(xiàng)。
qemu 命令參數(shù)里與串口相關(guān)的有 -serial mon:stdio -serial unix:/tmp/bt-server-bredr,-serial 參數(shù)的介紹為:
-serial dev redirect the serial port to char device ‘dev’
這個(gè)參數(shù)將 qemu 程序的串口重定向到物理機(jī)的設(shè)備文件,
第一個(gè) -serial mon:stdio 將 qemu 里的 uart0 重定向到了物理機(jī)的 stdio 設(shè)備文件,而且在 qemu 程序里 uart0 用作 msh 命令行工具,類似 stdio,因此我們可以在物理機(jī)上看到 qemu 程序的打印數(shù)據(jù),也可以輸入命令。
第二個(gè) -serial unix:/tmp/bt-server-bredr 是將 qemu 里的 uart1 重定向到物理機(jī)的 /tmp/bt-server-bredr 文件,而這個(gè)文件又是 hci0 設(shè)備的代理,因此從 qemu 程序的角度來(lái)看,就是使用 H4 協(xié)議,通過 uart1 去訪問藍(lán)牙設(shè)備。uart1 的波特率使用 115200 即可(未找到說明,但一般都是這樣使用)。
注意:上述兩個(gè) -serial 的順序不能顛倒,否則 qemu 程序無(wú)法正常運(yùn)行。
若成功運(yùn)行,則在 btproxy 界面會(huì)有如下顯示:
若藍(lán)牙設(shè)備未關(guān)閉,則會(huì)顯示設(shè)備或資源忙:
建議每次運(yùn)行前都關(guān)閉一次藍(lán)牙設(shè)備:sudo hciconfig hci0 down 。
測(cè)試運(yùn)行
而后輸入zephyr_polling_init既可以運(yùn)行demo工程了。可以看到藍(lán)牙地址是11:22:33:44:55:66。
用nordic的app搜索,就可以看到發(fā)送的beacon數(shù)據(jù)包了。
串口方式
如果你手頭就是一個(gè)uart設(shè)備,系統(tǒng)中還沒驅(qū)動(dòng)的情況下。
環(huán)境介紹
本次搭建環(huán)境所使用的資源和版本為:
Ubuntu 18.04
qemu - v2.11.1
RT-Thread - v5.0.0
一個(gè)藍(lán)牙UART模組
環(huán)境搭建
連接藍(lán)牙 Control 芯片(使用 pts_dongle 進(jìn)行演示,將其直接連接電腦)。
需要注意,下面的/dev/ttyACM0需要根據(jù)具體情況調(diào)整,看你實(shí)際的串口是哪個(gè)。Linux串口是默認(rèn)普通用戶沒有讀寫權(quán)限的,每次開機(jī)后對(duì)串口讀寫都要附加權(quán)限。
sudo chmod 666 /dev/ttyACM0
qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd sd.bin -serial mon:stdio -serial /dev/ttyACM0
測(cè)試運(yùn)行
而后輸入zephyr_polling_init既可以運(yùn)行demo工程了。可以看到藍(lán)牙地址是c007e8e12d:e8。
用nordic的app搜索,就可以看到發(fā)送的beacon數(shù)據(jù)包了。
-
UART接口
+關(guān)注
關(guān)注
0文章
124瀏覽量
15289 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1285瀏覽量
40089 -
BLE技術(shù)
+關(guān)注
關(guān)注
0文章
28瀏覽量
5849 -
Ubuntu系統(tǒng)
+關(guān)注
關(guān)注
0文章
91瀏覽量
3927 -
IoT芯片
+關(guān)注
關(guān)注
0文章
23瀏覽量
6293
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論