NRF5 SDK蓝牙开发——peripheral设备广播报文分析

nRF52832开发记录----Nordic BLE 开发环境搭建 nordic支持三种IDE: KEIL, IAR, SES. SES跟Keil非常像,是Segger公司为Nordic芯片量身打造的,对Nordic用户来说,永久免费。 Segger embedded studio开发环境搭建官方文档: Keil MDK开发环境搭建官方文档: 1. SES安装 SES安装包 https://www.segger.com/downloads/embedded-studio/ 2. nRF Command Line Tools安装 nRF5x command line t 阅读详情

peripheral设备广播报文分析

试验条件:

  • iar for arm开发平台
  • 1块nRF52832开发板
  • 应用程序开发版本:nRF5_SDK_15.0.0_a53641a
  • 协议栈固件: s132_nrf52_6.0.0_softdevice.hex
  • 2个基于Ble平台开发好的产品

central设备与peripheral设备的连接的前提,需要peripheral设备定时往外发送广播报文,而central设备进入扫描模式,接收所有广播报文。为了实现对peripheral设备广播报文的分析,一方面通过实例结合蓝牙核心协议来分析,一方面,在NRF52系列平台,通过peripheral设备的代码来分析广播内容。


通信试验搭建

1。 nRF52832开发板跑central设备程序来抓包,例程在examples\ble_central\ble_app_uart_c,同时配置RF_LOG信息打印到串口,并且在"sdk_config.h"中,LOG信息输出等级为4,如下代码所示,

// <o> NRF_LOG_DEFAULT_LEVEL  - Default Severity level

// <0=> Off 
// <1=> Error 
// <2=> Warning 
// <3=> Info 
// <4=> Debug 

#ifndef NRF_LOG_DEFAULT_LEVEL
#define NRF_LOG_DEFAULT_LEVEL 4
#endif

2。central设备初始化完毕后,都会触发BLE_GAP_EVT_ADV_REPORT事件,该事件在函数static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)中处理。进入on_adv_report,进入ble_advdata_uuid_find,合适位置添加 代码如下, 这样在搜索到任一个peripheral设备广播报文,都会打印报文信息。

NRF_LOG_DEBUG("p_encoded_data,%d",data_len);
NRF_LOG_HEXDUMP_DEBUG(p_encoded_data, data_len);

使用nRF Connect工具对广播报文解析的内容&central设备抓包输出到串口的原始数据,使用两个实例,对比如下

这里写图片描述

[15:53:56.117]收←◆<debug> app: p_encoded_data,19
<debug> app:  02 01 06 0F 09 4B 65 65|.....Kee
<debug> app:  73 6F 6E 20 62 61 73 65|son base
<debug> app:  30 30 31               |001     
<debug> app: p_encoded_data,4
<debug> app:  03 03 E0 FF            |....    

这里写图片描述

<debug> app: p_encoded_data,29
<debug> app:  02 01 06 05 02 F0 FF B0|........
<debug> app:  FF 0A FF 00 00 FF FF FF|........
<debug> app:  FF 64 00 FF 00 00 00 00|.d......
<debug> app:  00 00 00 00 00         |.....   
<debug> app: p_encoded_data,27
<debug> app:  11 09 62 61 73 65 2D 69|..base-i
<debug> app:  34 2E 30 30 30 30 32 35|4.000025
<debug> app:  31 39 05 12 08 00 20 00|19.... .
<debug> app:  02 0A 04               |...    

实例数据解析

蓝牙核心协议中,广播报文及扫描响应报文协议定义如下,
 报文结构

该蓝牙广播报文包含的信息个数是可以自定义的。每一个信息在协议中都是固定的“长度+类型+内容”组成,广播报文由一个个信息前后拼接而成。根据蓝牙补充协议,对应上述Keeson base001设备,解析如下:

02 01 06 :类型为“Flags”:设置了两个标志位GeneralDiscoverable,BrEdrNotSupported
0F 09 4B 65 65 73 6F 6E 20 62 61 73 65 30 30 31 03 03 E0 FF:类型为“Complete local name”:名称为Keeson base001
03 03 E0 FF:类型为 “Complete list of 16-bit Service UUIDs”:UUID为0xFFE0

