常見硬件通信協議總結

原文鏈接:https://blog.csdn.net/spenghui/article/details/72878968

 

(正好手上的nodemcu支持UART、SPI、I2C協議,所以這篇文章乾脆就用nodemcu來分析協議了~)
UART

用邏輯分析儀捕捉nodemcu init.lua給上位機發送 “A”:
-- init.lua
tmr.alarm(1, 1000, tmr.ALARM_AUTO, function()
    print('A')
end)
1
2
3
4
解碼設置: 

解碼結果: 

SPI

GitHub上的nodemcu項目編譯的固件中的spi沒法用,測了好久,時序都不對。所以用的Arduino for esp項目來測的SPI時序。
#include <SPI.h>
void setup()
{
  SPI.setDataMode(0);//SPI_MODE0  CPOL: 0  CPHA: 0
  SPI.begin();
  while (1)
  {
    SPI.transfer(0xAD);
  }
}
1
2
3
4
5
6
7
8
9
10
解碼設置: 

解碼結果: 

I2C
I2C協議只用到兩根線。具體細節可以參考I2C總線協議
-- init.lua
id  = 0
sda = 1
scl = 2

i2c.setup(id, sda, scl, i2c.SLOW)

tmr.alarm(1, 10, tmr.ALARM_AUTO, function()
    i2c.start(id)
    i2c.write(0, 0xAD)
    i2c.stop(id)
end)
1
2
3
4
5
6
7
8
9
10
11
12
解碼設置: 

解碼結果: 

這裏只是測試代碼,所以沒有從機對主機發出的信號做出應答,因而解碼結果中有非應答信號。
(USB)
本來是想分析一下USB協議的,結果一看才發現,我的媽呀,太多了。。以上協議傳輸單位爲字節,而USB傳輸單位爲packet,因而可以靈活定義數據傳送方式。所以以上協議相較於USB協議簡直就是小打小鬧啊=。= 
USB硬件接口有vcc gnd d+ d-,數據傳輸由d+ d-配合完成。基本知識可參考USB協議基本知識和USB通訊協議–深入理解 ,要想了解詳細內容還得深入研究,這方面的書太多太厚。。我這裏就不深究了,等以後要用到再說。
nodemcu的引腳細節可以看這裏
————————————————
版權聲明:本文爲CSDN博主「T_1」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/spenghui/article/details/72878968

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章