項目概況
我將使用泰克多域示波器3104解碼I2C數據,并通過順序輪詢所有地址并尋找確認(ACK)信號來確定設備的I2C地址。任何I2C設備都可以。我收到了英飛凌3D霍爾效應傳感器的評估套件,并將其用作我的I2C設備。
產品 | 成本(和產品鏈接) | 其他資訊 |
infineon3D磁性傳感器2 Go套件 | $ 28 | 套件手冊 | 傳感器手動 | 傳感器產品簡介 |
4位標題(0.100英寸) | $ 1 | 數據表 |
Arduino Uno R3 | $ 15 | 產品信息 |
雙向邏輯電平轉換器 | 三塊 | 數據表 |
跳線 | 三塊 |
如上所述,這里可以接受任何與I2C兼容的傳感器或顯示器。您無需使用電磁傳感器2 Go套件。
設置電路
我使用的Arduino板具有5V邏輯。3D2GO評估套件由3.3 V供電。這意味著必須在Arduino的數據線和評估套件之間插入雙向邏輯電平轉換器(BD-LLC)。
要將BD-LLC插入Arduino和I2C設備之間,請進行以下連接:
從Arduino到BD-LLC上的GND
BD-LLC到3D2GO上GND的GND
從Arduino到BD-LLC上的低壓(LV)的3.3V
BD-LLC上的LV至3D2GO上的3.3V
BD-LLC上的Arduino 5V至高壓(HV)
Arduino SDA轉HV1
Arduino SCL轉Hv2
BD-LLC LV1至3D2GO SDA
BD-LLC LV2至3D2GO SCL
設置示波器
接下來,您需要設置示波器。為此,請按照下列步驟操作:
打開示波器,然后等待它完成自檢。
將探頭插入通道1和通道2。
將探頭的接地夾連接到電路中的接地點(如有必要,請使用跨接線)。
將探頭1連接到SDA,將探頭2連接到SCL(如有必要,請使用跳線)。
現在,您可以打開Arduino IDE,并將以下代碼上傳到您的開發板上。這是一個I2C掃描器,它將掃描設備的所有地址并查找ACK響應。
//Attribution to Krodal, Nick Gammon, Anonymous
#include
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println(" I2C Scanner");
}
void loop()
{
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address <= 127; address++)
{
// The i2c_scanner uses the return value of
// Wire.endTransmission to seeIF
// a device acknowLEDged the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println("!");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found ");
else
Serial.println("done ");
delay(5000); // wait 5 seconds for next scan
}
復制代碼
現在,每5秒鐘,Arduino將輪詢I2C地址1-127。如果在被查詢的地址處存在設備,則將在發送地址字節后將SDA線拉低,從而向Arduino發送確認信號。
現在,我們可以繼續使用示波器對I2C總線進行解碼。
對于Tektronix MDO3000或MDO4000系列示波器,請執行以下步驟,并在括號中使用通用說明。
按下通道1按鈕(打開示波器通道1)
按“標簽”(如果可以,請標記您的輸入)
使用通用b向下滾動到“數據”(標簽通道1為“數據”)
選擇“插入預設標簽”
使用“通道1”按鈕下方的“垂直刻度旋鈕” 設置每格2伏(減小信號的高度,使其占不到屏幕的一半)
使用Channel 1按鈕 上方的旋鈕將信號移至屏幕的中上部分
按下“向下”箭頭移至“通道2”(打開示波器通道2)
使用通用b向下滾動到“ CLK”(標簽通道2為“clock”)
選擇“插入預設標簽”
按菜單關閉按鈕
按下頻道2按鈕
使用“通道2”按鈕下方的旋鈕設置每格2伏(減小信號的高度,使其不到屏幕的一半)
使用“通道2”按鈕上方的旋鈕將信號移到屏幕的下部中間(這將時鐘信號的跡線與數據信號的跡線分開)
按下B1按鈕(示波器的總線功能可讓您解釋和顯示串行或并行數據;在這種情況下,我們正在處理I2C數據)
使用通用a在通道2上選擇“ SCL”(將CLK通道分配為SCL)
使用通用b在通道1上選擇“ SDA”(將DATA通道分配為SDA)
使用通用a和通用b將SDA和SCL上的“閾值”設置為“ 1 V”
將“在地址中包含R / W”設置為“是”
將“ B1標簽”設置為“ I2C”(以保持跟蹤狀態)
將“總線顯示”設置為“總線和波形”
設置“十六進制”
按“總線B1”,然后使用通用a選擇“ I2C”(告訴示波器需要哪種數據類型)
選擇“定義輸入”
按下觸發菜單按鈕
選擇“公共汽車”
選擇“源B1-I2C”
選擇“開始時觸發”
按菜單關閉
使用Scale旋鈕將時間刻度更改為1.00 ms
按Single捕獲單個波形
使用Wave Inspector旋鈕放大要更仔細檢查的I2C事務的任何部分。在我的情況下,在地址0x5E之后接收到一個ACK,因為那是磁傳感器芯片的地址。
以下視頻引導您完成解碼I2C總線所需的步驟。(在Youtube,需要一定的上網工具支持)
解碼I2C總線所需的步驟
如何將數據從示波器保存到計算機解碼后的數據存儲在事件表中。您可以將其保存到USB驅動器或計算機中。
由于插入USB驅動器是一個簡單的例子,因此我們將通過遠程控制示波器來做到這一點。以下步驟特定于microsoft Windows以及Tektronix MDO3000和MDO4000系列示波器。
附帶說明,我們將要做的是潛在的數據安全風險。在工作之前,請與您的IT部門聯系。
我的計算機位于192.168.0.18,示波器位于192.168.0.40。對命令進行適當的調整。
以管理員身份運行CMD.EXE并鍵入以下內容以創建共享:
mkdir C:示波器
NET SHARE Scope = C: Oscilloscope / remark:“ TEK3104 Data” / grant:domain user,FULL//這將在您的主硬盤上創建一個名為“ Scope”的共享。您可以將其更改為所需的任何位置。確保將domain user更改為計算機連接到的域的名稱,或將PC的名稱更改為您用來登錄Windows的用戶名。
ipconfig//注意本地連接ipv4地址。在我的示例中,它是192.168.0.18。
接下來,當仍在CMD.EXE中時,使用PuTTY或telnet連接到示波器:
TELNET -O 192.168.0.40 4000//將192.168.0.40更改為您的示波器的IP,該IP在啟動時顯示在主屏幕上。
現在,您已通過默認端口4000上的IP地址連接到示波器。鍵入以下內容:
!d //清除設備。
files:mount:list?//這將顯示所有已安裝的驅動器。
files:mount:drive“ H:; 192.168.0.18; Scope; user; pass;”//這會在機器上的192.168.0.18處創建一個持久驅動器。
files:mount:list?//這將導致出現一個新的驅動器。
files:mkdir“ H:/ NewArticles”//在計算機上創建一個名為“ New Articles”的目錄。
files:cwd“ H:/ NewArticles” //將焦點更改到該目錄。
save:eventtable:B1“ eventtable.csv”//(最終)將數據保存到計算機。
結論
在不到15分鐘的時間里,我們對I2C總線進行了解碼,然后從整個房間將數據保存到計算機中進行分析。
現在已經建立了共享文件夾,以后的工作可以在幾分鐘之內完成。這種自動解碼過程比僅探測信號并嘗試手動解釋邏輯電平要有效得多。
我使用了本文中顯示的范圍和過程來解碼3D磁傳感器2 Go的幾種不同模式的I2C總線數據,并確定哪些命令對應于哪些電源模式。
責任編輯:xj
原文標題:如何在示波器上讀取I2C總線
文章出處:【微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。
-
示波器
+關注
關注
113文章
6256瀏覽量
185138 -
I2C
+關注
關注
28文章
1489瀏覽量
123896
原文標題:如何在示波器上讀取I2C總線
文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論