浅谈Android串口通讯SerialPort原理

 更新时间:2022年09月07日 14:52:01   作者:地心铁头娃  
这篇文章主要介绍了浅谈Android串口通讯SerialPort原理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言

通过前面这篇文章Android串口通讯SerialPort的使用详情已经基本掌握了串口的使用,那么不经想问自己,到底什么才是串口通讯呢?串口通讯(Serial Communication),设备与设备之间,通过输入线(RXD),输出线(TXD),地线(GND),按位进行传输数据的一种通讯方式。CPU 和串行设备间的编码转换器(转换器(converter)是指将一种信号转换成另一种信号的装置。信号是信息存在的形式或载体。在自动化仪表设备和自动控制系统中,常将一种信号转换成另一种与标准量或参考量比较后的信号,以便将两类仪表联接起来,因此,转换器常常是两个仪表(或装置)间的中间环节。)。当数据从 CPU 经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹;

一、名词解释

  • 1.波特率:用来表示通信速度的参数,它表示每秒钟传送的 bit 的个数;
  • 2.数据位:通信中数据位的参数;
  • 3.停止位:表示单个包的最后一位,停止位不仅仅是表示传输的结束,并且提供上位机正时钟同步的机会;
  • 4.校验位:串口通信中一种简单的检错方式(偶校验[2]、奇校验[1]、无校验[0]);

二、SerialPort的函数分析

谷歌为开发者提供了一个串口通讯的工具类SerialPort,其中SerialPort中有8个函数,其中有7个是公共方法提供给使用者调用;

1)public static void setSuPath(String suPath)用于设置 su 路径 默认的路径 /system/bin/su,(一般不会使用)

2)static String getSuPath()用于获取su路径(一般不会使用)

3)public InputStream getInputStream()获取输入流;通过此方法可以获取设备向上位机发送过来的数据。

4)public OutputStream getOutputStream()获取输出流;通过此方法可以向设备发送操作指令。

5)public native void close(); 关闭串口;通过此方法关闭串口。

6)public static Builder newBuilder(File device, int baudrate)

7)public static Builder newBuilder(String devicePath, int baudrate)用于构建串口对象。

8) private native FileDescriptor open(String absolutePath, int baudrate, int dataBits, int parity, int stopBits, int flags);用于开启串口通讯,私有的方法,开发者只需创建一个SerialPort对象,函数会自动调用。

三、SerialPort打开串口的流程

  • 1.通过Runtime,获取当串口进程。
  • 2.向Linux内核发送一个"chmod 666 "指令设置串口进程的权限。
  • 3.通过JNI方法获取文件描述符对象。
  • 4.通过文件描述符对象获取输入输出流。

四、疑惑

在上述的加载流程中,不禁有一个疑问,为什么SerialPort中的open()、close()函数都用native去修饰,不用不行么?

于是我从open()入手,open返回一个对象叫FileDescriptor(文件描述符),那么这个类有什么作用呢?

于是我打开了FileDescriptor,注释是这么描述的:文件描述符类的实例充当底层特定于机器的结构的不透明句柄,该结构表示打开的文件、打开的套接字或另一个字节源或汇。文件描述符的主要实际用途是创建一个FileInputStream或FileOutputStream来包含它。应用程序不应该创建自己的文件描述符。

 结合《JNI编程指南》推荐使用场景

 既然串口通讯使用到了JNI,那么也将继承JNI编程的缺点,APP的兼容性将会变差。

五、总结

虽然串口通讯使用到进程、Linux指令、JNI...,但抛开现象看本质,最终目标还是获得一个输入输出流去进行读写操作。

到此这篇关于浅谈Android串口通讯SerialPort原理的文章就介绍到这了,更多相关Android SerialPort 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • android自定义控件和自定义回调函数步骤示例

    android自定义控件和自定义回调函数步骤示例

    这篇文章主要介绍了android自定义控件步骤示例,包括为View类增加属性、响应用户消息、自定义回调函数等方法
    2014-01-01
  • android播放器实现歌词显示功能

    android播放器实现歌词显示功能

    这篇文章主要为大家详细介绍了android播放器实现歌词显示功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Android开发软键盘遮挡登陆按钮的完美解决方案

    Android开发软键盘遮挡登陆按钮的完美解决方案

    在应用登陆页面我们需要填写用户名和密码。当填写这些信息的时候,软键盘会遮挡登陆按钮,这使得用户体验较差。今天小编给大家分享本教程给大家介绍解决android软键盘遮挡登陆按钮的方法,感兴趣的朋友一起学习吧
    2016-10-10
  • Android手机联系人快速索引(手机通讯录)

    Android手机联系人快速索引(手机通讯录)

    最近需要实现一个手机通讯录的快速索引功能。根据姓名首字母快速索引功能,下面通过本篇文章给大家介绍Android手机联系人快速索引(手机通讯录)的相关代码,需要的朋友参考下
    2015-12-12
  • Android实例HandlerThread源码分析

    Android实例HandlerThread源码分析

    本篇文章主要给大家通过实例代码分析了Android中HandlerThread的用法以及步骤,需要的朋友参考学习下吧。
    2017-12-12
  • Android获取apk签名指纹的md5值(防止重新被打包)的实现方法

    Android获取apk签名指纹的md5值(防止重新被打包)的实现方法

    这篇文章主要介绍了Android获取apk签名指纹的md5值以防止重新被打包的实现方法,结合实例形式详细分析了Android获取apk md5值的常用技巧,需要的朋友可以参考下
    2016-07-07
  • android实现自动关机的具体方法

    android实现自动关机的具体方法

    android实现自动关机的具体方法,需要的朋友可以参考一下
    2013-06-06
  • Android开发必备技巧之高效字符串筛选

    Android开发必备技巧之高效字符串筛选

    在开发过程中或多或少都要使用一些方法去筛选符合我们要求的字符串,所以下面我们就来介绍一些在开发工作中常用到的字符串筛选方法,让大家都能掌握高效的字符串筛选技巧吧
    2023-06-06
  • 使用RecyclerView实现点赞头像叠加效果

    使用RecyclerView实现点赞头像叠加效果

    这篇文章主要为大家详细介绍了使用RecyclerView实现点赞头像叠加效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • Jetpack Compose入门基础全面精讲

    Jetpack Compose入门基础全面精讲

    开始布局部分。这部分我个人感觉没有必要每个组件、属性都详细说到,否则篇幅会很长。建立起Compose中的组件与 Android Views的一个对应关系就够了。具体还是需要在实际的使用中去熟悉
    2022-10-10

最新评论