本次试用的是Telink-泰凌微电子 B91物联网应用开发套件,套件包括如下部分:
B91 开发板和蓝牙天线
Telink BurningEVK:SWS烧录器,可通过三根杜邦线连接开发板进行烧录
MiniUSB线和杜邦线
B91通用开发套件是Telink最新一代TLSR9系列芯片的通用开发平台。TLSR9系列芯片作为Telink最新一代低功耗高性能多协议无线连接SoC产品,支持多种先进的物联网连接技术规范,包括经典蓝牙,蓝牙低功耗,蓝牙Mesh,Zigbee,Apple HomeKit,Apple Find My,Thread,Matter,2.4GHz专有协议,及各类RTOS,并且能够实现部分多协议并行操作。该芯片内置了先进的32位RISC-V MCU,集成了DSP和浮点运算扩展指令。
开发板板载SoC为TLSR9518AE,TLSR9518AE支持双模蓝牙,Mesh,AoA/AoD,支持Thread,Zigbee等多协议连接,功能强大且支持低功耗。内置有立体声audio codec 和多种丰富外设。支持多协议是个大的亮点。
芯片资料页面下有芯片规格书,各种SDK和SDK的使用手册,以及配套的开发板资料
1.开发环境搭建和编译
按照官方的文档下载B91 开发板对应的IDE开发环境
安装后的程序名称为AndeSight_RDS
打开后提示无License ,需要安装license后才能继续运行
下载到如下形式的License文件:
在license安装对话框中,输入Serial(下载到的license文件名),选中License文件,点击OK成功安装License后即可正常使用IDE了
导入下载的SDK工程,执行Build
编译生成的目标文件在telink_b91m_driver_sdk\project\tlsr_riscv\B91\UART_Demo\output目录下:
2.烧录和测试
在 SDK 开发过程中,通过使“Telink Burning and Debugging Tool( BDT) ”,可以通过 “BurningEVK”( EVK)将固件直接下载到开发板。它主要的功能包括:擦除 flash 扇区,下载固件,通信失败时激活 MCU,访问包括 Flash/Core/Analog/OTP 在内的内存空间,读/写全局变量。
烧录器和烧录接口,烧录方法参考文档AN-18101201-C_Telink Burning and Debugging Tool_BDT_User Guide和 “AN_18010500_User Guide for Telink Burning EVK TLSR8266BR56”
使用杜邦线连接烧录器和开发板
烧录器的3.3V连接开发板上JTAG接口的BEVK_3V3引脚
点击Download,报错:Swire err!
原因:烧录器EVK版本过低,需要更EVK固件,点击Help/Upgrade进入升级页面, EVK的固件文件在BDT目录下
更新后,Swire OK了,但烧录仍然失败:
原因:3.3V连接位置不对,需要连接到VBAT这个引脚上,连接正确后,烧写成功了
重启后,程序开始运行,LED开始闪烁了
3.B91M_SINGLE_BLE_SDK 蓝牙例程编译测试
导入B91M_SINGLE_BLE_SDK并编译,烧录运行后,在手机上可以扫描到一个名为feature的蓝牙设备
有多种GATT服务,可作为HID设备使用,当和手机连接后,板子上LED会亮;作为HID设备使用时,开发板上的K1和K2按键按下,可调节手机音量,K3和K4按下可向手机分别输入1和2;
查看代码,在user_init_normal()中初始化了gap和gatt服务,以及广播参数和数据配置,tbl_advData和tbl_scanRsp定义了广播和响应的数据。
- //////////// Host Initialization Begin /////////////////////////
- /* Host Initialization */
- /* GAP initialization must be done before any other host feature initialization !!! */
- blc_gap_peripheral_init(); //gap initialization
- extern void my_att_init ();
- my_att_init (); //gatt initialization
- /* L2CAP Initialization */
- blc_l2cap_register_handler (blc_l2cap_packet_receive);
- /* SMP Initialization may involve flash write/erase(when one sector stores too much information,
- * is about to exceed the sector threshold, this sector must be erased, and all useful information
- * should re_stored) , so it must be done after battery check */
- blc_smp_peripheral_init();
- // Hid device on android7.0/7.1 or later version
- // New paring: send security_request immediately after connection complete
- // reConnect: send security_request 1000mS after connection complete. If master start paring or encryption before 1000mS timeout, slave do not send security_request.
- blc_smp_configSecurityRequestSending(SecReq_IMM_SEND, SecReq_PEND_SEND, 1000); //if not set, default is: send "security request" immediately after link layer connection established(regardless of new connection or reconnection)
- //////////// Host Initialization End /////////////////////////
- //////////////////////////// BLE stack Initialization End //////////////////////////////////
- u8 status = bls_ll_setAdvParam( ADV_INTERVAL_30MS, ADV_INTERVAL_35MS,
- ADV_TYPE_CONNECTABLE_UNDIRECTED, OWN_ADDRESS_PUBLIC,
- 0, NULL,
- BLT_ENABLE_ADV_ALL,
- ADV_FP_NONE);
- if(status != BLE_SUCCESS) { while(1); } //debug: adv setting err
- bls_ll_setAdvData( (u8 *)tbl_advData, sizeof(tbl_advData) );
- bls_ll_setScanRspData( (u8 *)tbl_scanRsp, sizeof(tbl_scanRsp));
- bls_ll_setAdvEnable(BLC_ADV_ENABLE); //adv enable
改个蓝牙名字试试:
至此基本跑通,基础功能测试OK,后续再继续深入测试和学习其他能力。
当前这一阶段的使用感受是:
1.芯片功能强大,支持音频接口,支持双模蓝牙,Mesh,Thread,Zigbee等多协议连接,不知道是否能在同一个SDK下同时支持多种协议,还是通过不同的SDK来支持不同的协议,后续再深入学习;
2.IDE比较易用,但烧写用的EVK工具连接说明和开发板的接线说明不清晰,开发板上供电和线路有些复杂,如果简化一下更好用;烧录方式目前只看到可通过烧写器进行;
3.软件SDK丰富,文档系统比较丰富,蓝牙协议栈接口庞大;支持蓝牙Mesh和Matter;
4.芯片硬件相关资料较少,缺少芯片硬件设计参考和设计指导;