激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

JAVA操作英創主板SPI接口簡介

 2017-9-26     作者:陳昌龍         
文章標簽:JavaSPI

  2017年9月,英創在Linux的文件系統中移植了針對嵌入式Linux的JRE(Java Runtime Environment),能夠支持Java應用程序的運行。由于Java語言不能直接訪問硬件資源,英創提供了Java硬件支持包,主要支持的工控接口有:以太網、串口、CAN、GPIO、SPI、I2C、RTC等。本文主要介紹使用Java語言調用英創Java硬件支持包,操作英創主板SPI接口的過程。


1、SPI簡介

  SPI(Synchronous Peripheral Interface)是一種同步串行數據通訊總線接口,常用于連接ADCs、EPROMs、Sensors或者是其他一些微控制器,SPI具有兩種工作模式:master和slave模式,其中master模式提供時鐘信號。


JAVA操作英創主板SPI接口簡介.gif

圖1 SPI主從設備信號連接


  SPI有四種數據傳輸模式,如表1所示,主要差別在于:輸出串行同步時鐘極性(CPOL)和相位(CPHA)可以進行配置。


SPI mode CPOLCPHAComments
000時鐘的空閑狀態為低電平;上升沿采樣
101時鐘的空閑狀態為低電平;下降沿采樣
210時鐘的空閑狀態為高電平;下降沿采樣
311時鐘的空閑狀態為高電平;上升沿采樣

表1 SPI四種數據傳輸模式


2、SPI傳輸數據結構

  英創提供的SPI傳輸數據結構源文件為emtronix.hardware.SPITransfer.java。每一個SPITransfer類實例代表一次SPI傳輸,其主要成員變量如下所示:

  public class SPITransfer {

    /*寫數據緩存,只讀模式時為null*/

    public byte[]      tx_buf;

    /*讀數據緩存,只寫模式時為null */

    public byte[]      rx_buf;


    /* 緩存長度

          * 全雙工時,讀寫緩存應該長度相同;

          * 半雙工時,非工作狀態的緩存為null

          */

         public int            len;              

         /*SPI時鐘頻率*/

         public int            speed_hz;           

         /*兩個SPITransfer之間的延時*/

         public char delay_usecs;      

         /*SPI傳輸字寬*/

         public byte  bits_per_word;   

         /*本次傳輸完成之后,是否改變片選*/

         public byte  cs_change;         

         public int    pad;

  }


  SPI傳輸使用同步時鐘,在發送的同時,也在接收數據。因此其傳輸數據結構要同時擁有寫數據緩存tx_buf和讀數據緩存rx_buf才能支持這種全雙工工作模式,并且兩個緩存區域長度都為len字節。當然,如果要使用半雙工讀/寫,只需要讓tx_buf/rx_buf等于null就可以了。speed_hz為SPI的時鐘頻率,esm335x最大時鐘頻率48MHz,esm6800最大時鐘頻率60MHz;delay_usecs表示連續傳輸的Transfer之間的間隔,單位為微秒;bits_per_word表示一個字有幾個比特組成,最大32;cs_change表示本次傳輸完成后是否修改片選信號;pad暫時不用設置,保留。


3、SPI傳輸接口函數

  英創提供的SPI傳輸接口源文件為emtronix.hardware.SPI.java。用戶在實例化SPI類后可以調用Open、SetSPI、Transfer、Close對SPI硬件接口進行操作。SPI類的具體信息如下,其中mFd為設備描述符,用戶不用設置,由接口函數自動修改。


  public class SPI {

       private int mFd;

      

       /**

        * 打開spi主設備,返回fd.自動修改mFd

        * @param dev "/dev/spidev1.0"

        * @return 成功返回spi主設備描述符,失敗返回-1

        */

       public native int Open(String dev);

 

       /**

        * 設置SPI的工作參數

        * @param args "S16000000-M1-B16-D100" S為時鐘速率,M為數據傳輸模式(0-3),B為數據位寬,D發送完后的延時

        *                 四個參數之間不分順序“M1-D100-B16-S16000000”與之前的相同

        * @return 成功返回0;失敗返回-1

        */

       public native int SetSPI(String args);

      

       /**

        * SPI一次傳輸,trans.tx_buf=null,trans.rx_buf != null, only receive;

        *                  trans.tx_buf!=null,trans.rx_buf=null,only send;

        *                  trans.tx_buf!=null,trans.rx_buf!=null, send&receive

        * @param trans, 一次spi傳輸參數

        * @param ntrans, 進行ntrans次spi transfer

        * @return   成功返回0;失敗返回-1

        */

       public native int Transfer(SPITransfer[] trans, int ntrans);

      

       /**

        * 關閉SPI主設備

        * @return 成功返回0;失敗返回-1

        */

       public native int Close() ;

  }


