逻辑分析仪怎么添加自己需要的协议libsigrokdecode

Protocol decoder HOWTO
Protocol decoder API
串口示例
逻辑分析仪 怎么添加自己需要的协议?

背景

使用逻辑分析仪时候,发现可以自定义协议,使用的 libsigrokdecode ,那事情就简单了

步骤

路径

找到安装路径的decoders
在此文件夹下就是各种协议,新增协议在此文件夹直接增加就好,可以参考例子example
其中文件:

  • init.py 是必须的,从别的地方拷贝一个就好
  • pd.py 是你的实现

代码

pd.py 中 class Decoder(srd.Decoder):就可以进行实现,抄例子就好

设置参数和获取参数值

参数是可以做成下拉菜单或者输入方式
在这里插入图片描述
想要获取设置的值是通过self.options[‘你的字段’]

    # 开始执行解码任务时,由c底层代码自动调用一次# 这里,完成一些解码结果项annotation类型的注册# 类型有: OUTPUT_ANN,OUTPUT_PYTHON,OUTPUT_BINARY,OUTPUT_META# self.register函数是c底层类提供的def start(self):self.out_ann = self.register(srd.OUTPUT_ANN)self.rl78 = self.options['rl78_addr']self.tp_mode = self.options['tp_mode']
解析显示

在这里插入图片描述
这里的annotation_rows 我认为是分行显示,annotations是数据属性,比如一行有多个属性可以显示,几行是由annotation_rows 指定

解码函数
   	def decode(self):def decode(self, ss, es, data):

这里的有两种,一种是叠加协议的时候,是使用def decode(self, ss, es, data):,如果底层协议则使用 def decode(self):

显示注释函数
    def putx(self, data):self.put(self.ss, self.es, self.out_ann, data)

实际使用的就是self.put函数,ss 是开始位置,es是结束位置,out_ann输出的类型,这里是out_ann是屏幕,有其他参数可选

状态机

状态机比预期简单好多,每一步都是进入decode一次,比如在i2c上层的叠加协议,则是,每个都进来一次

# CMD: [annotation-type-index, long annotation, short annotation]
proto = {'START':           [0, 'Start',         'S'],'START REPEAT':    [1, 'Start repeat',  'Sr'],'STOP':            [2, 'Stop',          'P'],'ACK':             [3, 'ACK',           'A'],'NACK':            [4, 'NACK',          'N'],'BIT':             [5, 'Bit',           'B'],'ADDRESS READ':    [6, 'Address read',  'AR'],'ADDRESS WRITE':   [7, 'Address write', 'AW'],'DATA READ':       [8, 'Data read',     'DR'],'DATA WRITE':      [9, 'Data write',    'DW'],
}

在这里插入图片描述
ss es之间显示注释

        cmd, databyte = data

cmd是START这些, data是传入的字节,data不一定有值,有的cmd下没有值
判断可以使用 in 多个判断

    def reset(self):# 定义一个私有变量countself.state = 'IDLE'def start(self):self.out_ann = self.register(srd.OUTPUT_ANN)self.rl78 = self.options['rl78_addr']self.tp_mode = self.options['tp_mode']def decode(self, ss, es, data):cmd, databyte = dataif self.state == 'IDLE':if cmd in ('START', 'START REPEAT'):# self.putx([1, ['开始']])self.state = 'GET SLAVE ADDR'else:returnelif self.state == 'GET SLAVE ADDR':if cmd == 'ADDRESS WRITE':if databyte == self.rl78:self.putx([1, ['mcu 7位地址:0x%02X' % self.rl78]])self.state = 'IDLE'elif cmd == 'ADDRESS READ':if databyte == self.rl78:self.putx([1, ['mcu 7位地址:0x%02X' % self.rl78]])self.state = 'IDLE'

对于ACK NACK时候也是进入的,假如不进行判断,所以状态机没变化,可以用以下方式,将状态机回归到初始状态

            elif cmd in ('NACK', 'STOP'):self.state = 'IDLE'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/571584.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广发期货:从灾备中心、信创云到主中心,超融合支撑云化与国产化双转型

