【经验】桃芯科技提供网页版Log记录器可通过BLE蓝牙从空中抓取Trace数据

2022-09-19 桃芯科技官网
网页版Log记录器,蓝牙soc芯片,ING918xx,桃芯科技 网页版Log记录器,蓝牙soc芯片,ING918xx,桃芯科技 网页版Log记录器,蓝牙soc芯片,ING918xx,桃芯科技 网页版Log记录器,蓝牙soc芯片,ING918xx,桃芯科技

Trace对于分析协议栈流程问题非常重要。考虑到蓝牙设备的多样性,Trace数据的导出、记录由开发者在应用里实现。作为参考,桃芯科技SDK里提供了SWD、UART两种“有线”方式,Wizard能够自动生成相关代码(https://ingchips.gitee.io/user_guide/tutorial.html#common-functions-page)。在某些情况下,“有线”方式可能难以使用,得益于桃芯科技蓝牙soc芯片ING918xx EFlash的应用内编程(In-Application Programming,或称自编程,Self Programming)特性,可以先将Trace保存到Flash里(https://ingchips.gitee.io/blog/2021-12-04-sdk-6.7-new/#5-trace-到-flash-的使用方法),然后导出。


还有一条通道可以用来导出数据:BLE空口。本文介绍如何通过BLE从空中抓取Trace数据。针对本文提供的参考实现,桃芯科技提供了网页版Log记录器。(https://ingchips.gitee.io/web_apps/air_trace/index_cn.html)


说明:该功能相关代码将(或已)在版本8.0.0中发布,参考UART GATT Console示例。在版本发布之前,开发者可以按照需要将本文提供的方法加入已有的项目中。


注意:本方法仅用调试。强烈不建议在量产产品中保留此功能,以免泄露敏感信息。


目前存在的四种导出/记录Trace数据的方法总结如下:

总体思路

1.定义Trace服务,包含一个Trace Data特性(Characteristics);

2.实现Trace事件的回调,将数据写入一个环形缓冲区;

3.当缓冲区内数据积累到一定量时,通过Trace Data特性发送数据。


接口定义

我们将该功能跟GATT Profile做隔离,定义以下接口。


//初始化。
// msg_id 用于 `btstack_push_user_msg`
// req_thres 用于控制 `btstack_push_user_msg` 的调用时机
void trace_air_init(trace_air_t *ctx, uint32_t msg_id, uint8_t req_thres);

//当用于Trace的BLE连接建立时,使能;当连接断开时,禁用
// conn_handle为连接句柄
// value_handle为Trace Data的句柄
void trace_air_enable(trace_air_t *ctx, int enable, uint16_t conn_handle, uint16_t value_handle);

//在收到msg_id这条用户消息时,调用该函数发送Trace数据
void trace_air_send(trace_air_t *ctx);

//Trace事件的回调
uint32_t cb_trace_air(const platform_evt_trace_t *trace, trace_air_t *ctx);


具体实现

  • 定义Trace Service

  • 上下文信息

上下文信息的定义如下,主要包含环形缓冲区,句柄信息和状态:


typedef struct
 {
     // 环形缓冲区
     uint8_t           buffer[TRACE_BUFF_SIZE];
     uint16_t          write_next;
     uint16_t          read_next;

     SemaphoreHandle_t mutex;
     uint32_t          msg_id;
     uint16_t          value_handle;
     uint16_t          conn_handle;
     uint8_t           req_thres;
     uint8_t           enabled:1;
     uint8_t           msg_sent:1;   //防止重复调用btstack_push_user_msg
 } trace_air_t;


  • cb_trace_air

cb_trace_air 与 trace.c 模块的 cb_trace_uart 相似,唯一需要注意的是需要丢弃用于Trace的BLE连接上的ACL数据:


uint32_t cb_trace_air(const platform_evt_trace_t *trace, trace_air_t *ctx)
 {
 #pragma pack (push, 1)

     typedef struct
     {
         uint32_t A;
         uint32_t B;
         uint8_t  id;
         uint8_t  tag;
     } header_t;

     if (trace->len1 == sizeof(header_t))
     {
         const header_t *p = (const header_t *)trace->data1;
         if ((p->id == PLATFORM_TRACE_ID_HCI_ACL) && (p->tag == (ctx->conn_handle << 1)))
             return 0;
     }

 #pragma pack (pop)

     uint16_t next;
     int free_size;
     uint8_t use_mutex = !IS_IN_INTERRUPT();

     if (use_mutex)
         xSemaphoreTake(ctx->mutex, portMAX_DELAY);

     next = ctx->write_next;
     free_size = ctx->read_next - ctx->write_next;
     if (free_size <= 0) free_size += TRACE_BUFF_SIZE;
     if (free_size > 0) free_size--;

     free_size -= trace->len1;
     free_size -= trace->len2;
     if (free_size < 0)
     {
         if (use_mutex)
             xSemaphoreGive(ctx->mutex);
         trace_air_send_req(ctx);
         return 0;
     }

     next = trace_add_buffer(ctx->buffer, (const uint8_t *)trace->data1, trace->len1, next) & TRACE_BUFF_SIZE_MASK;
     next = trace_add_buffer(ctx->buffer, (const uint8_t *)trace->data2, trace->len2, next) & TRACE_BUFF_SIZE_MASK;

     ctx->write_next = next;

     if (use_mutex) xSemaphoreGive(ctx->mutex);

     if (free_size < ctx->req_thres)
         trace_air_send_req(ctx);

     return 0;
 }


其中trace_air_send_req的参考实现如下:

static void trace_air_send_req(trace_air_t *ctx)
 {
     if ((0 == ctx->enabled) || ctx->msg_sent) return;
     ctx->msg_sent = 1;
     btstack_push_user_msg(ctx->msg_id, NULL, 0);
 }


  • trace_air_send

trace_air_send 与 ring_buf.c 模块的 ring_buf_peek_data 类似:


static int peek_data(trace_air_t *ctx, uint8_t *data, int len, uint8_t has_more)
 {
     int r = 0;
     int mtu = att_server_get_mtu(ctx->conn_handle) - 3;

     uint8_t *p = data;
     while (len)
     {
         int size = len > mtu ? mtu : len;
         if (att_server_notify(ctx->conn_handle, ctx->value_handle, p, size))
         {
             break;
         }
         len -= size;
         p += size;
         r += size;
     }

     return r;
 }

 void trace_air_send(trace_air_t *ctx)
 {
     ctx->msg_sent = 0;
     if (0 == ctx->enabled) return;

     uint32_t read_next = ctx->read_next;
     const uint32_t write_next = ctx->write_next;
     while (read_next != write_next)
     {
         int cnt = read_next > write_next ? sizeof(ctx->buffer) - read_next : write_next - read_next;
         int has_more = read_next > write_next ? 1 : 0;
         int c = peek_data(ctx, ctx->buffer + read_next, cnt, has_more);
         if (c < 1)
             break;
         read_next += c;
         if (read_next >= sizeof(ctx->buffer)) read_next = 0;
     }
     ctx->read_next = read_next;
 }

授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由ll转载自桃芯科技官网,原文标题为:蓝牙开发零门槛之十一-通过 BLE 抓取 Trace,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关研发服务和供应服务

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

为ING916搭建Zephyr开发环境

​对于ING916/ING918 的NoOS 软件包,可以使用 Zephyr OS作为实时内核。SDK v8.4.1 提供了完整的 Controller 接口,可以对接 Zephyr BLE Host 协议栈。这里桃芯科技将为ING916 搭建 Zephyr 开发环境。在这个环境下,开发者可以使用 Zephyr RTOS 及其 BLE 协议栈。

2024-09-09 -  设计经验 代理服务 技术支持 批量订货

【经验】桃芯科技蓝牙5.1芯片ING918xx的SDK介绍及其hello 世界示例

INGCHIPS(桃芯科技)为客户提供易用的SDK,帮助客户便捷、高效地开发蓝牙产品。该SDK支持目前桃芯的ING918xx系列所有蓝牙5.1芯片。本文将介绍该SDK及其hello 世界的示例。

2022-09-18 -  设计经验 代理服务 技术支持 批量订货

【经验】桃芯科技ING91881B蓝牙开发板基本操作介绍

桃芯科技支持蓝牙5.0、5.1的ING918X系列芯片,主要用于汽车,电网,医疗,定位,高端消费等泛工业场景。支持蓝牙5.3的ING916系列芯片覆盖消费场景,包括可穿戴,HID,ARVR,智能家居等等。本文介绍ING91881B开发板的一些基本操作。

2022-09-17 -  设计经验 代理服务 技术支持 批量订货

【视频】桃芯科技BLE+UWB+NFC三合一汽车钥匙,完美解决10厘米安全定位

型号- ING91871B,ING91881B,ING91682C,ING91870C,ING91680C,ING91880C,ING91888A,ING91870CQ

桃芯科技  - 商品及供应商介绍 代理服务 技术支持 批量订货

ING91683C BLE5.3 SoC规格书

描述- 本资料介绍了ING91683C蓝牙低能耗(BLE5.3)系统单芯片(SoC)。该芯片符合蓝牙5.3规范,集成了调制解调器、链路层控制器和主机在内的内部BLE5.3 IP。它还集成高性能32位RISC微控制器、DSP和FPU、512KB闪存、低功耗PMU、丰富的外设和高性能低功耗BLE射频收发器。支持OTA和多启动选项,便于产品功能推广和升级。

型号- ING91683C

17.08.2024  - 桃芯科技  - 数据手册  - Version 1.1 代理服务 技术支持 批量订货 查看更多版本

【应用】桃芯科技ING918X低功耗蓝牙SOC帮助客户实现智能烧烤探针实时温度上报需求,工温高达125℃

智能烧烤领域对BLE SOC的要求在于高温环境中的稳定性、低功耗等特性。桃芯科技ING918x系列芯片作为工规/车规级BLE SOC ,稳定工作温度高达125℃,并拥有优秀的功耗表现,完全可以cover客户应用。支持BLE5.0&BLE5.1全特性自研协议栈,集成了32位RISC MCU,16KB ROM,128KB RAM,512KB嵌入式eFlash和丰富的外设资源。

2023-09-08 -  应用方案 代理服务 技术支持 批量订货

桃芯科技(INGCHIPS)BLE芯片选型表

目录- BLE芯片产品    BLE 5.0/5.1 SOC   

型号- ING91871B,ING91881B,ING91682C,ING91680C,ING91870C,ING91880C,ING91888A,ING91870CQ

2023/3/9  - 桃芯科技  - 选型指南 代理服务 技术支持 批量订货

ING91682C BLE5.3 SoC规格书

描述- 本资料介绍了ING91682C蓝牙低能耗(BLE5.3)系统芯片(SoC)。该芯片符合蓝牙5.3规范,集成了Modem、链路层控制器和主机等内部BLE5.3 IP。它还集成高性能32位RISC微控制器、DSP和FPU、512KB闪存、低功耗PMU、丰富的外设和高性能低功耗BLE射频收发器。芯片支持OTA和多启动选项,便于产品功能推广和升级。

型号- ING91682C

17.08.2024  - 桃芯科技  - 数据手册  - Version 1.1 代理服务 技术支持 批量订货 查看更多版本

【应用】桃芯科技蓝牙芯片ING9188助力电子全站仪,支持蓝牙5.0/5.1,实测最大传输距离可达370米

全站仪是建筑行业常用的一种工具,用于建筑测量,随着当前科技发展,目前已经从纯机械向电子化、自动化发展。本文介绍桃芯科技新出ING9188系列蓝牙芯片可实现实测最大传输距离370米,助力电子全站仪的设计和开发。

2023-01-19 -  应用方案 代理服务 技术支持 批量订货

桃芯科技ING9XX系列蓝牙SoC用在APPLE Findmy Network Accessory

桃芯科技的ING9XX系列BLE芯片成功通过苹果授权的第三方机构进行的各项合规性验证,该系列芯片已经全面兼容Find My network accessory的功能要求,可为第三方硬件产品提供高效快速寻找丢失物品的低功耗蓝牙应用方案。

2024-04-22 -  应用方案 代理服务 技术支持 批量订货

桃芯科技欢迎您参加世界智能网联汽车大会,将携低功耗蓝牙车规级SoC芯片及汽车数字车钥匙解决方案参展

桃芯科技是一家致力于车规级,工规级通信芯片的Fabless芯片设计公司。现阶段主要研发基于自主蓝牙协议栈的低功耗BLE5.0、5.1、5.3、5.4 SoC芯片。同时,可提供基于自研BLE芯片的完整参考设计方案。

2023-09-22 -  原厂动态 代理服务 技术支持 批量订货

ING91870CQ BLE5.1 SoC规格书

描述- 本资料介绍了ING91870CQ蓝牙低能耗(BLE5.1)系统芯片(SoC),该芯片符合AEC-Q100 Grade 2标准。ING91870CQ集成了Modem、链路层控制器和主机在内的内部BLE5.1 IP,并具备高性能32位RISC MCU、512KB嵌入式闪存、低功耗PMU、丰富的外设和高性能低功耗BLE射频收发器。支持多种IDE平台和编程语言,适用于智能汽车应用、极低功耗操作、精确定位、工业互联等多种场景。

型号- ING91870CQ

23.05.2023  - 桃芯科技  - 数据手册  - Version: 1.0.1 代理服务 技术支持 批量订货 查看更多版本

ING9187 BLE5.0 SoC规格书

描述- 本资料介绍了ING9187蓝牙低能耗(BLE5.0)系统单芯片(SoC),提供了将其集成到产品中的充分信息。ING9187是一款完全集成的BLE5.0规范SoC,包含调制解调器、链路层控制器和主机等内部BLE5.0 IP,并集成了高性能32位RISC微控制器、512KB嵌入式闪存、低功耗PMU、丰富的外设和高性能低功耗BLE射频收发器。

型号- ING91871B,ING91870C,ING9187

23.05.2023  - 桃芯科技  - 数据手册  - Version: 1.0.1 代理服务 技术支持 批量订货 查看更多版本

ING91680C BLE5.3 SoC规格书

描述- 本资料详细介绍了ING91680C蓝牙低功耗(BLE5.3)系统芯片(SoC)。该芯片符合蓝牙5.3规范,集成了INGCHIPS的BLE5.3 IP,包括调制解调器、链路层控制器和主机。它还集成了高性能32位RISC MCU、DSP和FPU、512KB闪存、低功耗PMU、丰富的外设和高效低功耗BLE射频收发器。芯片支持OTA和多种引导选项,便于产品功能推广和升级。

型号- ING91680A,ING91680C

13.07.2024  - 桃芯科技  - 数据手册  - Version 1.0.2 代理服务 技术支持 批量订货 查看更多版本
展开更多

电子商城

查看更多

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥6.1334

现货: 5,951

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥6.4706

现货: 5,151

品牌:芯海

品类:蓝牙芯片

价格:¥4.6667

现货: 990

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥3.5334

现货: 240

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥2.8236

现货: 100

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:

现货: 0

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥4.1530

现货: 0

品牌:航顺芯片

品类:低功耗蓝牙SoC芯片

价格:¥9.6000

现货: 0

品牌:联盛德

品类:SoC芯片

价格:¥5.6300

现货: 0

品牌:航顺芯片

品类:低功耗蓝牙SoC芯片

价格:¥9.6000

现货: 0

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

暂无此商品

海量正品紧缺物料,超低价格,限量库存搜索料号

服务

查看更多

物联网天线方案设计/虚拟天线芯片方案设计

Ignion可支持多协议、宽频段的物联网天线方案设计,协议:Wi-Fi、Bluetooth、UWB、Lora、Zigbee、2G、3G、4G、5G、CBRS、GNSS、GSM、LTE-M、NB-IoT等,频段范围:400MHz~10600MHz。

最小起订量: 2500 提交需求>

语音/录音芯片定制

提供语音芯片、MP3芯片、录音芯片、音频蓝牙芯片等IC定制,语音时长:40秒~3小时(外挂flash),可以外挂TF卡或U盘扩容。

最小起订量: 1pcs 提交需求>

查看更多

授权代理品牌:接插件及结构件

查看更多

授权代理品牌:部件、组件及配件

查看更多

授权代理品牌:电源及模块

查看更多

授权代理品牌:电子材料

查看更多

授权代理品牌:仪器仪表及测试配组件

查看更多

授权代理品牌:电工工具及材料

查看更多

授权代理品牌:机械电子元件

查看更多

授权代理品牌:加工与定制

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面