2013年1月2日 星期三

[Arduino] Serial port的困惑解

Serial Port :
串列埠(Serial port)又稱「串列埠」,主要用於序列式逐資料傳輸。常見的有一般電腦應用的RS-232(使用 25 針或 9 針連結器)和工業電腦應用的半雙工RS-485全雙工RS-422
(轉自維基百科: http://zh.wikipedia.org/wiki/%E4%B8%B2%E5%8F%A3)

Serial.begin(Baud Rate): 
Baud Rate指從一裝置發到另一裝置的位元率,即每秒鐘多少位元bits per second (bit/s)。典型的鮑率是300, 1200, 2400, 9600, 115200, 19200等bit/s。一般通訊兩端裝置都要設為相同的鮑率,但有些裝置也可以設定為自動檢測鮑率。
(轉自維基百科: http://zh.wikipedia.org/wiki/RS232)


Baud Rate的速度要設多少:
取決於設備雙方的UART晶片接受的範圍,一般建議最高設到 115200

為什麼arduino都用Serial.begin(9600):
arduino範例這麼寫,也可使用別的baud rate,只要Serial.print使用相同baud rate即可

計算傳輸的速度:
9600 bps , bit per second
data byte 是 8-bit
傳輸的時候,一般用 n, 8, 1, 即 n parity bit, 8 data bits, 1 stop bit
所以一個 byte 傳輸時,實際是 1 start bit + 8 data bits + 1 stop bit = 10 bits

9600 / 10 = 960 bytes,一秒鐘可以傳 960 bytes

Arduino並不是真正的Serial Port 傳輸:
arduino 的COM port是透過板子上的 晶片模擬的
其實 Arduino 上有一顆晶片就是 USB to Serail converter
比如 Duemilanove 的 FT232r,或是 UNO 的 atmega16u2
所以真正 PC 的 COM Port 速度限制還要查 USB to Serial 晶片的 datasheet


解答感謝Cooper Maa