<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • JAVA操作英創(chuàng)主板SPI接口簡介

     2017-9-26     作者:陳昌龍         
    文章標(biāo)簽:JavaSPI

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


    1、SPI簡介

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


    JAVA操作英創(chuàng)主板SPI接口簡介.gif

    圖1 SPI主從設(shè)備信號連接


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


    SPI mode CPOLCPHAComments
    000時(shí)鐘的空閑狀態(tài)為低電平;上升沿采樣
    101時(shí)鐘的空閑狀態(tài)為低電平;下降沿采樣
    210時(shí)鐘的空閑狀態(tài)為高電平;下降沿采樣
    311時(shí)鐘的空閑狀態(tài)為高電平;上升沿采樣

    表1 SPI四種數(shù)據(jù)傳輸模式


    2、SPI傳輸數(shù)據(jù)結(jié)構(gòu)

      英創(chuàng)提供的SPI傳輸數(shù)據(jù)結(jié)構(gòu)源文件為emtronix.hardware.SPITransfer.java。每一個(gè)SPITransfer類實(shí)例代表一次SPI傳輸,其主要成員變量如下所示:

      public class SPITransfer {

        /*寫數(shù)據(jù)緩存,只讀模式時(shí)為null*/

        public byte[]      tx_buf;

        /*讀數(shù)據(jù)緩存,只寫模式時(shí)為null */

        public byte[]      rx_buf;


        /* 緩存長度

              * 全雙工時(shí),讀寫緩存應(yīng)該長度相同;

              * 半雙工時(shí),非工作狀態(tài)的緩存為null

              */

             public int            len;              

             /*SPI時(shí)鐘頻率*/

             public int            speed_hz;           

             /*兩個(gè)SPITransfer之間的延時(shí)*/

             public char delay_usecs;      

             /*SPI傳輸字寬*/

             public byte  bits_per_word;   

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

             public byte  cs_change;         

             public int    pad;

      }


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


    3、SPI傳輸接口函數(shù)

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


      public class SPI {

           private int mFd;

          

           /**

            * 打開spi主設(shè)備,返回fd.自動(dòng)修改mFd

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

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

            */

           public native int Open(String dev);

     

           /**

            * 設(shè)置SPI的工作參數(shù)

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

            *                 四個(gè)參數(shù)之間不分順序“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傳輸參數(shù)

            * @param ntrans, 進(jìn)行ntrans次spi transfer

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

            */

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

          

           /**

            * 關(guān)閉SPI主設(shè)備

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

            */

           public native int Close() ;

      }


    4、SPI測試程序

      SPI傳輸接口中操作SPI的接口函數(shù)聲明都有native的前綴,表明其實(shí)現(xiàn)部分在本地的庫當(dāng)中。英創(chuàng)將所有英創(chuàng)主板的硬件接口訪問函數(shù)的實(shí)現(xiàn)部分編譯成了動(dòng)態(tài)鏈接庫libemtronixhardware.so,放在了文件系統(tǒng)/lib目錄下。


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

      public class testSPIMain {

             static {

                    System.loadLibrary("emtronixhardware"); 

             }

             public static void main(String[] args) {

             ...

             }

      }


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

      SPI spi = new SPI();

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


      接著,初始化SPI傳輸數(shù)據(jù)結(jié)構(gòu),發(fā)送數(shù)據(jù):

      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) {

                  //傳輸成功,處理數(shù)據(jù)       

            }


      其中,transcnt表示SPITransfer的個(gè)數(shù),每一個(gè)SPITransfer需要用戶自己實(shí)例化。


      最后,使用完畢后關(guān)閉SPI設(shè)備:

      spi.Close();


    5、SPI測試程序運(yùn)行結(jié)果

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


    JAVA操作英創(chuàng)主板SPI接口簡介.gif

    圖2 運(yùn)行SPI測試程序


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

    文章標(biāo)簽:JavaSPI
    老司机午夜精品视频播放| 久久只有这里有精品4| 中文字幕在线不卡精品视频99| AV天堂午夜精品一区| 国产成人午夜精品影院游乐网| 国产a久久精品一区二区三区| 7777精品久久久大香线蕉 | 亚洲欧洲美洲无码精品VA| 国产成人精品一区二三区熟女| 国产精品无码国模私拍视频| 精品国产福利片在线观看| 四虎精品影库4HUTV四虎| 国产私拍福利精品视频推出| 亚洲国产精品无码久久久秋霞2 | 国产精品成人无码久久久| 精品日韩亚洲AV无码 | 九九热视频精品在线| 国内精品伊人久久久影院| 久久99精品久久久久子伦小说| 2022精品天堂在线视频| 国精产品一品二品国精品69xx | 精品无码久久久久国产动漫3d| 日本精品在线视频| 亚洲精品乱码久久久久久蜜桃图片| 国产成人vr精品a视频| 久久精品国产色蜜蜜麻豆| 国产精品电影在线观看| 久久精品国产999大香线焦| 国产精品自拍亚洲| 亚洲国产精品久久| 手机日韩精品视频在线看网站| 亚洲精品无码专区在线播放| 亚洲精品熟女国产| 日韩精品无码熟人妻视频| 尤物yw午夜国产精品视频| 精品国内自产拍在线观看| 亚洲国产精品无码久久青草 | 国产麻豆精品入口在线观看 | 无码国产亚洲日韩国精品视频一区二区三区 | 好男人视频社区精品免费| 亚洲国产精品无码观看久久|