WinCE串列埠藍芽的實現

2021-05-27 11:10:47 字數 4096 閱讀 7022

此篇文章用於說明如何在wince系統上實現串列埠藍芽,希望給想在ce上實現這個功能的「新手」朋友乙個幫助。

先說一下我的硬體環境:csr bc4 rom藍芽晶元,s3c6410,wince6.0系統。

硬體連線:把藍芽的rx,tx,cts,rts和板子上的相應口連線,注意是交叉連線,我這裡連線的是uart1。還有就是給藍芽供電,地,天線等。

硬體連線好之後,給藍芽上電,先來搜一把?我當初就是這麼幹的,我的目的是想驗證一下藍芽有沒有接好之類的,掏出手機一搜,結果什麼也沒有搜到,當時我很鬱悶,但是今天回頭來想想,認為當時什麼也沒搜到才算是正常的,如果當時能搜到這個藍芽,那麼,估計這個藍芽在系統上也不會被認到了(指的是想在系統的控制面板裡面,使用ce自帶的藍芽進行搜尋配對等操作)。

好了,現在也搜不到藍芽,也不能驗證模組有沒有接好,還是不管那麼多了,下面開始上軟體,用軟體來驗證。首先來實現讓系統認到這個硬體(使用ce自帶的程式進行搜尋配對等)。

2、把該驅動加到你的bsp包裡面,便於編譯。

3、在platform.reg檔案中新增如下的登錄檔專案:

[hkey_local_machine/software/microsoft/bluetooth/transports/builtin/1]

"driver"="bthbcsp.dll"

"flags"=dword:4

"name"="com2:"

"baud"=dword:1c200

"flashchip"=dword:0

"priority256"=dword:84

"packetsize"=dword:c0

"serialtimeoutconstant"=dword:5

"serialinterveltimeout"=dword:ffffffff

"reopendelay"=dword:64

"resetdelay"=dword:1388

這裡最關鍵的就是

"name"="com2:"

"baud"=dword:1c200

兩項,"name"="com2:"這個是到時候驅動會使用這個名字的串列埠和藍芽硬體通訊,結合前面我的硬體連線,我的硬體是連線在uart1上,所以,我的系統中有把uart1這個串列埠設定為「com2「,當然,這個名字是可以改的,但是必須要保證這裡的,"name"=?這個的名字要和你連線的uart上對映的串列埠名字一樣就可以。

"baud"=dword:1c200,這個很明顯是在指定串列埠的波特率,十六進製制表示,我這裡設定的是115200,設定這個波特率的原因是,我藍芽模組的預設波特率是115200,也就是說,這裡設定的波特率應該要和你的藍芽模組的預設波特率一樣。原因是:驅動在載入的時候,首先會使用這裡設定的波特率開啟串列埠,和模組通訊,此時,驅動會給模組進行初始化操作,會使用到一系列的pskey值。模組只有在經過了這個初始化操作之後,才會開始工作。當然可以再這個pskey的設定中更改模組的波特率,這樣就可以提高藍芽的傳送速度等,關於這點我講在後面來講述,首先還是把這個波特率設定為你的藍芽模組的預設波特率。

4、在platform.bib檔案中加入類似:

bthbcsp.dll     $(_flatreleasedir)/bthbcsp.dll     nk  shk

psconfig.psr                 $(_flatreleasedir)/psconfig.psr              nk    u

這樣的資訊。

5、新增元件,這裡,使用系統在建立工程時候預設新增的元件即可:

a、core os->cebase->communication service and networking->networking-personal area network(pan)->bluetooth->bluetooth profiles support->bluetooth hs/hf and audio gateway

b、core os->cebase->communication service and networking->networking-personal area network(pan)->bluetooth->bluetooth protocol stack with transport driver support->bluetooth stack with universal loadable driver

注意:在b這個同級目錄下的元件,只新增這乙個,其它的請不要新增。

如果運氣不好,沒反應,那麼可以從以下幾個方面著手查詢,先確認相應的dll和登錄檔檔案是否有加入到系統中。查詢驅動是否有載入(bthbcsp.dll)正常情況下,次驅動被載入,會跑到hci_bcsp.cpp檔案的hci_openconnection函式中去,所以可以再這個函式中加上列印看看,是否有跑進來。如果跑進來了,而沒有成功,那麼請跟進看看跑到**就失敗退出了之類的,以我的板子上為例,我的在開啟串列埠後進行串列埠配置的時候就有個地方失敗了,所以我在提供的驅動中也是遮蔽了這裡的,具體的位置在hci_bcsp.cpp檔案的openconnection函式中:

