那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術JAVA操作英創主板I2C接口簡介

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-02-06 11:06 ? 次閱讀

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

1、I2C簡介

I2C(Inter-Integrated Circuit)總線是一種2線制(串行數據SDA、串行時鐘頻率SCL)的主從通訊協議,主要運用于器件之間的數據通訊。SDA和SCL雙向漏極開路(Open Drain)并利用電阻將電位上拉,同一個I2C總線上可以掛載多個I2C設備,如下圖所示。

圖1I2C掛載設備示意圖

圖2I2C時序圖

I2C總線是電平有效,在SCL信號為高電平的時候采樣SDA信號。如上圖所示,其通信過程為:SDA從1變動到0,而SCL還是1時,表示開始數據傳輸。接下來的7位,就是設備的地址。緊接著的是讀寫標志,其為1時是讀取,為0則是寫。如果I2C總線上存在著和請求的地址相對應的設備,則從設備會發送一個ACK信號通知主設備,可以發送數據了。接到ACK信號后,主設備則發送一個8位的數據,然后等待ACK。當傳輸完畢之后,SCL保持為1,SDA從0變換到1時,表明傳輸結束。

2、I2C傳輸數據結構

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

public class I2CParam {

public byte SlaveAddr; //I2C從設備地址

public char RegAddr; //要訪問的I2C從設備寄存器地址

public byte[] Databuf; //寫入/讀出的數據緩存

}

其中,SlavaAddr是要訪問的從設備的地址,RegAddr是要訪問的從設備的寄存器地址,Databuf是用戶申請好的緩存區域,讀寫的長度由此緩存區域的長度(Databuf.length)決定。

3、I2C傳輸接口函數

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

public class I2C {

private int mFd;

public I2C() {

mFd = -1;

}

public void info() {

System.out.println("mfd " + mFd);

}

/**

* 打開/dev/i2c-0設備

* @return 成功返回非負設備描述符;失敗返回-1

*/

public native int Open();

/**

* 從I2C總線發送一幀數據,從設備的地址和寄存器地址由i2cparam指定

* @param i2cparam 指定發送從設備的地址和寄存器地址,以及攜帶的數據,數據長度由i2cParam.DataBuf.length決定

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

*/

public native int Write(I2CParam i2cparam);

/**

* 從I2C總線讀一幀數據,從設備地址和寄存器地址由i2cparam指定

* @param i2cparam 指定發送從設備的地址和寄存器地址,以及攜帶的數據,數據長度由i2cParam.DataBuf.length決定

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

*/

public native int Read(I2CParam i2cparam);

/**

* 關閉I2C設備

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

*/

public native int Close();

}

4、I2C從設備(鍵盤)程序

測試SPI接口的時候可以直接將MISO和MOSI短接就可以測試發送和接收數據,但I2C的測試不能,需要連接到真正的I2C從設備,根據其工作時序,完成I2C通信的測試。這里選擇英創ETA202 I2C鍵盤擴展模塊。英創已經封裝好了一個I2CKeypad.java類,對外提供OpenKeypad、ReadKeypad、CloseKeypad等接口來操作I2C鍵盤。這些接口的內部實現是通過I2C類的接口函數來完成對I2C鍵盤的操作。I2CKeyPad類的OpenKeypad接口主要內容如下:

public int OpenKeypad()

{

I2CParam i2cparam = new I2CParam();

......

mI2C = new I2C();

mIrq = new IRQ();

//1. open i2c bus

if(mI2C.Open() < 0)

{

System.out.println("I2C open failed\n");

return -1;

}

// 2. config tca8418

i2cparam.SlaveAddr = TCA8418_ADDR;

for(i=0;ilength;i++) {

i2cparam.RegAddr = (char) (TCA8418Config[i].ControlReg & 0x0ffff);

i2cparam.Databuf = new byte[1];

i2cparam.Databuf[0] = TCA8418Config[i].Command;

if(mI2C.Write(i2cparam) < 0) {

System.out.println("I2C write failed\n");

return -1;

}

}

//3. open irq1

if(mIrq.Open("/dev/esm6800_irq1") < 0) {

System.out.println("can not open irq");

return -1;

}

...

//4. 開啟中斷處理線程

scanThread = new Thread(new Runnable() {

public void run() {

mIrq.setTimeout(1000);

while(!Thread.currentThread().isInterrupted()) {

if(mIrq.WaitForIrq()>0) {

KeyScan();

}

}

System.out.println("scanThread exit");

}

});

scanThread.start();

}

