Android平臺的串口通訊技術

串口

概念

串口通訊

  • 概念;串口通訊(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

工具

相關文章
相關標籤/搜索