概念
串口通訊
- 概念;串口通訊(Serial Communications)按位(bit)發送和接收字節。
- 串口能夠在使用一根線(Tx)發送數據的同時用另外一根線(Rx)接收數據。
- 實現:經過打開JNI的調用,打開串口。獲取串口通訊中的輸入輸出流,經過操做IO流,達到可以利用串口接收數據和發送數據的目的
名詞解釋
private native FileDescriptor open(String absolutePath, int baudrate, int dataBits, int parity, int stopBits, int flags);
複製代碼
- absolutePath:串口的物理地址,通常硬件工程師都會告訴你的例如ttyS0、ttyS1等,或者經過SerialPortFinder類獲取可用的串口地址。
- baudrate:串口傳輸速率,一個設備在一秒鐘內發送(或接收)了多少碼元的數據,用來衡量數據傳輸的快慢,
- 即單位時間內載波參數變化的次數,如每秒鐘傳送240個字符,而每一個字符格式包含10位(1個起始位,1箇中止位,8個數據位),這時的波特率爲240Bd,比特率爲10位*240個/秒=2400bps。
- 波特率與距離成反比,波特率越大傳輸距離相應的就越短。
- dataBits:數據位長度,標準的值是六、7和8位。
- parity:奇偶校驗位,在串口通訊中一種簡單的檢錯方式,0-不校驗,1-奇校驗,2-偶校驗
- 對於偶和奇校驗的狀況,串口會設置校驗位(數據位後面的一位),用一個值確保傳輸的數據有偶個或者奇個邏輯高位。
- stopBits:中止位,用於表示單個包的最後一位。標準的值爲1或2位。
- 因爲數據是在傳輸線上定時的,而且每個設備有其本身的時鐘,極可能在通訊中兩臺設備間出現了小小的不一樣步。
- 所以中止位不單單是表示傳輸的結束,而且提供計算機校訂時鐘同步的機會。
- 適用於中止位的位數越多,不一樣時鐘同步的容忍程度越大,可是數據傳輸率同時也越慢。
- flags:默認爲0,表示可讀可寫,flags可經過與默認的O_RDWR(可讀可寫)進行位或計算來設置串口模式
- fd = open(path_utf, O_RDWR | flags);
串口文件打開模式
- O_RDONLY:以只讀方式打開文件
- O_WRONLY:以只寫方式打開文件
- O_RDWR:以讀寫方式打開文件
- O_APPEND:寫入數據時添加到文件末尾
- O_CREATE:若是文件不存在則產生該文件,使用該標誌須要設置訪問權限位mode_t
- O_EXCL:指定該標誌,而且指定了O_CREATE標誌,若是打開的文件存在則會產生一個錯誤
- O_TRUNC:若是文件存在而且成功以寫或者只寫方式打開,則清除文件全部內容,使得文件長度變爲0
- O_NOCTTY:若是打開的是一個終端設備,這個程序不會成爲對應這個端口的控制終端,若是沒有該標誌,任何一個輸入,例如鍵盤停止信號等,都將影響進程。
- O_NONBLOCK:該標誌與早期使用的O_NDELAY標誌做用差很少。程序不關心DCD信號線的狀態,若是指定該標誌,進程將一直在休眠狀態,直到DCD信號線爲0。
實際應用中,都會選擇阻塞模式,這樣更節省資源。可是若是但願在一個線程中同時進行讀寫操做,沒數據反饋時,線程就會阻塞等待,就沒法進行寫數據了。java
串口地址
以下表不一樣操做系統的串口地址,Android是基於Linux的因此通常狀況下使用Android系統的設備串口地址爲/dev/ttyS0...git
System |
Port 1 |
Port 2 |
IRIX® |
/dev/ttyf1 |
/dev/ttyf2 |
HP-UX |
/dev/tty1p0 |
/dev/tty2p0 |
Solaris®/SunOS® |
/dev/ttya |
/dev/ttyb |
Linux® |
/dev/ttyS0 |
/dev/ttyS1 |
Digital UNIX® |
/dev/tty01 |
/dev/tty02 |
工具