I2CKeypad類在OpenKeyPad接口中使用I2C的Write接口對鍵盤掃描芯片tca8418進行了初始化設置,并開啟了監聽中斷處理線程。中斷處理線程中的KeyScan函數調用了I2C的Read接口去讀取事件信息,更新按鍵值。tca8418的各個寄存器功能,請參考模塊ETA202中的數據手冊。I2CKeypad類具體實現請結合tca8418的數據手冊參考源碼。

5、I2C鍵盤測試程序

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

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

public class testI2CMain {

static {

System.loadLibrary("emtronixhardware");

}

public static void main(String[] args) {

...

}

}

然后,就可以在main函數中實例化I2CKeypad類,先調用OpenKeypad接口初始化鍵盤,接著可調用I2CKeypad的ReadKeypad接口讀取按鍵信息:

public static void main(String[] args) {

I2CKeypad pad = new I2CKeypad();

int i1 = pad.OpenKeypad();

int key;

if(i1 < 0)

{

System.out.println("open keypad failed");

return;

}

for(i1 = 0; i1 < 10; ) {

key = pad.ReadKeypad();

if(key > 0) {

i1++;

System.out.println("-----key: 0x" + Integer.toHexString(key));

}

}

pad.CloseKeypad();

return ;

}

6、I2C鍵盤測試程序運行結果

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

圖2運行I2C鍵盤測試程序

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210385
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6086

    瀏覽量

    35612
