簡單好玩的Arduino通訊埠介紹
Arduino具有UART、I2C、SPI、GPIO
GPIO : 全名是General Purpose Input/Output,他可以根據程式指令,設定輸入或輸出為高電壓或者低電壓
pinMode(pin, mode); //mode可為INPUT or OUTPUT
digitalWrite(ledpin,HIGH); //output mode
val=digitalRead(inPin); //input mode
UART : 全名是Universal Asynchronous Receiver/Transmitter,屬於非同步傳輸通稱,如: RS232、RS422、RS485
RS232(Recommemded Standard): 為全雙工串列傳輸,有開始字元0,結束字元1,實現方式簡單,但只能連接一個裝置
RS485: 差動半雙工,多用於多裝置連接
RS422: 差動全雙工,多用於長距離傳輸,可多裝置
I2C(Inter-Integrated Circuit) : 串列通訊匯流排,半雙工同步傳輸,有一條時脈線(SCL)和一條資料線(SDA),為廣播式(master-slave),主要為了讓微控制器或CPU以較少的接腳連接眾多週邊低速設備
三種通訊速度 :
- Standard : 100 Kbps
- Fast mode : 400 Kbps
- High-speed mode : 3.4 Mbps
在傳送的第一個位元組上指定 7 bits位址 or 10 bits address,7 bits address只能0x08~0x77,10 bits address可以0x77以上,如果有相同位址則使用多工器。
有雙向確認機制,確定週邊裝置有跟上。
- idle時,兩條線都為high
- 只有SCL為LOW時,SDA才可以改變HIGH、LOW
- SCL為HIGH時,SDA變動代表start or stop
- start、 stop由master發出
- start之後,bus視為busy
- 資料為 8 bits長,而且每 8 bits就要有ack
start + address + write(0) + slave_ack + data + slave_ack + data + slave_ack + data + slave_ack + stop
start + address + read(1) + slave_ack + data + master_ack + data + master_ack + data + master_ack + stop
SPI(Serial Peripheral Interface Bus) : 全雙工串列同步傳輸,包含master、slave,無確認機制
SCLK(Serial Clock): 由master發出
MOSI(master output,slave input)
MISO(master input,slave output)
SS(slave selected): 低凖位表選取
< 興趣很難發覺,只有多方嘗試 >
- 這裡紀錄著我的心路歷程,每一篇文章都代表著進步
分享不錯的練習平台 https://www.codingame.com/
一起進步吧