IoT—BLE
IoT(Internet of Things)——BLE(Bluetooth Low Energy)
BLE(蓝牙低能耗)是一种2.4G无线技术,始于蓝牙V4.0版本,旨在实现低功耗和短距离的通信。其主要特点包括:
低功耗:BLE设计为超低功耗无线技术,适合需要长时间运行的设备。
快速连接:与经典蓝牙相比,BLE在搜索和连接速度上更快。
应用广泛:BLE被广泛应用于智能家居、健康监测等领域。
一、BLE 低功耗蓝牙协议栈
Host
Controller
二、BLE 低功耗蓝牙开发工具
低功耗蓝牙协议栈入门(四)空中抓包 (WireShark + nRF Sniffer)
Nordic nRF52840 sniffer
NORDIC 官方提供的蓝牙抓包方法,优点就是便宜!整套硬件成本不超过 100RMB,比公司 30W 的 ellisys 专业蓝牙分析仪要便宜得多了。缺点就是在嘈杂的蓝牙环境下,抓包比较困难,但是在家里蓝牙设备不多的情况下还是可以用用的。适合初学者入门学习蓝牙协议栈的数据流!
推荐购买亿佰特EByte的nRF52840 sniffer,比较稳定
如果买的nRF62840没有固件。NORDIC 官网有英文教程文档会介绍如何将你的开发板刷成蓝牙抓包器
WireShark 抓包软件
软件配置步骤简述:
-
python3.7及以上的环境
-
wireshark环境配置
nrf_sniffer_for_bluetooth_le_4.1.0/extcap 目录运行命令: python -m pip install -r requirements.txt
将 nrf_sniffer_for_bluetooth_le_4.1.0/extcap 目录里的内容原封不动的拷贝到 Wireshark 安装目录里的 extcap 下。
将 Profile_nRF_Sniffer_Bluetooth_LE 拷贝到wireshark/profiles文件夹下
-
nRF52840驱动CP2102
BLE SoC —— Telink
TLSR825X
开发建议
TelinkSDK和AiThinkerSDK相互翻看,TelinkSDK为主,AiThinkerSDK为辅
TelinkSDK是官方的,相比AiThinker这种代理商,代码更权威更完善。比如单连接SDK Demo,多连接SDK Demo都配有官方说明文档。能学得更深入。
AiThinker是有AT固件的Demo,最开始用BLE都是AT指令开发的,比较熟悉,可以固件AT指令顺藤摸瓜熟悉功能。
TLSR825X——开发IDE
!!!注意:Telink IDE和Telink Studio是有区别的,TelinkIDE针对TLSR8(例如TLSR8258),而TelinkStudio针对TLSR9
BDT Burning and Debugging Tools for all Series
而TLSR8不像TLSR9支持调试,所以TLSR8只能用print打印来交互调试,故编写UART交互对于TLSR8开发是极为重要的。
下面TelinkSDK中,有对于UART交互部SDK开发的着重介绍。这是对TLSR8开发所必须的部分。
TLSR825X——Telink SDK
!!!注意:Telink的文档更新速度并不快,例如多连接文档是对4.0.1.x的SDK说明,目前的4.0.2.x并不适用。所以github/gitee仓库应该选择早些的发行版(4.0.1.x)。
-
使用 4.0.1.x SDK开发UART DMA交互接口
只需要引用b85m_ble_sdk / vendor / common / common_dbg.c即可
只需要在app_config.h中UART_LOW_POWER_DEBUG_EN置为1即可
// 多连接SDK 4.0.1.3 // tc_ble_sdk/ b85m_ble_sdk / vendor / common / common_dbg.c #if (UART_LOW_POWER_DEBUG_EN) #if (MCU_CORE_TYPE == MCU_CORE_9518) // #define UART0_DMA_CHANNEL_TX DMA4 // #define UART0_BAUDRATE 1000000 //115200 // int lp_uart_init = 0; //attention: can not be retention data !!! // void low_power_uart_debug_init(void) // { // uart0_init(UART0_BAUDRATE); // uart_set_tx_dma_config(UART0, UART0_DMA_CHANNEL_TX); // uart_clr_tx_done(UART0); // dma_clr_irq_mask(UART0_DMA_CHANNEL_TX,TC_MASK|ABT_MASK|ERR_MASK); // lp_uart_init = 1; // } #elif (MCU_CORE_TYPE == MCU_CORE_825x || MCU_CORE_TYPE == MCU_CORE_827x) #define UART_BAUDRATE 1000000 #define UART_TRANS_BUFF_LEN 32 __attribute__((aligned(4))) unsigned char uart_trans_buff[UART_TRANS_BUFF_LEN] = {0x0c,0x00,0x00,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc}; int lp_uart_init = 0; //attention: can not be retention data !!! void low_power_uart_debug_init(void) { reg_dma_uart_tx_size = UART_TRANS_BUFF_LEN >> 4;//set DMA TX buffer size. uart_gpio_set(UART_TX_PB1, UART_RX_PB7);// uart tx/rx pin set uart_reset(); //uart module power-on again. uart_init_baudrate(UART_BAUDRATE, CLOCK_SYS_CLOCK_HZ, PARITY_NONE, STOP_BIT_ONE); uart_dma_enable(0, 1); //uart data in hardware buffer moved by dma, so we need enable them first dma_chn_irq_enable(FLD_DMA_CHN_UART_TX, 1); //uart Tx dma irq enable lp_uart_init = 1; } #endif #endif
但源文件中low_power_uart_debug_init(void),并不满足我们的debug需求,稍作修改。。
#define UART_BAUDRATE 115200 #define UART_TRANS_BUFF_LEN 128 __attribute__((aligned(4))) unsigned char uart_trans_buff[UART_TRANS_BUFF_LEN] = {0x0c,0x00,0x00,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc}; int lp_uart_init = 0; //attention: can not be retention data !!! void low_power_uart_debug_init(void) { reg_dma_uart_tx_size = UART_TRANS_BUFF_LEN >> 4;//set DMA TX buffer size. uart_gpio_set(UART_TX_PB1, UART_RX_PB7);// uart tx/rx pin set uart_reset(); //uart module power-on again. uart_init_baudrate(UART_BAUDRATE, CLOCK_SYS_CLOCK_HZ, PARITY_NONE, STOP_BIT_ONE); uart_dma_enable(0, 1); //uart data in hardware buffer moved by dma, so we need enable them first dma_chn_irq_enable(FLD_DMA_CHN_UART_TX, 1); //uart Tx dma irq enable lp_uart_init = 1; }
再添加上uart_send、dma_receive_fifo、uart_dma_irq_handle,和receive_fifo解析函数,就满足了我们的debug需求
TLSR825X——AiThinker SDK
Ai-Thinker-Open Telink_825X_SDK
!!!注意:请参考 README.MD 与 start_windows.MD,另外Aithinker的SDK很久没更新维护了,所以还是以TelinkSDK为主