0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术JAVA操作英创主板SPI接口简介

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-06 11:09 次阅读

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模式提供时钟信号

图1SPI主从设备信号连接

SPI有四种数据传输模式,如表1所示,主要差别在于:输出串行同步时钟极性(CPOL)和相位(CPHA)可以进行配置。

SPI mode CPOL CPHA Comments
0 0 0 时钟的空闲状态为低电平;上升沿采样
1 0 1 时钟的空闲状态为低电平;下降沿采样
2 1 0 时钟的空闲状态为高电平;下降沿采样
3 1 1 时钟的空闲状态为高电平;上升沿采样

表1SPI四种数据传输模式

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

*@paramdev "/dev/spidev1.0"

*@return成功返回spi主设备描述符,失败返回-1

*/

publicnativeintOpen(String dev);

/**

*设置SPI的工作参数

*@paramargs "S16000000-M1-B16-D100" S为时钟速率,M为数据传输模式(0-3),B为数据位宽,D发送完后的延时

* 四个参数之间不分顺序“M1-D100-B16-S16000000”与之前的相同

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

*/

publicnativeintSetSPI(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

*@paramtrans,一次spi传输参数

*@paramntrans,进行ntrans次spitransfer

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

*/

publicnativeintTransfer(SPITransfer[] trans,intntrans);

/**

*关闭SPI主设备

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

*/

publicnativeintClose() ;

}

4、SPI测试程序

SPI传输接口中操作SPI的接口函数声明都有native的前缀,表明其实现部分在本地的库当中。英创将所有英创主板的硬件接口访问函数的实现部分编译成了动态链接库libemtronixhardware.so,放在了文件系统/lib目录下。

在编写SPI传输主程序的时候,首先需要加载该库,如下所示:

publicclasstestSPIMain {

static{

System.loadLibrary("emtronixhardware");

}

publicstaticvoidmain(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 包名.类名”运行,如下图所示:

图2运行SPI测试程序

以上就是使用Java操作英创主板SPI接口的介绍,感兴趣的客户可以通过电话或者邮件联系英创工程师。我们将提供Java示例程序源码供客户参考。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35196
收藏 人收藏

    评论

    相关推荐

    国产工控主板,信产业发展新引擎

    在当今科技飞速发展的时代,信产业正成为国家战略的重要支撑。而我们的国产工控主板,以其卓越的性能和可靠的品质,为信产业的发展注入强大动力。国产工控主板在信
    的头像 发表于 11-06 10:29 140次阅读

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 371次阅读

    锐恩科技引领微控制器MCU技术创新,赋能多元化应用!

    ,成为国家高新技术半导体企业的佼佼者。锐恩科技不仅致力于为客户提供高可靠性、高性能、高性价比的一站式半导体芯片供应服务,更在8位和32位MCU市场不断创新,推动技术进步与产品应用拓展。
    发表于 09-29 13:40

    引领智能未来:锐恩科技的国产低功耗单片机ENMCU

    在科技飞速发展的今天,低功耗单片机的应用越来越广泛,尤其是在安防监控、智能家居和微波雷达照明等领域。作为国内专精特新国家高新技术半导体企业,锐恩科技致力于为客户提供高性能、低功耗的单片机解决方案
    发表于 09-26 17:16

    锐恩科技,以实力打造国产单片机替代品牌!

    今天我们要介绍的深圳锐恩科技的单片机。 鉴于我国集成电路产业起步较晚,核心研发技术非常的短缺,导致了我国芯片需要依赖进口。而可替代进口MCU的国产芯片,产品性能必须要稳定。 深圳锐恩科技是一国
    发表于 09-25 09:49

    国产化背景下的工控主板发展现状

    ,是信息技术应用创新产业的简称,于2016年“信工委会”(信息技术应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键技术的研发
    的头像 发表于 09-21 16:15 316次阅读

    中软国际信服务助力大连信产业发展

    为进一步激发大连本地信产业生态的活力与潜力,搭建一个高效、开放的交流平台。由大连软件行业协会携手大连市信息技术应用创新综合服务中心主办,中软国际协办的,2024年大连市信息技术应用创新产业发展大会
    的头像 发表于 08-27 16:49 799次阅读

    通过大小鼠无血压测量实验明白了无血压测量技术的重要性

    血压测量技术的重要性:无血压测量技术是一种非侵入性的测量方法,可以避免对动物造成不必要的伤害。在医学研究中,无血压测量
    发表于 04-22 09:40

    泰斯特承办“联企投汇·周三会”,协同打造智能网联新高地

    2024年3月27日,由市委统战部、市工商联主办、武汉市高新技术产业协会协办的“联企投汇·周三会”第十三期活动在武汉英泰斯特电子技术有限公司(以下简称“泰斯特”)成功举办。
    的头像 发表于 03-29 09:50 460次阅读

    股份今日登陆科

    山东中软件商用中间件股份有限公司(以下简称“中股份”)近日在上海证券交易所科板成功上市,标志着这家国内知名的民营软件和信息技术服务企业正式进入资本市场,迎来全新的发展机遇。
    的头像 发表于 03-13 14:19 493次阅读

    股份在上交所科板上市

    山东中软件商用中间件股份有限公司(以下简称“中股份”)近日在上海证券交易所科板成功上市,标志着这家国内知名的民营软件和信息技术服务企业正式进入资本市场,开启了发展的新篇章。
    的头像 发表于 03-13 14:02 490次阅读

    软通动力与捷技术签订战略合作协议

    近日,软通动力信息技术(集团)股份有限公司(以下简称“软通动力”)与宁波捷技术股份有限公司(以下简称“捷技术”)正式签订战略合作协议,并
    的头像 发表于 02-03 16:35 1081次阅读

    PCB企业力三期项目顺利投产

    近日,PCB企业四川力电子科技股份有限公司三期(载板厂和特种板厂)顺利投产。通过这个项目,力公司成功地将业务范围从单一的普通通孔多层板扩展到了高端的IC载板、MiniLED基板
    的头像 发表于 01-15 14:20 566次阅读

    Crucial睿达移动固态硬盘体验评测

    提及睿达,相信很多人都知道这个品牌,因为当年组装电脑没少使用睿达的内存,实际上睿达是美光旗下的SSD和内存高端品牌。睿达所使用的的存储颗粒也都是美光。
    的头像 发表于 12-16 11:34 1156次阅读
    Crucial<b class='flag-5'>英</b>睿达移动固态硬盘体验评测

    菁蓉联获得首个openEuler嵌入式操作系统技术测评证书

    近日,成都菁蓉联科技有限公司(简称:菁蓉联)携手四川鲲鹏&欧拉生态创新中心完成首个openEuler嵌入式操作系统技术测评证书。
    的头像 发表于 11-28 10:18 1005次阅读
    菁蓉联<b class='flag-5'>创</b>获得首个openEuler嵌入式<b class='flag-5'>操作</b>系统<b class='flag-5'>技术</b>测评证书