#if 0

if (!setupcomm (serialporthandle, serialbuffersize, serialbuffersize)) 

#endif

這裡可以根據你的具體情況放開試試。

如果順利的話,此時,你已經可以搜尋配對了,但這還不夠,我們還需要傳送檔案看看,這個需要加入obex元件:

依次展開這個目錄下的所有子項,並新增它們。 新增後編譯nk就可以傳送檔案了。

[hkey_local_machine/services/obex]

"friendlyname"="obex"

"dll"="obexsrvr.dll"

"keep"=dword:1

; "order"=dword:9

"order"=dword:a

"prefix"="obx"

"index"=dword:0

這裡是把obex這個驅動的啟動順序靠後了。

另外:[hkey_local_machine/software/microsoft/obex/services/]

;"basedir"="//my documents//defaultinbox"

"basedir"="//nandflash//defaultinbox"

"server"="obexinbx.dll"

這段資訊可以設定儲存檔案時候的預設路徑。

如果一切順利,到這裡你已經可以隨心所欲的傳送檔案了,但是,可能此時你會覺得傳送的速度太慢了,要提高傳送的速度就需要設定更高的通訊波特率。這裡需要涉及到修改2個地方,乙個是psconfig.psr檔案,這個檔案是乙個配置檔案,用於來初始化藍芽晶元。開啟這個檔案,裡面有一些位址和值的配置,這裡只需要修改波特率這一項即可:&01be=01d8,後面的01d8表示速度(預設的115200,和我的藍芽模組的預設波特率一樣),修改這個為你想要速度即可,注意這個的速度的修改應該參考一下的公式來進行換算:

修改完這個地方,還需要修改驅動中的開啟串列埠的波特率。在hci_bcsp.cpp檔案中,hci_openconnection函式中,有:

result = bcspcommunication.openconnection(szcomportname, dwbaud, dwdefaultpacketsize, dwthreadpriority, true);

把這裡的dwbaud引數,修改為你在上面psconfig.psr檔案中設定的波特率一樣的即可。此時還應該在openconnection函式中開啟硬體控制(波特率太高的情況下)。

如果你的串列埠驅動足夠ok的話,那麼此時你的速度應該會提公升到你設定的(串列埠速度/8/2)k/s,很遺憾的是我的速度並沒有提公升,估計是我的串列埠驅動不夠強,沒有使用上硬體控制流的功能.....

baud rate = pskey_value/0.004096

這裡還列有一些典型的速度值:

38k4 baud - 157 (0x009d)

57k6 baud - 236 (0x00ec)

115k2 baud - 472 (0x01d8)

230k4 baud - 944 (0x03b0)

460k8 baud - 1887 (0x075f)

921k6 baud - 3775 (0x0ebf)

1382k4 baud - 5662 (0x161e)

本文出自:

WinCE串列埠藍芽的實現

此篇文章用於說明如何在wince系統上實現串列埠藍芽,希望給想在ce上實現這個功能的 新手 朋友乙個幫助。先說一下我的硬體環境 csr bc4 rom藍芽晶元,s3c6410,wince6.0系統。硬體連線 把藍芽的rx,tx,cts,rts和板子上的相應口連線,注意是交叉連線,我這裡連線的是uar...

WinCE藍芽驅動

1 wince藍芽驅動 2 wince藍芽學習一 wince6.0藍芽協議棧 3 wince上藍芽說明文件 4 wince藍芽應用的實現 藍芽耳機 5 基於wince作業系統的藍芽高質量音訊傳輸的實現.pdf 8 error failed reading e32 structure in modul...

Win CE串列埠通訊

今天學習了wince下的串列埠通訊實驗。現小結如下 1。裝置檔名 裝置檔名字首由3個大寫字母組成,用來標識與特殊流介面驅動程式相對應的特殊裝置檔名。檔名字首儲存在登錄檔的相應驅動程式的鍵值中。如com 序列驅動程式 acm 音訊壓縮管理器 等。2。訪問裝置驅動方法 通過createfile read...