案例亮点 超过 30 节点承载灾备中心、信创云及主中心的 60% 以上业务系统。超融合信创资源池稳定运行超 1 年,承载 80% 以上的信创系统,顺利通过信创验收。引入超融合架构后,业务在 1 周内快速上线,稳定运行 3 年;减少…

Flexcel笔记

1.引入: uses {$IFDEF LINUX}SKIA.FlexCel.Core{$ELSE}{$IFDEF FIREMONKEY} FMX.FlexCel.Core{$ELSE}VCL.FlexCel.Core{$ENDIF}{$ENDIF} 2.核心单元介绍 FlexCel. XlsAdapter:这是FlexCel xls/x引擎。如果您正在处理xls或xlsx文件,则需要使用此单元…

蓝桥杯-单片机基础9——基于2023年官方onewire通信代码外设讲解(温度传感器DS18B20)

蓝桥杯单片机组备赛指南请查看这篇文章:戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写,代码可直接在比赛开发板上使用。 型号:国信天长4T开发板(绿板),芯片:IAP15F2K6…

第2章. 揭秘指令提示技术,轻松驾驭Chatgpt

Chatgpt的指令提示 想获取Chatgpt的高质文本?试试指令提示吧!为模型指明方向,它就能产出我们心仪的内容。 指令提示技术,就是给Chatgpt一个明确的指引。想让它输出什么,只需简单告诉它。 提示公式:按这个…

弹性伸缩 AS

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

第1章 实时3D渲染流水线

前言 本书所剖析的Unity 3D内置着色器代码版本是2017.2.0f3,读者可以从Unity 3D官网下载这些着色器代码。这些代码以名为builtin_shaders-2017.2.0f3.zip的压缩包的形式提供,解压缩后,内有4个目录和1个license.txt文件。 目录CGIncludes存放了…

python3字典的排序

创建一个字典 dict1{a:2,b:3,c:8,d:4} 1、分别取键、值 取字典的所有键,所有的值,利用dict1.keys(),dict1.vaules(), 由于键,值有很多个,所以要加s,另外注意这里要加括号,这样的小…

python3怎么下载

百度搜索“python官网”。 点击进入官网,如图所示: 依次点击“Download”-“windows”。 如图会出现下载选项,根据电脑情况选择,这里我选择64位的。 选择executable版进行安装。 至此下载完成。

小程序接入第三方信息流流程 下载SDK

由第三方信息流提供相应的SDK下载链接以及接入说明和开发文档或其他方式接入,如果第三方能支持小程序SDK,则不需要后面步骤,只需要提供相关开发文档和接入方式接口 接入SDK 后台开发人员接入第三方提供的SDK,并进行相关接口开发…

鸿蒙OS开发案例:【API9】遍历沙漏文件夹并输入文件的大小

1.获取打印文件大小 /*** 获取打印文件大小*/static getFileSize(byteNum: number) {if (byteNum < 0) {return "shouldnt be less than zero!";} else if (byteNum < 1024) {return ${byteNum.toFixed(3)}B;} else if (byteNum < 1048576) {return (byteNu…

pt-archiver的实践分享,及为何要用 ob-archiver 归档数据的探讨

作者简介&#xff1a;肖杨&#xff0c;软件开发工程师 在数据密集型业务场景中&#xff0c;数据管理策略是否有效至关重要&#xff0c;它直接关系到系统性能与存储效率的提升。数据归档作为该策略的关键环节&#xff0c;不仅有助于优化数据库性能&#xff0c;还能有效降低存储成…

四川宏博蓬达法律咨询有限公司:法律服务的典范,值得信赖的合作伙伴

在当今社会&#xff0c;法律服务已经成为人们生活中不可或缺的一部分。无论是个人还是企业&#xff0c;都可能遇到各种法律问题&#xff0c;需要专业的法律机构来提供支持和帮助。四川宏博蓬达法律咨询有限公司就是在这样的背景下应运而生&#xff0c;成为众多客户信赖的法律服…