<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[【FAQ】全志R329如何进行Tina Linux蓝牙低功耗默认连接参数修改]]></title><description><![CDATA[<p dir="auto"><strong>【问题背景】</strong><br />
硬件：R328/other + 蓝牙模组（XR829/other）<br />
软件：Tina</p>
<p dir="auto"><strong>【问题简述】</strong><br />
btmanger里面有更新连接参数的函数bt_manager_le_update_conn_params，<br />
但是该函数需要在连接完成后调用，有部分客户想要在发起连接时就使用一些连接参数。</p>
<p dir="auto"><strong>【问题分析】</strong><br />
在运行蓝牙后，Linux内核蓝牙协议栈会创建调试节点，可以用于修改一些参数，其中就包括发起连接时的连接参数。</p>
<p dir="auto">具体位置在：</p>
<pre><code>/sys/kernel/debug/bluetooth/hci0
</code></pre>
<p dir="auto">里面内容有：</p>
<pre><code>adv_channel_map                idle_timeout
adv_max_interval               inquiry_cache
adv_min_interval               le_max_key_size
auto_accept_delay              le_min_key_size
blacklist                      link_keys
conn_info_max_age              long_term_keys
conn_info_min_age              manufacturer
conn_latency                   quirk_simultaneous_discovery
conn_max_interval              quirk_strict_duplicate_filter
conn_min_interval              random_address
dev_class                      remote_oob
device_id                      rpa_timeout
device_list                    sc_only_mode
discov_interleaved_timeout     sniff_max_interval
dut_mode                       sniff_min_interval
features                       ssp_debug_mode
force_bredr_smp                static_address
force_static_address           supervision_timeout
hardware_error                 use_debug_keys
hci_revision                   uuids
hci_version                    voice_setting
identity                       white_list
identity_resolving_keys        white_list_size
</code></pre>
<p dir="auto">我们主要关心下面几个参数：</p>
<p dir="auto">符号	描述	说明</p>
<pre><code>conn_latency	        从机潜伏时间	可以跳过连接事件最大次数
conn_max_interval	最大连接间隔	     连接事件间隔最大值
conn_min_interval	最小连接间隔	     连接事件间隔最小值
supervision_timeout	监督超时时间	两次成功连接事件之间的最长时间。
连接间隔范围： 6（7.5ms）&lt; 1.25ms * conn_interval &lt; 3200（4.0s）
监督超时时间范围： 10（100 ms）&lt; 10ms * supervision_timeout &lt; 3200（32.0 s）
从机潜伏时间范围： 0 &lt; conn_latency &lt; 499
</code></pre>
<p dir="auto">iPhone对这些参数有要求，具体看文章最后面。</p>
<p dir="auto"><strong>【解决方法】</strong><br />
修改Linux内核代码tina/lichee/linux-4.9/net/bluetooth/hci_core.c<br />
函数 struct hci_dev *hci_alloc_dev(void)里面的默认参数。</p>
<p dir="auto">实现函数修改内核蓝牙协议栈的debugfs调试节点，启动蓝牙后调用一次即可：</p>
<pre><code>int bt_le_default_conn_params_set(uint16_t min_conn_interval, uint16_t max_conn_interval, 
                                  uint16_t slave_latency, uint16_t conn_sup_timeout)
{                                                                                                                            
    if(min_conn_interval &lt; 0x0006 || min_conn_interval &gt; 0x0C80 ||
        max_conn_interval &lt; 0x0006 || max_conn_interval &gt; 0x0C80 ||
        min_conn_interval &gt; max_conn_interval || slave_latency &gt; 0x01F3 ||
        conn_sup_timeout &lt; 0x000A || conn_sup_timeout &gt; 0x0C80) {
        printf("param error!\n");
        return -1;
    }   

    char buf[128];
    if(access("/sys/kernel/debug/bluetooth/hci0",F_OK) == 0) {
        snprintf(buf, sizeof(buf), "echo %d &gt; /sys/kernel/debug/bluetooth/hci0/conn_min_interval", min_conn_interval);
        printf("run:%s\n",buf);
        system(buf);
        snprintf(buf, sizeof(buf), "echo %d &gt; /sys/kernel/debug/bluetooth/hci0/conn_max_interval", max_conn_interval);
        printf("run:%s\n",buf);
        system(buf);
        snprintf(buf, sizeof(buf), "echo %d &gt; /sys/kernel/debug/bluetooth/hci0/conn_latency", slave_latency);
        printf("run:%s\n",buf);
        system(buf);
        snprintf(buf, sizeof(buf), "echo %d &gt; /sys/kernel/debug/bluetooth/hci0/supervision_timeout", conn_sup_timeout);
        printf("run:%s\n",buf);
        system(buf);
    }   
        
    return 0;
}
</code></pre>
<pre><code>// iphone 参数要求
// Interval Min ≥ 15 ms (multiples of 15 ms)
// Interval Min + 15 ms ≤ Interval Max (Interval Max == 15 ms is allowed)
// Interval Max * (Slave Latency + 1) ≤ 2 seconds
// Interval Max * (Slave Latency + 1) * 3 &lt; connSupervisionTimeout
// Slave Latency ≤ 30
// 2 seconds ≤ connSupervisionTimeout ≤ 6 seconds
</code></pre>
]]></description><link>https://bbs.aw-ol.com/topic/1075/faq-全志r329如何进行tina-linux蓝牙低功耗默认连接参数修改</link><generator>RSS for Node</generator><lastBuildDate>Sun, 08 Mar 2026 13:34:50 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/1075.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Feb 2022 03:26:29 GMT</pubDate><ttl>60</ttl></channel></rss>