【经验】桃芯科技提供网页版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

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

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

设计经验    发布时间 : 2022-09-17

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

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

设计经验    发布时间 : 2022-09-18

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

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

商品及供应商介绍  -  桃芯科技 PPTX 中文 下载

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

描述- 桃芯科技是一家致力于高端物联网芯片国产化的芯片设计公司。现阶段主要研发基于自主蓝牙协议栈的低功耗BLE5.0、5.1、5.3 SoC芯片。同时,可提供基于自研BLE芯片的完整参考设计方案。支持蓝牙5.0、5.1的ING918X系列芯片,主要应用于汽车,电网,医疗,定位,高端消费等泛工业场景。支持蓝牙5.3的ING916系列芯片覆盖更多消费场景,包括可穿戴,Mesh,ESL,HID,AR,VR,智能家居等等。

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

选型指南  -  桃芯科技  - 2023/3/9 PDF 中文 下载

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

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

应用方案    发布时间 : 2024-04-22

【应用】桃芯科技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

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

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

应用方案    发布时间 : 2023-01-19

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

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

厂牌及品类    发布时间 : 2023-09-22

【产品】桃芯科技新推国产车规级低功耗SoC芯片ING91870CQ,支持定位,主频达48MHz

ING91870CQ是桃芯科技新发布的一款车规级低功耗SoC芯片。该芯片历经9个月的可靠性测试,最终获得AEC-Q100的测试认证。ING91870CQ是一款32pin,QFN32 4x4的封装的BLE5.1SoC。

新产品    发布时间 : 2022-09-23

桃芯科技携BLE5.3蓝牙芯片ING916X亮相“硬核中国芯领袖峰会“并获2022年度最佳通讯类芯片奖

2022年​11月15日,桃芯科技携全新BLE5.3蓝牙芯片ING916X系列通信芯片在“硬核中国芯领袖峰会”上精彩亮相并荣获“2022年度最佳通讯类芯片”:配置浮点MCU,具有超低功耗、主从一体多连接,支持标准和非标AoA/AoD,超高吞吐率等特性。

厂牌及品类    发布时间 : 2022-12-21

INGCHIPS Announced Smarter, Cooler, Smaller ING918xx Series BLE5.1 SoC with Sensitivity Reaching 102dB@125kbps

INGCHIPS recently released series low-power Bluetooth 5.1 SoC, ING918xx. The ING918xx series of chips, based on the concept of smarter, low power and smaller, have better performance in terms of BLE5.1 features, RF characteristics, low power consumption and overall chip specifications against the international top products.

产品    发布时间 : 2023-09-01

ING9187 BLE5.0 SoC Datasheet

型号- ING91871B,ING91870C,ING9187

数据手册  -  桃芯科技  - Version 1.0.0  - 12.05.2020 PDF 英文 下载

展开更多

电子商城

查看更多

只看有货

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥3.5334

现货: 7,470

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥6.1334

现货: 5,951

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥6.4706

现货: 5,151

品牌:芯海

品类:蓝牙芯片

价格:¥4.6667

现货: 990

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥2.8236

现货: 100

品牌:航顺芯片

品类:低功耗蓝牙SoC芯片

价格:¥9.6000

现货: 0

品牌:联盛德

品类:SoC芯片

价格:¥9.0000

现货: 0

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:

现货: 0

品牌:芯海

品类:低功耗蓝牙SOC芯片

价格:¥4.1530

现货: 0

品牌:航顺芯片

品类:低功耗蓝牙SoC芯片

价格:¥9.6000

现货: 0

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

暂无此商品

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

服务

查看更多

EDA芯片设计软件免费使用

世强深圳实验室提供Robei EDA软件免费使用服务,与VCS、NC-Verilog、Modelsim等EDA工具无缝衔接,将IC设计高度抽象化,并精简到三个基本元素:模块、引脚、连接线,自动生成代码。点击预约,支持到场/视频直播使用,资深专家全程指导。

实验室地址: 深圳 提交需求>

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

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

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

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

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

收藏
收藏当前页面