RCSN嵌入式

文章数:46 被阅读:160721

账号入驻

看呆了!竟然有mcu自带逻辑分析仪功能??

最新更新时间:2024-11-01
    阅读数:

一、聊一聊

逻辑分析仪这玩意,拥有了几个,比如梦源的DSlogic,章鱼哥的PXlogic,金沙滩的selease,这些方案都是FPGA,采集性能无需置疑。自己曾经也想试试在MCU进行DIY一下,过过下小瘾。


在一次偶发翻看先楫的HPM6E00的用户手册时,在GPIO章节发现了一个新奇的外设-LOBS,逻辑观察模块,这让人好比看腻了千篇一律的GPIO,突然袭来的一阵新鲜感,也开启了这个外设的探索之旅。从外设功能看,主要是trace gpio功能,可以采集触发之前和之后的指定数量的gpio状态。



本文也就借着这个外设简单搭建下基本的采集上报功能,简单DIY了个32通道的基于pluseview的逻辑分析仪,对应的是PORT的32个pin,每个通道的GPIO状态都是通过lobs外设采集存储上报。


还是那句话,源码链接:

https://github.com/RCSN/hpm_sdk_extra.git

路径在demos/digital_logic_analyzer_hpm_for_pulseview中。


二、看一看

对于先楫的HPM6E00,发布的时候,ethercat的外设好像盖过了这个MCU的其他外设,让人觉得这个亮点就是ethercat,但是亮点也不仅仅是ethercat,还有其他外设的新增以及原有外设的功能增加,比如本文的Lobs逻辑观察模块。


该外设的功能比较丰富,内部章节寄存器描述也比较完善,官方对于该外设的功能描述也大体一两句话概括。本文就根据该功能描述进行简单的阐述,对于更详细的内容可参考用户手册以及hpm_sdk的lobs例子。



三、探一探

(一)满足什么期待的条件会送到LOBS采集

注意:这里的DI表示GPIO的输入信号电平,DO代表GPIO的输出信号电平,OE代表是GPIO的属性是输入还是输出。


在官方的配置须知可知,可以两个条件触发。简单理解就是可以类似是定时器的输入引脚触发,一个是内部计数器计数重载触发。


1、LOBS一共有5个触发状态数组,每一组触发完成后都可以通过NETSTATE寄存器互相指向,每个state只能指定一个GPIO PORT。


2、当该state的NEXTSTATE为0时,也就是标志触发采集完成。如果需要下次再次触发,需要重新打开采集。

简单理解就是:

对于触发信号,当输入检测到高电平或者低电平时,对应stata开始触发采集,电平触发取决于设置的golden值。


在SDK中也做了封装处理,比如触发的信号PF26,golden值为ture,那么就是高电平触发采集。


对于计数器触发,可以理解为计数器计数到比较值时停止采集,比较值就是采集的数量。


(二)GPIO数值怎么存储

lobs支持两个模式,一个是支持单group,一个是支持双group,简单理解就是,一个state要么只能采集单个gpio port,要么采集两个gpio port。两种模式都占用128bit内存,也就是16字节。


其中单group可以采集整个port的pin脚,每个pin占用3个bit,128bit中占用有效是3*32=96bit,高32bit被固定字节占用。手册中如是描述:


而有效bit对应的gpio顺序如下:


这里可以用结构体简单封装下,如此一来就可以通过位域读取每个Pin的DI/DO/OE。


对于双group,需要注意的是有效只有8bit,就是存储的最低8bit,但需要的内存占用同样也是128bit,方便在于可以只采集关心的Pin脚的信号,比如DI或者DO或者OE,在SDK也提供展示。


本文代码主要参考hpm_sdk的sample-lobs,根据上述的功能描述进行拆分阐述。


该sample主要演示lobs的trace功能,可以监视跟踪触发之前和触发之后的gpio状态,从readme可以看到:

这里以单group进行阐述:


1、group的采集长度为1024笔数据,主要体现在赋值的开始和结束地址,lobs会自动算出总采集长度


2、state0设置信号触发之前的触发模式,比如使用信号触发,触发信号选择,并把触发之后指向state1。注意的是,触发信号的选择只能在state设置group,比如state设置的是PA,那么触发信号只能在PA00到PA31之间选择。


3、state1设置信号触发之后的触发模式,比如使用计数器比较触发,比较值设置。设置的比较值为1024-64=960个数据。也就是说state0触发前会采集64个数据。不指向下一个state,当前state作为最后一个state。


四、测一测

为了直观查看lobs的数据是否准确采集,可以通过pluseview上位机采集显示,对于pluseview逻辑分析仪这里不多介绍,协议使用的是sump协议,可以采用串口通信,这里为了方便采用USB的cdc功能,使用的参考例子是sdk中的cherryusb的cdc acm例子。


需要告知pluseview当前的型号,采样率等等


在收到sump的meta指令时,把以上的数据发给上位机


打开pluseview,以下选择,上位机就检测到对应的设备,点击Ok。


出现32通道设备。


当收到run指令时候,开启lobs采集,收到reset指令时采集关闭,关闭lobs采集。


在关闭和打开Lobs时,需要unlock解锁,配置完最好lock加锁。对应的api如下。


打开Lobs采集


关闭lobs采集


这里只使用一个state,模式为单group 128bit,故状态设置为最后一个,不使用信号采集,单纯使用计数器比较。如下:


采集的Buffer进行一些转换


最终上报


这里使用的group为5,对应的port也就是PF00~PF31

引入一个PWM到PF9脚,pluseview开启采集,可以看到通道9已经采集到PWM。


五、总个结

本文以简单DIY个逻辑分析仪功能,抛砖引玉,希望一起探索和挖掘更多的用法。



 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved