Solution: BLE HID Uart¶
1 功能概述¶
此sample为pan108xxb5
(64pin芯片)evb上演示串口与蓝牙HID设备的透传功能
2 环境要求¶
board:
pan108xxb5
(芯片型号)开发板uart: overlay中默认P06作为Uart Tx端-连接开发板TX0,P07作为Uart Rx端-连接开发板RX0
蓝牙主机设备如手机
3 编译和烧录¶
例程位置:zephyr\samples_panchip\solutions\ble_hid_uart
使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍。
4 演示说明¶
4.1 AT指令说明¶
所有AT指令必须以
\r\n
字符结尾。广播状态为AT指令模式。连接状态为数据透传。AT指令模式以字符串格式发送。数据透传串口以hex格式发送。出厂初始参数:
蓝牙名称:
TEST_UART
透传串口UART1:
UART1_TX:P06
UART1_RX:P07
波特率:115200
调试串口UART0:
UART0_TX: P00
MAC地址:
默认开启
CONFIG_BT_USER_DEFINED_PUBLIC_MA
,初始112233446688
开启
CONFIG_BT_SET_PUBLIC_MAC
,使用panlink
滚码烧录MAC地址
蓝牙连接状态指示(P20)
高:处于非连接状态
低:处于连接状态
所有修改参数均可掉电保存
AT指令表
AT指令 |
回复 |
说明 |
---|---|---|
1 AT |
AT+OK |
测试串口通讯是否正常 |
2 AT+RESET |
OK+RESET |
复位芯片指令 |
3 AT+DEFAULT |
OK+DEFAULT |
恢复出厂设置 |
4 AT+BAUD? |
BAUD+波特率 示例:BAUD+115200 |
10进制值(1200-115200) |
5 AT+BAUD+波特率 示例:AT+BAUD+115200 |
OK+BAUD RESET/NO CHANGE BAUD/OVER 115200 REJECT |
设置波特率 1200-115200任意值 |
6 AT+MAC? |
MAC+地址 示例:MAC+112233AABBCC |
查询MAC地址 |
7 AT+SETMAC+地址 示例:AT+SETMAC+112233445566 |
OK+SETMAC |
设置MAC地址 |
8 AT+NAME? |
查询蓝牙广播名称 示例: PANCHIP_UART |
查询蓝牙广播名字 |
9 AT+SETNAME+名字 示例:AT+SETNAME+HELLO_PAN |
OK+广播名字 示例:OK+HELLO_PAN |
设置广播名字,最长28字节,超过将会截断 |
其他 |
AT+ERROR |
未定义 |
4.2 演示流程¶
4.2.1广播状态测试¶
按照流程依次发送指令1-9,之后重新发送指令6和指令8查询MAC地址和NAME修改是否成功,并可以在手机测试端看到变化及可以成功连接
注意:目前指令5设置921600会返回信息OVER 115200 REJECT,设置相等值会返回NO CHANGE BAUD,设置115200以下的串口波特率会返回OK+BAUD RESET并reset芯片,切换波特率可以继续通信测试
4.2.2 连接状态测试¶
连接状态下,建议使用IOS版本或者安卓版本的NRF CONNECT
工具进行测试,遵照蓝牙基础用法,连接后设置Notify特征Enable后可以在芯片端通过串口透传上报数据,也可以在手机端通过Write特征从芯片端透传出数据,也可以联系我司获取测试软件和测试方法Android BT Connect
apk。
5 开发说明¶
5.1 LOG说明¶
UART1作为透传串口,如果想使用UART0作为LOG输出串口,可以将rcl.overlay
中修改
&uart0 {
current-speed = <115200>;
status = "okay";
};
并在prj.conf
中配置
# Disable Serial Uart & Log.
# CONFIG_SERIAL=n
# CONFIG_UART_INTERRUPT_DRIVEN=n
# CONFIG_CONSOLE=n
# CONFIG_UART_CONSOLE=n
# CONFIG_PRINTK=n
功耗测试时不要打开LOG功能
5.2 功耗说明¶
功耗测试分为广播态测试,连接态测试,并在两种状态下可以通过电流观察空闲WFI状态休眠电流,空闲WFI时会进行时钟动态切换
工作时钟: AHB 使用DPLL作为时钟源 48M;APB2(AHB 12分频作为APB2时钟 = UART1时钟) 4M(支持115200及以下)
**空闲WFI时钟:**AHB 使用DPLL 12分频 作为时钟源 4M;APB2(AHB 1分频作为APB2时钟 = UUART1时钟) 4M(支持115200及以下)
广播间隔配置:/* 0x140 * 0.625 = 200ms */
#define BT_LE_ADV_CONN_NAME_APP BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | \
BT_LE_ADV_OPT_USE_NAME, \
0x140, \
0x140, NULL)
连接间隔配置:/* 16 *1.25 = interval 20ms */
static void connected(struct bt_conn *conn, uint8_t err)
{
if (err) {
printk("Connection failed (err 0x%02x)\n", err);
} else {
printk("Connected\n");
Connect_Status = true;
GPIO_PIN_ADDR(2, 0) = 0;/* connect led */
const struct bt_le_conn_param *param;
/* 16 *1.25 = interval 20ms */
param = BT_LE_CONN_PARAM(16, 16, 0, 500);
bt_conn_le_param_update(conn, param);
}
}
功耗测试结果:
工作模式 |
平均电流(mA) |
WFI电流(mA) |
---|---|---|
广播(200ms广播间隔) |
1.4 |
1.3 |
连接(20ms连接间隔) |
1.75 |
1.3 |
5.3 MTU/DATA_LEN_EXTENSION(DLE) 说明¶
MTU为HOST层设置的最大包长,DLE为Controller支持的Data Length扩展功能(某些手机不一定完全能支持)
源码内默认开启了DLE功能并且为DLE MTU分别分配了最大值251,247(默认DLE功能不开启 Data Len为27,应用层最大支持20字节)
# Allow for large Bluetooth data packets.
CONFIG_BT_DATA_LENGTH_EXTENSION=y
CONFIG_BT_DATA_LENGTH_EXTENSION_VALUE=251
CONFIG_BT_L2CAP_TX_MTU=247
CONFIG_BT_BUF_ACL_RX_SIZE=251
CONFIG_BT_BUF_ACL_TX_SIZE=251
CONFIG_BT_GATT_CLIENT=y
MTU在芯片与主机端交互后协商决定,DLE如果需要支持不带此功能的旧版手机,可以尝试CONFIG_BT_DATA_LENGTH_EXTENSION=n
配置进行适配
6 RAM/Flash资源使用情况¶
Memory region Used Size Region Size %age Used
FLASH: 90856 B 384 KB 23.11%
SRAM: 29180 B 50 KB 56.99%