<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于FT311D的Android移動設備硬件接口拓展設計

          基于FT311D的Android移動設備硬件接口拓展設計

          作者: 時間:2016-10-08 來源:網(wǎng)絡 收藏

          摘要芯片為手機或平板電腦提供了轉外部UART、GPIO、PWM、I2C、SPI硬件功能。本文介紹了的硬件特點及其在平臺下的軟件開發(fā)方法。實驗表明,基于設備轉外部方案硬件設計簡單,軟件開發(fā)方便,可廣泛應用于物聯(lián)網(wǎng)、車載系統(tǒng)、POS機、智能醫(yī)療保健儀器設備等。

          本文引用地址:http://www.ex-cimer.com/article/201610/305466.htm

          引言

          目前,移動市場已經(jīng)急劇地改變了IT行業(yè)的格局,市場正在向智能手機和平板電腦等移動計算設備傾斜。因此,很多傳統(tǒng)的PC軟件的開發(fā)也正在迅速地向移動平臺遷移,Android智能手機和平板電腦移動設備逐步成為重要的計算應用平臺。

          由于考慮系統(tǒng)硬件體積、功耗、成本等因素,除了常用的接口外,基于Android的智能手機或平板電腦往往缺乏硬件拓展接口,這某種程度上限制了這些智能移動設備與物理世界的信息交互能力,例如外界傳感器數(shù)據(jù)的獲取,外部執(zhí)行裝置的控制和在車載系統(tǒng)、POS機、智能醫(yī)療保健儀器設備中的應用等。

          FT311D接口芯片能為Android手機或平板電腦提供USB轉外部UART、GPIO、PWM、I2C、SPI等硬件接口,無需安裝USB驅動,全面兼容USB 2.0接口,不需要軟件移植,不受Android操作系統(tǒng)升級的影響,只需安裝對應的APK就能實現(xiàn)數(shù)據(jù)通信,這有利于解決Android移動設備硬件接口的擴展難題。

          本文介紹了基于FT311D的Android移動設備的USB轉外圍硬件接口拓展方案,主要內容包括FT311D的硬件特點及其在Android平臺下的軟件開發(fā)方法。

          1 FT311D接口芯片

          FT311D芯片是由美國FTDI公司研制生產(chǎn)的面向Android移動設備的USB轉外部硬件接口解決方案。FT311D芯片直接集成了USB通信協(xié)議棧,它分別支持USB轉UART、GPIO、PWM、I2C、SPI。FT311D芯片系統(tǒng)功能如圖1所示。

          基于FT311D的Android移動設備硬件接口拓展設計

          當FT311D的外圍接口配置為UART串口模式時,該接口作為具有流控制的基本異步串行UART端口使用。FT311D的UART支持的波特率為300~921 600baud。其I2C總線主控端接口可以連接到支持125 kbps的I2C總線從控端接口。另外通用接口GPIO可以配置為提供多路脈沖寬度調制(PWM)輸出信號,這些輸出可用于控制電機、制動器、傳感器、DC/DC轉換器或AC/DC電源的PWM信號以及玩具、照明應用、家用電器和工業(yè)設備等。

          圖2為FT311D芯片引腳定義,F(xiàn)T311D系統(tǒng)原理框圖如圖3所示,主要引腳的功能略——編者注。

          基于FT311D的Android移動設備硬件接口拓展設計

          FT311D分別支持UART、GPIO、PWM、I2C、SPI硬件接口,具體接口類型由CNFG2、CNFG1和CNFG0引腳決定。接口的類型定義及其對應引腳略——編者注。

          2 軟件開發(fā)

          基于Android開發(fā)平臺的軟件開發(fā),F(xiàn)T311D硬件接口應用程序主要包括兩部分,即用戶層User Layer和接口層Layer,詳見圖4。

          基于FT311D的Android移動設備硬件接口拓展設計

          用戶層面向高層應用程序開發(fā),程序員不需要過多考慮Android設備與FT311D接口芯片通信的具體細節(jié),只需要借助相應的用戶函數(shù)即可實現(xiàn)USB轉GPIO/UART/I2C/SPI/PWM接口的驅動程序設計。而接口層則具體來執(zhí)行用戶層提供的API函數(shù)功能,實現(xiàn)FT311D與Andoid系統(tǒng)間的USB通信功能,涉及具體的通信協(xié)議和數(shù)據(jù)包格式等。FTDI公司提供了用戶層和接口層的Java類文件,可以很方便地編譯到用戶的應用程序中。

          3 系統(tǒng)應用開發(fā)實例

          接下來主要介紹FT311D作為UART串行通信接口時的驅動程序開發(fā)方法。在實際開發(fā)應用中,基于Android手機開發(fā)環(huán)境,F(xiàn)T311D硬件串口驅動軟件開發(fā)的著力點是UART Layer的API函數(shù)的正確使用。與圖4類似,圖5是UART串行通信驅動程序框圖。圖6為基于FT311D串行口,Android平板電腦與桌面PC串行通信實驗實物圖。

          基于FT311D的Android移動設備硬件接口拓展設計

          3.1 FT311-UART Layer

          FT311-UART Layer提供了UART接口類的用戶API函數(shù)。

          3.1.1 SetCofig函數(shù)

          函數(shù)SetConfig(int baudRate,byte dataBits,byte stopBits,byte parity,byte flowControl)的功能是設置串行通信幀格式包括通信波特率、停止位、校驗位等,在使用串口前,必須先使用該函數(shù)來進行正確的設置。

          baudRate波特率:最小是300,最大值是921 600,默認值是9 600。

          dataBits數(shù)據(jù)位:7位或8位。

          stopBits停止位:1或2位。

          Parity校驗位:0代表沒有校驗;1為奇校驗;2為偶校驗。

          flowControl流控:0為沒有,1代表有流控。

          3.1.2 SendData函數(shù)功能

          Send Data(byte numBytes,char[]buffer)向FT311DUART串行口發(fā)送數(shù)據(jù)。其中numBytes是發(fā)送的字節(jié)數(shù),最大值是256;buffer是所發(fā)送數(shù)據(jù)的地址指針。

          3.1.3 ReadData函數(shù)功能

          Read Data(byte numBytes,byte[]buffer,byte[]actualNumBytes)從FT311D UART串行口讀取數(shù)據(jù)。

          numBytes是接收的字節(jié)數(shù);buffer是所發(fā)送數(shù)據(jù)的地址指針;actualNumBytes是實際接收到的數(shù)據(jù)個數(shù)。

          3.2 FT311D串口通信代碼示例

          基于上述API函數(shù),示例代碼主要包括FT311D串行口配置、數(shù)據(jù)發(fā)送與接收。

          基于FT311D的Android移動設備硬件接口拓展設計
          基于FT311D的Android移動設備硬件接口拓展設計
          上一頁 1 2 下一頁

          關鍵詞: Android USB FT311D 接口

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();