收藏 人收藏

    評論

    相關推薦

    I2C總線通信原理 如何設計I2C總線電路

    、高效的通信接口標準。I2C總線通信原理主要包括以下要點: 總線結構 : I2C總線僅使用兩條信號線,即串行數據線(SDA)和串行時鐘線(SCL)。 SDA線路用于傳輸實際的數據信息
    的頭像 發表于 01-31 15:01 ?145次閱讀

    I2C總線與Arduino的接口示例

    在現代電子設計中,I2C總線因其簡單性和靈活性而廣受歡迎。它允許多個設備共享同一通信線路,從而節省空間和成本。Arduino,作為一個多功能的微控制器平臺,自然也支持I2C通信。 I2C總線
    的頭像 發表于 01-17 15:34 ?225次閱讀

    I2C總線應用實例分析

    I2C總線使用兩條線進行通信:數據線(SDA)和時鐘線(SCL)。這種雙線制設計使得I2C總線能夠在多個設備之間共享,而不需要為每個設備單獨布線。 應用實例:溫濕度傳感器 假設我們正在設計一個智能家居系統,需要實時監測室內的溫濕度。我們選擇使用一個帶有
    的頭像 發表于 01-17 15:09 ?194次閱讀

    AN-840: 通過I2C接口更新代碼

    電子發燒友網站提供《AN-840: 通過I2C接口更新代碼.pdf》資料免費下載
    發表于 01-15 16:04 ?0次下載
    AN-840: 通過<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>更新代碼

    UC-001:MicroConverter I2C兼容接口

    電子發燒友網站提供《UC-001:MicroConverter I2C兼容接口.pdf》資料免費下載
    發表于 01-15 15:51 ?0次下載
    UC-001:MicroConverter <b class='flag-5'>I2C</b>兼容<b class='flag-5'>接口</b>

    BTB擴展接口:LCD、Camera、UART、I2C等|詳解篇

    今天我們來學習的是BTB擴展接口的LCD、Camera、UART、I2C詳解,特別分享Air201硬件BTB擴展接口相關內容。
    的頭像 發表于 11-30 09:39 ?459次閱讀
    BTB擴展<b class='flag-5'>接口</b>:LCD、Camera、UART、<b class='flag-5'>I2C</b>等|詳解篇

    雅特力AT32F402/F405 I2C使用指南

    I2C接口簡介I2C接口是由數據線SDA和時鐘線SCL構成,在標準模式下通信速度可達到100kHz,快速模式下則可以達到400kHz,增強快
    的頭像 發表于 11-20 01:03 ?345次閱讀
    雅特力AT32F402/F405 <b class='flag-5'>I2C</b>使用指南

    RISC V的I2C操作

    :RISC V的I2C操作 文章出處:【微信公眾號:易靈思FPGA技術交流】歡迎添加關注!文章轉載請注明出處。
    的頭像 發表于 11-01 11:06 ?316次閱讀

    I2C基本指南

    電子發燒友網站提供《I2C基本指南.pdf》資料免費下載
    發表于 09-10 09:40 ?0次下載
    <b class='flag-5'>I2C</b>基本指南

    如何通過cyusb3014的i2c操作界面操作ads1119的i2c接口

    Addr_,但我只需要發送一條命令,如復位命令等。 根據 ads1119 的手冊。 如何通過 cyusb3014 的 i2c 操作界面操作 ads1119 的 i2c
    發表于 05-23 07:30

    I2C通訊為什么要用開漏輸出和上拉電阻?

    一、I2C總線簡介I2C(Inter-IntegratedCircuit)總線是一種雙向串行通信總線,由兩根線組成:SDA(數據線)和SCL(時鐘線)。這兩根線都是雙向的,并且是開漏輸出的,這意味著
    的頭像 發表于 05-16 08:10 ?7239次閱讀
    <b class='flag-5'>I2C</b>通訊為什么要用開漏輸出和上拉電阻?

    什么是I2C協議 I2C總線的控制邏輯

    在實際使用過程中,I2C比較容易出現的一個問題就是死鎖 ,死鎖在I2C中主要表現為:I2C死鎖時表現為SCL為高,SDA一直為低。
    發表于 03-12 09:17 ?1171次閱讀
    什么是<b class='flag-5'>I2C</b>協議 <b class='flag-5'>I2C</b>總線的控制邏輯

    i2c接口由哪幾根線組成 i2c接口可以接哪些器件

    I2C接口的線路可以適應不同的系統需求和器件規格,因此具體的線路配置可能會有所不同。但通常來說,時鐘線(SCL)和數據線(SDA)是I2C接口的核心線路。
    的頭像 發表于 03-05 16:55 ?3969次閱讀
    <b class='flag-5'>i2c</b><b class='flag-5'>接口</b>由哪幾根線組成 <b class='flag-5'>i2c</b><b class='flag-5'>接口</b>可以接哪些器件

    雅特力AT32F423 I2C使用指南

    I2C接口簡介I2C接口是由數據線SDA和時鐘線SCL構成,在標準模式下通信速度可達到100kHz,快速模式下則可以達到400kHz,增強快
    的頭像 發表于 02-19 13:26 ?686次閱讀
    雅特力AT32F423 <b class='flag-5'>I2C</b>使用指南

    什么是I2C接口?什么是I3C接口I2CI3C的區別

    I2C接口是一種串行通信協議,全稱為Inter-Integrated Circuit,即集成電路間總線。它是一種雙向、兩線制(SCL和SDA)的串行通信接口,主要用于連接微控制器和其他外圍設備,如傳感器、存儲器、顯示器等。
    的頭像 發表于 02-17 14:39 ?6736次閱讀
    什么是<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>?什么是<b class='flag-5'>I3C</b><b class='flag-5'>接口</b>?<b class='flag-5'>I2C</b>與<b class='flag-5'>I3C</b>的區別
    百家乐官网娱乐平台真人娱乐平台| 百家乐官网棋牌游| 百家乐包赢技巧| 功夫百家乐的玩法技巧和规则| 澳门足球博彩官网| 大发888截图| 百家乐官网在线直播| 实战百家乐官网十大取胜原因百分百战胜百家乐官网不买币不吹牛只你能做到按我说的.百家乐官网基本规则 | 百家乐直揽经验| 澳门永利| 百家乐记算| 关岭| 黄金城百家乐官网安卓版| 威尼斯人娱乐城吃饭| 百家乐官网佣金计算| 24山什么来龙是真龙| 大发888平台啥时候最赢钱| 百家乐官网有电脑游戏吗| 玩百家乐最好方法| 元游棋牌下载| 高档百家乐官网桌| 百家乐黄金城游戏大厅| 澳门赌场美女| 百家乐官网平注法亏损| 大发888手机客户端下载| 百家乐官网最佳注码法| 百家乐伴侣| 百家乐官网现场网络| 百家乐网址哪里有| 188比分直播网| 如何看百家乐官网的玩法技巧和规则| 莫斯科百家乐的玩法技巧和规则| 网上百家乐官网好玩吗| 伟易博百家乐现金网| 天天乐娱乐城| 百家乐的保单打法| 久盛国际娱乐场| 百家乐官网论坛bocaila| 博彩机| 风水8闰24山| 足球投注网站|