)
1 基本介紹之前寫的太簡單了用的也是DSO318這種非常簡陋的。前陣淘了一個(gè)泰克的TDS1002這次用自己的示波器玩一下抓一下SPII2C?;旧虾秃竺娴氖殖植畈欢嗖贿^比較特殊的有幾點(diǎn)。1 AUTOSET這個(gè)功能還挺好用的之前我買的小示波器上這功能都沒有基本上接上信號(hào)源自動(dòng)調(diào)就行了。或者如果顯示不正常先按一下這個(gè)。不過這個(gè)只對連續(xù)波有效。2 探頭校準(zhǔn)直接接到右下角的信號(hào)輸出。一開始波形是歪的比如這樣這個(gè)時(shí)候要校正探頭用一個(gè)非常小的螺絲刀直接在接探頭的位置調(diào)就行了。有的地方說必須用塑料螺絲刀不過我實(shí)測用金屬的是沒問題。之后就對了。3 10X和1X細(xì)節(jié)不想說了基本上無腦選10X就行了。1X是用來看電源紋波的。剩下的上下左右基本操作就不多說了。2 觸發(fā)觸發(fā)模式有三種AutoNormalSingle。Single是單次很好理解。這里主要看看Auto和Normal。Auto就是默認(rèn)模式這個(gè)是持續(xù)觀察的模式。這個(gè)時(shí)候trigger level依然有效。但是如果信號(hào)在閾值以上可能一閃而過。如果信號(hào)在閾值以下可能會(huì)停一下然后閃過。這個(gè)時(shí)候直接設(shè)置為50%就行。也就是那個(gè)set to 50%按鍵。Normal模式下就主要是抓間歇性波形這個(gè)時(shí)候就需要根據(jù)你要抓取的信號(hào)手動(dòng)調(diào)整trigger level。抓到之后屏幕就會(huì)停在那。一直到有新的觸發(fā)信號(hào)。Single模式就是會(huì)一直停在那不管有沒有新的信號(hào)。適合抓單次波形?,F(xiàn)在用一個(gè)pinctrl小命令來觸發(fā)板子還是樹莓派5。sudo pinctrl set 11 dh; sudo pinctrl set 11 dl如果此時(shí)是auto模式會(huì)看到波形閃了一下然后很快就過去了。如果用normal模式就可以很清晰的看到抓到了的波形。這里遇到最大的問題的就是調(diào)整時(shí)間間隔也就是SEC/DIV那個(gè)旋鈕調(diào)大了調(diào)小了都可能看不清。這個(gè)時(shí)候autoset也是不行的甚至可能需要你自己算出合適的時(shí)間間隔數(shù)據(jù)這樣才能正常顯示。這里的波形可以得知時(shí)基SEC/DIV當(dāng)前處于M5.00ms。這意味著屏幕上水平方向的每一個(gè)大格子代表5毫秒的物理時(shí)間。脈沖寬度占格子數(shù)這個(gè)高電平方波在水平方向上剛好占據(jù)了接近1.5 個(gè)格子。物理時(shí)間換算1.5 * 5 7.5毫秒。垂直電壓VOLTS/DIVCH1 2.00V。波形高度剛好高出基線一格半不到也就是3.3V這代表樹莓派標(biāo)準(zhǔn)的高電平驅(qū)動(dòng)輸出。對整個(gè)命令來說第一條pinctrl進(jìn)程在內(nèi)核態(tài)完成拉高動(dòng)作后需要退出、釋放內(nèi)存、返回用戶態(tài) Shell。Shell 解釋器讀取到分號(hào);開始在 Linux 用戶態(tài)調(diào)度、拉起第二條命令sudo pinctrl set 11 dl。第二條命令重新經(jīng)歷加載二進(jìn)制文件、解析參數(shù)11 dl、再次通過系統(tǒng)調(diào)用Syscall沉入內(nèi)核態(tài)。由于 Linux 是一個(gè)非實(shí)時(shí)Non-RT的通用多任務(wù)操作系統(tǒng)進(jìn)程的創(chuàng)建、銷毀、系統(tǒng)調(diào)用的上下文切換Context Switch全靠 CPU 分時(shí)調(diào)度。在樹莓派 5 如此高頻的 CPU 上這一整套軟件層面的折騰剛好需要耗時(shí)約7.5ms在這期間硬件引腳沒有任何人去修改它只能保持原狀于是形成了這個(gè)平坦的3.3V頂部平臺(tái)。好吧不知道是不是先這樣認(rèn)為吧。3 抓取SPI/I2C3.1 SPI抓取SPI的時(shí)候用的命令是while true; do echo -ne \xff\xff\xff\xff /dev/spidev0.0; sleep 0.01; done主要是抓MOSI和SCLK但是發(fā)現(xiàn)死活抓不到數(shù)據(jù)基本上就是一條直線。后面經(jīng)過很多嘗試把觸發(fā)模式改成Normal而且把時(shí)間調(diào)到25ns才無意中抓到了SCLK。簡單算了一下在25.0ns情況下。在一格的寬度里波形足足跳變了大約 3 個(gè)完整的周期上下上。25 / 3 8.33ns一個(gè)周期。1/8.33ns算成頻率差不多是120MHz到125MHz。這個(gè)在sleep0.01秒的周期里面算非常小了而且這個(gè)時(shí)候已經(jīng)超過了TDS1002的60MHz的范圍所以auto下不能顯示出來。之后再抓MOSI也出來了感覺是正常的畢竟都是ff嘛。3.2 I2C首先還是打開I2C重啟之后就可以看到i2c的節(jié)點(diǎn)。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) ...之后就可以抓取了。沒有發(fā)數(shù)據(jù)的時(shí)候都是會(huì)上拉到3.5V。發(fā)送命令是while true; do sudo i2cdump -y 1 0x50 b; sleep 0.05; done抓取的SDA數(shù)據(jù)線如下SCL時(shí)鐘線如下兩根線都是40MHz速度在發(fā)送。好了TDS1002還是太簡陋一點(diǎn)帶寬低也沒有解碼完全就是學(xué)習(xí)吧。。。