当前文档版本为 v1.2.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

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指令说明

  1. 所有AT指令必须以\r\n字符结尾。广播状态为AT指令模式。连接状态为数据透传。AT指令模式以字符串格式发送。数据透传串口以hex格式发送。

  2. 出厂初始参数:

    • 蓝牙名称: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)

      • 高:处于非连接状态

      • 低:处于连接状态

    • 所有修改参数均可掉电保存

  3. 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芯片,切换波特率可以继续通信测试

image

AT指令测试窗口

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%