藍牙總是會斷開

用CC2640和CH582M通過藍牙通信,藍牙總是斷開。串口提示如下:

[11:30:04.316]收←◆Advertising..


[11:30:05.790]收←◆Conn 1 - Int 50?

Connected..


[11:30:06.077]收←◆Pairing started:0


[11:30:06.589]收←◆Update 1 - Int a?


[11:30:07.216]收←◆Pairing success

Bond save success

隔一段時間后,串口就會打印上面的信息。

我想知道藍牙斷開的原因是什么?怎么獲取藍牙斷開的原因?

#define SBP_PERIODIC_EVT_PERIOD? ? ? ? ? ? ? 1600


// How often to perform read rssi event

#define SBP_READ_RSSI_EVT_PERIOD? ? ? ? ? ? ?6400


// Parameter update delay

//#define SBP_PARAM_UPDATE_DELAY? ? ? ? ? ? ? ?100

#define SBP_PARAM_UPDATE_DELAY? ? ? ? ? ? ? ?0


// What is the advertising interval when device is discoverable (units of 625us, 80=50ms)

#define DEFAULT_ADVERTISING_INTERVAL? ? ? ? ?160


// Limited discoverable mode advertises for 30.72s, and then stops

// General discoverable mode advertises indefinitely

#define DEFAULT_DISCOVERABLE_MODE? ? ? ? ? ? GAP_ADTYPE_FLAGS_GENERAL


// Minimum connection interval (units of 1.25ms, 6=7.5ms)

//#define DEFAULT_DESIRED_MIN_CONN_INTERVAL? ? 6

#define DEFAULT_DESIRED_MIN_CONN_INTERVAL? ? 10


// Maximum connection interval (units of 1.25ms, 100=125ms)

//#define DEFAULT_DESIRED_MAX_CONN_INTERVAL? ? 100

#define DEFAULT_DESIRED_MAX_CONN_INTERVAL? ? 10


// Slave latency to use parameter update

#define DEFAULT_DESIRED_SLAVE_LATENCY? ? ? ? 0


// Supervision timeout value (units of 10ms, 100=1s)

#define DEFAULT_DESIRED_CONN_TIMEOUT? ? ? ? ?10



斷連的狀態(tài)打印發(fā)一下看看


怎么打印斷連的狀態(tài)?斷開后就直接打印??

[11:30:04.316]收←◆Advertising..

了?


現(xiàn)在測試發(fā)現(xiàn):當CC2640和CH582M通過藍牙連接成功后,如果雙方不發(fā)送數(shù)據(jù),不會產(chǎn)生藍牙斷開。主從通信過程是這樣的:CC2640向CH582M的0xFFF6特征寫數(shù)據(jù),CH582M收到數(shù)據(jù)后再調(diào)用GATT_Notification這個函數(shù)發(fā)送出去。測試的時候發(fā)現(xiàn)有的時候GATT_Notification這個函數(shù)的返回值是0x16。請問一下,我接下來該怎么查找問題產(chǎn)生的原因?


// Minimum connection interval (units of 1.25ms, 6=7.5ms)

#define DEFAULT_DESIRED_MIN_CONN_INTERVAL? ? 6

//#define DEFAULT_DESIRED_MIN_CONN_INTERVAL? ? 10


// Maximum connection interval (units of 1.25ms, 100=125ms)

//#define DEFAULT_DESIRED_MAX_CONN_INTERVAL? ? 100

//#define DEFAULT_DESIRED_MAX_CONN_INTERVAL? ? 10

#define DEFAULT_DESIRED_MAX_CONN_INTERVAL? ? 6

我把上述值由10改為6.

同時把config.h文件中的下面兩個值做了更改:

#ifndef BLE_BUFF_MAX_LEN

#define BLE_BUFF_MAX_LEN? ? ? ? ? ? ? ? ? ? 251

#endif

#ifndef BLE_BUFF_NUM

#define BLE_BUFF_NUM? ? ? ? ? ? ? ? ? ? ? ? 10

#endif

更改后,不再出現(xiàn)GATT_Notification這個函數(shù)的返回值錯誤的情況。但是還是會斷開連接


跟連接參數(shù)沒什么關閉,EVT里面的程序,沒有通道屬性是0xFFF6.
0x16 是pending,發(fā)送失敗,要么是handle值不對,要么是沒有響應的通道。
假如用peripheral的例子
image.png

這個地方會打印斷開原因。
雖然描述的有點亂,但是大概能猜出來你這個主機沒有枚舉從機復位,handle錯了。

CH579 CH573 CH582 Central 例子應用說明二 (讀寫通知的控制說明) - debugdabiaoge - 博客園 (cnblogs.com)


不好意思,這句PRINT函數(shù)被我屏蔽了。打開后,打印的數(shù)據(jù)如下:


[14:07:28.284]收←◆Disconnected.. Reason:8

不知道這個8代表的是什么意思?


8是通訊超時,一般要么是本身板子信號不太好,可以用EVT板測試;
如果板子沒問題,一般都是代碼阻塞,比如現(xiàn)在任務都是在Tmos里面的,如果單個任務執(zhí)行時間太久,或者代碼里面加了長延時,導致超時斷開。


好的。我好好檢查一下程序代碼,看是否有長延時的地方。我想請問一下,為什么主機不發(fā)送數(shù)據(jù)的時候不會產(chǎn)生這個問題呢?


還有就是,手機作為主機的時候,也不會出現(xiàn)這個問題。手機也是一直在向從機發(fā)送數(shù)據(jù)


EVT里面的程序,沒有通道屬性是0xFFF6.
0x16 是pending,發(fā)送失敗,要么是handle值不對,要么是沒有相應的通道。
假如用peripheral的例子

// Simple Profile Service UUID
#define SIMPLEPROFILE_SERV_UUID???? 0xFFE0

// Key Pressed UUID
#define SIMPLEPROFILE_CHAR1_UUID??? 0xFFE1
#define SIMPLEPROFILE_CHAR2_UUID??? 0xFFE2
#define SIMPLEPROFILE_CHAR3_UUID??? 0xFFE3
#define SIMPLEPROFILE_CHAR4_UUID??? 0xFFE4
#define SIMPLEPROFILE_CHAR5_UUID??? 0xFFE5



嗯嗯,是的。我把這里做了修改。改成0XFFF0了?,F(xiàn)在不再出現(xiàn)返回值是0x16的情況了。只是還有斷開連接的情況。我仔細檢查了以下我的程序,程序中沒有長延時,只是簡單的讀取了2個IO的數(shù)據(jù)。


現(xiàn)在比較奇怪的現(xiàn)象是:手機和CH582M通信,不會出現(xiàn)連接斷開的現(xiàn)象。


老師,麻煩您幫我看看我還由需要注意的地方?jīng)]?我這邊也讓硬件工程師測試一下藍牙信號的問題


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频