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
    +关注

    关注

    88

    文章

    11538

    浏览量

    214964
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6105

    浏览量

    36480
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    智慧新核心,龙芯主板助力信体系再升级

    信息技术飞速发展的当下,信体系的自主可控与创新升级已成为国家战略层面的关键任务。作为信产业发展的重要基础硬件支撑,国产工控主板正发挥着日益重要的作用。
    的头像 发表于 08-11 09:14 ?123次阅读

    高效率、6通道、白光LED驱动器,带I2C接口 skyworksinc

    电子发烧友网为你提供()高效率、6通道、白光LED驱动器,带I2C接口相关产品参数、数据手册,更有高效率、6通道、白光LED驱动器,带I2C接口的引脚图、接线图、封装手册、中文资料、英
    发表于 07-30 18:31
    高效率、6通道、白光LED驱动器,带<b class='flag-5'>I2C</b><b class='flag-5'>接口</b> skyworksinc

    飞腾主板为信产业发展提高硬实力

    信息技术飞速发展的当下,信产业已成为我国实现科技自立自强、保障国家信息安全的关键领域。信,即信息技术应用创新,其核心目标是实现
    的头像 发表于 07-22 18:20 ?311次阅读

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络安全、推动产业升级和实现数字主权的重任。简单来
    的头像 发表于 06-13 10:06 ?3091次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略

    浪潮下,国产主板有什么新的发展机遇?

    信息技术应用创新浪潮的推动下,国产主板迎来了诸多新的发展机遇。信产业旨在实现信息技术领域的自主可控,这一战略目标为国产主板的发展提供了广
    的头像 发表于 05-09 09:24 ?286次阅读
    信<b class='flag-5'>创</b>浪潮下,国产<b class='flag-5'>主板</b>有什么新的发展机遇?

    简单了解I2C接口

    在电子电路的复杂世界里,各种电路模块设备需要相互通信才能协同工作 ,I2C接口就像是电路模块设备间的沟通桥梁,今天就带大家深入了解它。
    的头像 发表于 05-08 14:15 ?1195次阅读
    简单了解<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>

    I2C总线通信原理 如何设计I2C总线电路

    、高效的通信接口标准。I2C总线通信原理主要包括以下要点: 总线结构 : I2C总线仅使用两条信号线,即串行数据线(SDA)和串行时钟线(SCL)。 SDA线路用于传输实际的数据信息
    的头像 发表于 01-31 15:01 ?1315次阅读

    I2C总线与Arduino的接口示例

    在现代电子设计中,I2C总线因其简单性和灵活性而广受欢迎。它允许多个设备共享同一通信线路,从而节省空间和成本。Arduino,作为一个多功能的微控制器平台,自然也支持I2C通信。 I2C总线
    的头像 发表于 01-17 15:34 ?1772次阅读

    I2C总线应用实例分析

    I2C总线使用两条线进行通信:数据线(SDA)和时钟线(SCL)。这种双线制设计使得I2C总线能够在多个设备之间共享,而不需要为每个设备单独布线。 应用实例:温湿度传感器 假设我们正在设计一个智能家居系统,需要实时监测室内的温湿度。我们选择使用一个带有
    的头像 发表于 01-17 15:09 ?904次阅读

    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 ?1229次阅读
    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 ?1050次阅读
    雅特力AT32F402/F405 <b class='flag-5'>I2C</b>使用指南

    RISC V的I2C操作

    :RISC V的I2C操作 文章出处:【微信公众号:易灵思FPGA技术交流】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 11-01 11:06 ?803次阅读

    I2C基本指南

    电子发烧友网站提供《I2C基本指南.pdf》资料免费下载
    发表于 09-10 09:40 ?0次下载
    <b class='flag-5'>I2C</b>基本指南