4、SPI測試程序

  SPI傳輸接口中操作SPI的接口函數聲明都有native的前綴,表明其實現部分在本地的庫當中。英創將所有英創主板的硬件接口訪問函數的實現部分編譯成了動態鏈接庫libemtronixhardware.so,放在了文件系統/lib目錄下。


  在編寫SPI傳輸主程序的時候,首先需要加載該庫,如下所示:

  public class testSPIMain {

         static {

                System.loadLibrary("emtronixhardware"); 

         }

         public static void main(String[] args) {

         ...

         }

  }


  然后,就可以在main函數中實例化SPI類,并打開主板的SPI設備:

  SPI spi = new SPI();

  spi.Open("/dev/spidev1.0");


  接著,初始化SPI傳輸數據結構,發送數據:

  int transcnt = 1;

       SPITransfer[] trans = new SPITransfer[transcnt];

       trans[0] = new SPITransfer();

       trans[0].tx_buf = tArray;

       trans[0].rx_buf = rArray;

       trans[0].len = bytes;

       trans[0].speed_hz = speed;

       trans[0].bits_per_word = (byte) bitspw;

       if(spi.Transfer(trans, transcnt) == 0) {

              //傳輸成功,處理數據       

        }


  其中,transcnt表示SPITransfer的個數,每一個SPITransfer需要用戶自己實例化。


  最后,使用完畢后關閉SPI設備:

  spi.Close();


5、SPI測試程序運行結果

  運行SPI傳輸Java主程序需要把編譯結果bin文件中的所有目錄文件拷貝到主板/mnt/nandflash,或者通過nfs掛載到主板/mnt/nfs目錄下。然后,使用“java 包名.類名”運行,如下圖所示:


JAVA操作英創主板SPI接口簡介.gif

圖2 運行SPI測試程序


  以上就是使用Java操作英創主板SPI接口的介紹,感興趣的客戶可以通過電話或者郵件聯系英創工程師。我們將提供Java示例程序源碼供客戶參考。

文章標簽:JavaSPI
主站蜘蛛池模板: 亚洲第一页在线视频| 一区二区三区在线观看视频| 欧美久色| 国产高清在线精品免费不卡| 91视频播放| 国产日韩欧美亚洲综合在线| 青青青视频精品中文字幕| 亚洲最新色图| jizz中国zz女人18| 五月婷婷俺也去开心| 亚洲成a人v天堂网| 成年大片免费高清在线看黄| 欧美精品国产制服第一页| 国产精品一区欧美激情| 黄视频免费在线看| 成人午夜网站| 国产网站免费看| 久久精品嫩草影院免费看| 青草视频在线观看视频| 亚洲 欧美 激情 另类 校园| 在线网站 看片 网站| 999精品影视在线观看| 三毛片| 日本三级2018亚洲视频| 毛片在线免费播放| 亚洲精品视频免费看| 伊人久久大香线焦综合四虎| 欧美一级视频免费看| 国内外成人免费在线视频| 国产亚洲精品va在线| 国产初高中生厕所小便| 国产情侣草莓视频在线| 视频在线二区| 美国黄色在线观看| 高清影院在线欧美人色| 黄色录像在线免费观看| 精品一二区| 黄色香蕉视频网站| 黄色无遮挡| 黄的三级在线播放| 麻豆va一区二区三区久久浪|