总结来说,这段广播报文使用了3条信息,长度分别为02,0F,03,类型分别为01,09,03。


代码追溯

Nrf52蓝牙系列,peripheral设备定时往外发送广播报文,报文参数初始化如下所示,

/**@brief Function for initializing the Advertising functionality.
 */
static void advertising_init(void)
{
    uint32_t               err_code;
    ble_advertising_init_t init;

    memset(&init, 0, sizeof(init));

    init.advdata.name_type          = BLE_ADVDATA_FULL_NAME;  //定义了名称显示类型
    init.advdata.include_appearance = false;//是否包含设备外观
    init.advdata.flags              = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE;//标志显示

    init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);//UUID显示
    init.srdata.uuids_complete.p_uuids  = m_adv_uuids;

    init.config.ble_adv_fast_enabled  = true;
    init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
    init.config.ble_adv_fast_timeout  = APP_ADV_DURATION;
    init.evt_handler = on_adv_evt;

    err_code = ble_advertising_init(&m_advertising, &init);
    APP_ERROR_CHECK(err_code);

    ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}

广播报文信息支持的类型在“ble_gap.h”

/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format
 * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm
 * @{ */
#define BLE_GAP_AD_TYPE_FLAGS                               0x01 /**< Flags for discoverability. */
#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE   0x02 /**< Partial list of 16 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE         0x03 /**< Complete list of 16 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE   0x04 /**< Partial list of 32 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE         0x05 /**< Complete list of 32 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE  0x06 /**< Partial list of 128 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE        0x07 /**< Complete list of 128 bit service UUIDs. */
#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME                    0x08 /**< Short local device name. */
#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME                 0x09 /**< Complete local device name. */
#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL                      0x0A /**< Transmit power level. */
#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE                     0x0D /**< Class of device. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C               0x0E /**< Simple Pairing Hash C. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R         0x0F /**< Simple Pairing Randomizer R. */
#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE           0x10 /**< Security Manager TK Value. */
#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS          0x11 /**< Security Manager Out Of Band Flags. */
#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE     0x12 /**< Slave Connection Interval Range. */
#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT       0x14 /**< List of 16-bit Service Solicitation UUIDs. */
#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT      0x15 /**< List of 128-bit Service Solicitation UUIDs. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA                        0x16 /**< Service Data - 16-bit UUID. */
#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS               0x17 /**< Public Target Address. */
#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS               0x18 /**< Random Target Address. */
#define BLE_GAP_AD_TYPE_APPEARANCE                          0x19 /**< Appearance. */
#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL                0x1A /**< Advertising Interval. */
#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS         0x1B /**< LE Bluetooth Device Address. */
#define BLE_GAP_AD_TYPE_LE_ROLE                             0x1C /**< LE Role. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256            0x1D /**< Simple Pairing Hash C-256. */
#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256      0x1E /**< Simple Pairing Randomizer R-256. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID             0x20 /**< Service Data - 32-bit UUID. */
#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID            0x21 /**< Service Data - 128-bit UUID. */
#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE             0x22 /**< LE Secure Connections Confirmation Value */
#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE                   0x23 /**< LE Secure Connections Random Value */
#define BLE_GAP_AD_TYPE_URI                                 0x24 /**< URI */
#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA                 0x3D /**< 3D Information Data. */
#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA          0xFF /**< Manufacturer Specific Data. */
nRF52832 nRF52832 是BLE(Bluetooth low energy) 低功耗蓝牙 芯片中较好的一款。 nRF52832是CortexM4F内核的单片机,同stm32公司的产品类似,不过里面增加了一个蓝牙模块。 1. 网盘 https://pan.baidu.com/share/link?shareid=2024984391&uk=4228226257#list/path=%2FnRF52%2 阅读详情

相关推荐

蓝牙模块核心技术解析:从BLE/GATT到低功耗设计实战

无线通信技术是物联网和嵌入式系统的基石,它实现了设备间的数据交换与控制。其核心原理在于利用射频信号在特定频段进行数据传输,其中蓝牙低功耗(BLE)技术因其极致的功耗优化而成为电池供电设备的首选。BLE通过间歇性通信和深度睡眠机制,将平均电流降至微安级,技术价值在于为智能穿戴、传感器网络等场景提供了长达数月至数年的续航能力。在工程实践中,基于GATT协议构建自定义服务是实现数据通信的关键,而射频电路设计与功耗优化则是保障通信距离与稳定性的核心。本文以蓝牙模块为例,深入剖析其选型逻辑、开发流程及量产避坑指南,涵

weixin_34072637的博客 353

从零开始的nrf52832蓝牙开发(1)--蓝牙协议基础

想要进行蓝牙开发,第一步肯定要对蓝牙协议有所了解。除了要对蓝牙的一些专业术语有所熟悉,还应该对蓝牙协议每层功能有一定认知。 概略图: 物理层(PHY): 调制、解调方式,工作频段,通信速率等控制。 链路层(LL): 负责广播、扫描、建立连接、维护连接等,展开来讲比如广播间隔、数据重传、接收发送等待超时等设置最后都在这一层中被实际应用。 ...

飞临云的博客 1万+

工程制图习题集张大庆课后习题答案解析

所以,我想向大家求助,希望能得到一些学习资料、学习方法和学习经验,帮助我更好地理解和掌握这门课程。在寻找学习资料的过程中,我发现了一款叫做资小料的APP,它里面有很多关于工程制图的学习资料,包括视频教程、习题解答和考试真题等。通过使用资小料,我逐渐掌握了工程制图的基本理论和方法,解决了很多学习中遇到的问题。在这里,我想推荐给和我一样在学习《工程制图习题集》这门课的同学们,希望大家也能从这款APP中受益,共同进步。上传者: 『Consentesdei』蒼迷穀。出版社: 清华大学出版社。

weixin_58833001的博客 925

【BLE】低功耗蓝牙开发重点注意项

如何基于原厂给的DEMO快速开发出BLE产品

大白嵌入式 2946

BERT之提取特征向量 及 bert-as-server的使用

本文内容列表提取句向量1、句向量简介1-1传统句向量1-2、BERT句向量2、 extract_features.py源码分析2-1 main函数 前一篇文章 BERT介绍及中文文本相似度任务实践 简单介绍了使用BERT进行中文文本相似度计算的方法,这篇文章着重对特征提取方法进行讲述。 提取句向量 1、句向量简介 1-1传统句向量 更多采用word embedding的方式取加权平均,该方法的一大...

ling620的专栏 1万+

单机多环境部署apollo 2.3.0

理解apollo的整体架构后,对比nacos配置中心功能点,其设计的复杂度以及完整度相较nacos而言更为丰富 对于不同的环境,例如 FAT, PRO 在部署时进程已经完全物理隔离,并且每个环境config/adminservice依赖的数据也完全物理隔离(连接不同的db),在数据隔离与安全方面做的很完善,但同时也提升了架构的复杂度 而 portal 可以管理多个环境,单节点部署虽然有单点问题,但并不会影响业务从configservice读取配置, 挂掉只要重启就可以,只是在

Life is a starting point everywhere 1299

c#读蓝牙数据_蓝牙开发零门槛之二:iBeacon

INGCHIPS 为客户提供易用的 SDK,帮助客户便捷、高效地开发蓝牙产品。SDK Overview本教程演示如何通过INGChips SDK开发 iBeacon 设备和 iBeacon 扫描器。iBeacon 由苹果公司开发,2013 年发布。利用 iBeacon 可以进行室内精准导航、定位,精准消息推送等,用途广泛。1、iBeacon 设备着手开发之前,先从 App Store 下载一个 i...

weixin_39871649的博客 791

量化交易——量化选股(多因子选股)

就是用过去的股票的收益率对多因子进行回归,得到一个回归方程,然后再把最新的因子值代入回归方程得到一个对未来股票收益的预判,然后再以此为依据进行选股。的方法是建立在市场无效或弱有效的前提之下,随着使用多因子选股模型的投资者数量的不断增加,有的因子会逐渐失效,而。就是根据各个因子的大小对股票进行打分,然后按照一定的权重加权得到一个总分,根据总分再对股票进行筛选。另一方面,一些因子可能在过去的市场环境下比较有效,而随着市场风格的改变,这些。波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的。

jiucaixiuyang的博客 1787

基于Nordic IN100芯片实现iBeacon与Eddystone双协议蓝牙信标开发

蓝牙低功耗(BLE)技术是实现物联网设备近场通信与感知的核心。其工作原理基于设备周期性广播包含特定信息的数据包,由扫描端接收并解析,从而实现无需配对的低功耗数据交互。这项技术的核心价值在于为室内定位、资产追踪和智能感知等场景提供了标准化、低成本的解决方案。本文聚焦于利用Nordic Semiconductor的IN100(nRF52810)芯片,深入实践如何构建一个同时支持苹果iBeacon与谷歌Eddystone协议的双模蓝牙信标。内容涵盖从芯片选型、协议帧结构解析,到使用nRF Connect SDK和

weixin_34129696的博客 305

从零到一:基于GeneMark-ES/ET的新基因组注释实战指南

本文提供了一份基于GeneMark-ES/ET的新基因组注释实战指南。详细介绍了从环境搭建、数据准备到核心运行的全流程,重点解析了ES(从头预测)与ET(结合RNA-Seq证据)两种模式的选择与操作,并分享了Perl模块依赖、并行处理等常见问题的解决方案,帮助生物信息学研究者高效完成基因预测工作。

weixin_29266647的博客 209

保姆级教程:在RK3588开发板上用CMake交叉编译ZLMediaKit(附完整toolchain配置)

本文提供了一份详细的RK3588开发板上使用CMake交叉编译ZLMediaKit的教程,包括完整的toolchain配置和实战避坑指南。从环境准备、工具链配置到依赖处理、编译部署,手把手指导开发者完成ARM64架构的流媒体服务搭建,特别适合嵌入式开发新手。

weixin_28681255的博客 383

基于Nordic BLE SoC的资产追踪系统设计与低功耗调优实战

在物联网硬件开发中,低功耗和室内定位是资产追踪场景的核心挑战。BLE(蓝牙低功耗)技术凭借极低的运行功耗、成熟的室内定位能力以及低成本部署优势,成为仓储盘点、设备管理等场景的理想选择。Nordic Semiconductor的nRF52与nRF53系列SoC,则在射频性能、睡眠电流和开发工具链上提供了可靠支撑。本文从BLE SoC的基本原理出发,介绍如何利用广播与连接模式实现资产发现和双向通信,并结合RSSI、AOA等定位机制完成区域级追踪。同时,围绕硬件最小系统设计、电池续航估算、广播参数权衡以及Powe

weixin_30908103的博客 453

华为云HCS解决方案笔记HUAWEI CLOUD Stack【面试篇】

华为云解决方案介绍、华为云服务介绍,华为云网络平面规划等

weixin_48375618的博客 1万+

[蓝牙协议栈]蓝牙广播

本文简单解释蓝牙广播。

qq_39258454的博客 4144

消息平台接入实战:Hermes Agent 实现微信/钉钉日常任务自动化的 4 步配置

揭示 Hermes Agent 接入微信/钉钉时高频失效的根本原因——非 API 调用问题,而是上下文边界缺失;详解通过 soul.md 锁定人格基线、skills/ 目录原子化封装技能、CLAUDE.md 控制记忆节奏、Docker 环境适配四步构建可信赖自动化信任链,并给出身份证号过滤、中文标点

weixin_42520239的博客 164

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

04_UUID128修改与广播名

UUID128 修改: fcc0s.h(54line) --->enum { ATT_USER_SERVER_FCC0 = ATT_UUID_16(0x0001), ATT_USER_SERVER_CHAR_FCC1 = ATT_UUID_16(0x0002), ATT_USER_SERVER_CHAR_FCC2 = ATT_

Chockong的博客 682

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

52810非4字节对齐地址、非4字节对齐长度、非4字节对齐源数据地址的flash写函数

在用nRF52810的flash驱动nrf_fstorage_write写数据时,发现驱动函数的3个参数:flash的物理地址,用户的数据缓存地址和长度都必须4字节对齐,比如你开一个uint8_t buff[16];用&buff[1]作为地址传入就会出错。 所以封装了一个可以非对齐的写入函数。 signed char fs_write(uint32_t wr_addr,uint8_t...

周星星_少年只有一个面的博客 1073

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

BLE蓝牙广播入门(二)

上一篇主要介绍一个BLE广播报文的结构以及报文头部各个部分的含义。在承接上一篇的基础上,本文将重点介绍广播报文PDU净荷的数据部分(AdvData)。

volunteer01的专栏 2877

蓝牙 BLE连接参数 连接间隔讲解 connection interval Slave latency timeout CH573 CH582 CH579 peripheral通用外设讲解

BLE、连接间隔、广播间隔、通用外设、从机

BLE_Baby的博客 1万+

广播

一、背景 链路层(LL)控制设备的射频状态,有五个设备状态:待机、广播、扫描、初始化和连接。 广播 为广播数据包,而 扫描 则是监听广播。 GAP通信中角色,中心设备(Central - 主机)用来扫描和连接 外围设备(Peripheral - 从机)。 大部分情况下外围设备通过广播自己来让中心设备发现自己,并建立 GATT 连接,从而进行更多的数据交换。 也有些情况是不需要连接的,只要外设广播自己的数据即可,用这种方式主要目的是让外围设备,把自己的信息发送给多个中心设备。 在蓝牙 4.x 的协议

GKoSon的博客 1089

RTL8762DK 环境搭建(一)

Bluetooth - RTL8762DK

qq_36075612的博客 4476

ble4.2广播数据类型

声明: 1、这里要注意区分广播类型和广播数据类型,本文聊聊广播数据类型; 2、本文依照蓝牙核心规范Core_v4.2、核心规范补充Css_v10、Generic Access Profile文档展开。 广播数据结构 可以看出广播数据格式由多个AD Structure 组成,每个AD Structure由3部分构成,Length、AD Type、AD Data组成,Length为1字节,表示AD Type、AD Data的总长度,现有的AD Type也都是一字节的 广播数据类型 在《Generic Acce

freemote的博客 5559

杰理之BLE名字修改【篇】

• BLE名字修改 搜索程序上 HCI_EIR_DATATYPE_COMPLETE_LOCAL_NAME字样,找到数据部分的传参就是实际的蓝牙名。有效数据部分 包含若干个广播数据单元,组成是: 长度 Len ,表示这个 AD Structure 的长度(除去 len本身 1) 类型 AD Type 标记这段广播数据代表什么, 比如设备名, uuid 等。数据 AD data 无效数据部分 广播包的长度必须是 31 个 byte,如果有效数据部分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的。

u013820168的博客 581

基于IAR移植sdk12.2.0建立nrf52832的工程———GPIO

工程伊始,需要在sdk包中拷贝三个重要的文件,blinky_iar_nRF5x.icf,iar_startup_nrf52.s,system_nrf52.c。 工程目录建立: 1、建立bsp文件,包括了开发板相关的头文件,开发板用PCA10040, 2、把sdk中的components目录中的drivers_nrf、libraries、device、toolchain,以及sdk_valid...

weixin_30336061的博客 902

NRF5 SDK蓝牙开发——NRF_LOG_INFO(...)通过串口输出的实现

NRF5 SDK蓝牙开发——NRF_LOG_INFO(…)通过串口输出的实现 开发环境 iar for arm开发平台 nrf52832开发板,使用P06引脚作为串口TX口 应用程序:nRF5_SDK_15.0.0_a53641a(examples/ble_central/ble_app_uart_c) 协议栈: s132_nrf52_6.0.0_softdevice.hex 由于直接编...

wayne2018的博客-心情驿站 1万+

一文说清nrf52832的MDK下载与调试配置

深入讲解nrf52832的mdk下载程序实现方法,结合实际开发需求,全面解析Keil环境下烧录与在线调试的关键配置步骤,帮助开发者快速上手nrf52832的mdk下载程序操作。

weixin_42524864的博客 475
上一篇: NRF5 SDK蓝牙开发——NRF_LOG_INFO(...)通过串口输出的实现
下一篇: USBCAN-I使用说明书(入门指引)
wayne2018
博客等级 码龄14年 175粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wayne2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值