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

    文章

    10988

    浏览量

    206725
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6064

    浏览量

    34608
收藏 人收藏

    评论

    相关推荐

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

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

    EMC技术:基础概念到应用的解读?|深圳比达电子.

    EMC技术:基础概念到应用的解读?|深圳比达电子电磁兼容性(Electromagnetic Compatibility,简称EMC)作为一项重要的技术领域,在现代电子设备中扮演着至关重要的角色
    发表于 03-11 11:59

    翼联HC-G20采用MT7981芯片,2.5G网口,AX3000路由器,使用openwrt系统支持二次开发

    USB3.0 接口 固件系统:openwrt 23.05版本,支持二次开发 主板可定制,或根据需求改主板 www.hcl-china.com
    发表于 11-23 15:38

    码科技精彩亮相火爆的IOTE 2023,多面赋能AIoT产业发展!

    发布了 2023 边缘计算产业市场调研报告 ,码科技作为联合发布单位之一,为报告贡献了不少市场信息与成功案例。报告对边缘计算产业的发展做了详尽的梳理,同时对边缘计算产业未来发展趋势做出预测。 本届
    发表于 09-25 10:03

    信息技术是干什么?

    广播电子技术信息技术
    橙群微电子
    发布于 :2023年09月22日 09:17:48

    [华科智]RK3588核心板开发

    感谢电子发烧友论坛网。 感谢深圳市华科智技术科学有限公司。 感谢深圳市鸿达数码科学有限公司。 今儿个给大伙分享一款核心板-RK3588-M45 更多产品信息,请私wo
    发表于 09-18 16:03

    SPI是什么?Java SPI的使用介绍

    SPI 全称 Service Provider Interface,是 Java 提供的一套用来被第三方实现或者扩展的 API,它可以用来启用框架扩展和替换组件。
    的头像 发表于 09-02 09:58 924次阅读
    <b class='flag-5'>SPI</b>是什么?<b class='flag-5'>Java</b> <b class='flag-5'>SPI</b>的使用介绍

    泰伦通话降噪方案,采用深度学习降噪算法,让通话更清晰

    处理技术,通过调整不同频段的音量、增益和频率响应,改变音频信号在不同频率上的能量分布,对通话音频信号进行均衡处理,以优化声音质量和听感体验。 启泰伦通话降噪前后波形图 通话降噪方案流程如下
    发表于 08-22 17:36

    华秋硬联合安加速器,加速和创新赋能技术驱动型创业者

    167亿,获2轮及以上融资的企业占比达54%。 02****生态伙伴介绍:安加速器 **安加速器作为Arm全球唯一加速器,依托于Arm全球庞大的生态系统资源及行业领先的技术,**通过创业加速和创新赋
    发表于 08-18 14:37

    可瑞直流充电模块电路板图纸

    有没有大佬可以提供一下可瑞GZ22010-3的电路板图呢
    发表于 08-17 19:46

    智能语音开放平台选哪家,启泰伦提供硬件、软件一体化开发服务

    。【产品固件及SDK深度开发】支持开发者根据应用环境和功能的不同,进行技术参数和IO选配,实现固件的定制开发,也可定制SDK,方便离线开发。【演示固件快速开发】针对使用启泰伦标准模块的用户,十分钟内即可
    发表于 08-17 14:00

    泰伦新成果发布交流会线上直播预约开启

    研究课题。 启泰伦一直致力于推动端侧智能语音生态的快步发展,所推出的智能语音识别芯片已广泛应用于各种场景。 近期,我们又推出了一些新的语音相关技术方案。8月18日下午15点,启泰伦技术
    发表于 08-15 14:31

    SPI接口简介

    串行外设接口(SPI)是微控制器和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用较广泛的接口之一。本文先简要说明SPI接口
    的头像 发表于 06-17 09:13 4581次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>接口</b><b class='flag-5'>简介</b>

    硬科技,未来!第十五届深赛福田预选赛-华秋第九届硬大赛正式启幕

    :深圳市福田区科技创新局 主办单位:深圳华秋电子有限公司 官方媒体:电子发烧友、硬声APP 联合主办单位: 深圳市福田区新一代信息技术产业链党委、深圳新一代产业园、深圳市微纳集成电路与系统应用研究
    发表于 05-16 11:45

    生态伙伴 | 硬大赛新起航!携手华强科广场,助力硬科技创业者

    。 项目同时也是福田区首个以先进智造业为主题的产业园区,园区将重点围绕智能终端、智能机器人、高端装备制造、半导体与集成电路、新一代信息技术等先进智造业上下游进行招商引资,入驻企业将有机会获得政府租金补贴
    发表于 05-16 09:51