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