)
1 基本介绍之前写的太简单了用的也是DSO318这种非常简陋的。前阵淘了一个泰克的TDS1002这次用自己的示波器玩一下抓一下SPII2C。基本上和后面的手持差不多不过比较特殊的有几点。1 AUTOSET这个功能还挺好用的之前我买的小示波器上这功能都没有基本上接上信号源自动调就行了。或者如果显示不正常先按一下这个。不过这个只对连续波有效。2 探头校准直接接到右下角的信号输出。一开始波形是歪的比如这样这个时候要校正探头用一个非常小的螺丝刀直接在接探头的位置调就行了。有的地方说必须用塑料螺丝刀不过我实测用金属的是没问题。之后就对了。3 10X和1X细节不想说了基本上无脑选10X就行了。1X是用来看电源纹波的。剩下的上下左右基本操作就不多说了。2 触发触发模式有三种AutoNormalSingle。Single是单次很好理解。这里主要看看Auto和Normal。Auto就是默认模式这个是持续观察的模式。这个时候trigger level依然有效。但是如果信号在阈值以上可能一闪而过。如果信号在阈值以下可能会停一下然后闪过。这个时候直接设置为50%就行。也就是那个set to 50%按键。Normal模式下就主要是抓间歇性波形这个时候就需要根据你要抓取的信号手动调整trigger level。抓到之后屏幕就会停在那。一直到有新的触发信号。Single模式就是会一直停在那不管有没有新的信号。适合抓单次波形。现在用一个pinctrl小命令来触发板子还是树莓派5。sudo pinctrl set 11 dh; sudo pinctrl set 11 dl如果此时是auto模式会看到波形闪了一下然后很快就过去了。如果用normal模式就可以很清晰的看到抓到了的波形。这里遇到最大的问题的就是调整时间间隔也就是SEC/DIV那个旋钮调大了调小了都可能看不清。这个时候autoset也是不行的甚至可能需要你自己算出合适的时间间隔数据这样才能正常显示。这里的波形可以得知时基SEC/DIV当前处于M5.00ms。这意味着屏幕上水平方向的每一个大格子代表5毫秒的物理时间。脉冲宽度占格子数这个高电平方波在水平方向上刚好占据了接近1.5 个格子。物理时间换算1.5 * 5 7.5毫秒。垂直电压VOLTS/DIVCH1 2.00V。波形高度刚好高出基线一格半不到也就是3.3V这代表树莓派标准的高电平驱动输出。对整个命令来说第一条pinctrl进程在内核态完成拉高动作后需要退出、释放内存、返回用户态 Shell。Shell 解释器读取到分号;开始在 Linux 用户态调度、拉起第二条命令sudo pinctrl set 11 dl。第二条命令重新经历加载二进制文件、解析参数11 dl、再次通过系统调用Syscall沉入内核态。由于 Linux 是一个非实时Non-RT的通用多任务操作系统进程的创建、销毁、系统调用的上下文切换Context Switch全靠 CPU 分时调度。在树莓派 5 如此高频的 CPU 上这一整套软件层面的折腾刚好需要耗时约7.5ms在这期间硬件引脚没有任何人去修改它只能保持原状于是形成了这个平坦的3.3V顶部平台。好吧不知道是不是先这样认为吧。3 抓取SPI/I2C3.1 SPI抓取SPI的时候用的命令是while true; do echo -ne \xff\xff\xff\xff /dev/spidev0.0; sleep 0.01; done主要是抓MOSI和SCLK但是发现死活抓不到数据基本上就是一条直线。后面经过很多尝试把触发模式改成Normal而且把时间调到25ns才无意中抓到了SCLK。简单算了一下在25.0ns情况下。在一格的宽度里波形足足跳变了大约 3 个完整的周期上下上。25 / 3 8.33ns一个周期。1/8.33ns算成频率差不多是120MHz到125MHz。这个在sleep0.01秒的周期里面算非常小了而且这个时候已经超过了TDS1002的60MHz的范围所以auto下不能显示出来。之后再抓MOSI也出来了感觉是正常的毕竟都是ff嘛。3.2 I2C首先还是打开I2C重启之后就可以看到i2c的节点。tomraspberrypi:~$ ls -l /dev/i2c* crw-rw---- 1 root i2c 89, 1 Jun 12 18:54 /dev/i2c-1 crw-rw---- 1 root i2c 89, 13 Jun 12 18:54 /dev/i2c-13 crw-rw---- 1 root i2c 89, 14 Jun 12 18:54 /dev/i2c-14用pinctrl检查也配置成功了。tomraspberrypi:~$ pinctrl get 2,3 2: a3 pu | hi // GPIO2 SDA1 3: a3 pu | hi // GPIO3 SCL1安装工具tomraspberrypi:~$ sudo apt-get install i2c-tools Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: libi2c0 read-edid Suggested packages: libi2c-dev python3-smbus The following NEW packages will be installed: i2c-tools libi2c0 read-edid 0 upgraded, 3 newly installed, 0 to remove and 95 not upgraded. Need to get 104 kB of archives. After this operation, 787 kB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://deb.debian.org/debian trixie/main arm64 libi2c0 arm64 4.4-2 [9,736 B] Get:2 http://deb.debian.org/debian trixie/main arm64 i2c-tools arm64 4.4-2 [78.8 kB] Get:3 http://deb.debian.org/debian trixie/main arm64 read-edid arm64 3.0.2-1.1b1 [15.3 kB] Fetched 104 kB in 1s (80.4 kB/s) Selecting previously unselected package libi2c0:arm64. (Reading database ... 68710 files and directories currently installed.) Preparing to unpack .../libi2c0_4.4-2_arm64.deb ... Unpacking libi2c0:arm64 (4.4-2) ... Selecting previously unselected package i2c-tools. Preparing to unpack .../i2c-tools_4.4-2_arm64.deb ... Unpacking i2c-tools (4.4-2) ... Selecting previously unselected package read-edid. Preparing to unpack .../read-edid_3.0.2-1.1b1_arm64.deb ... Unpacking read-edid (3.0.2-1.1b1) ... Setting up libi2c0:arm64 (4.4-2) ... Setting up read-edid (3.0.2-1.1b1) ... Setting up i2c-tools (4.4-2) ... Processing triggers for man-db (2.13.1-1) ... Processing triggers for libc-bin (2.41-12rpt1deb13u2) ...之后就可以抓取了。没有发数据的时候都是会上拉到3.5V。发送命令是while true; do sudo i2cdump -y 1 0x50 b; sleep 0.05; done抓取的SDA数据线如下SCL时钟线如下两根线都是40MHz速度在发送。好了TDS1002还是太简陋一点带宽低也没有解码完全就是学习吧。。。