• 三、PN532串口指令通信流程


    需要重点阅读PN532 User Manual.pdf手册的第6章,该章节目录如下:

    数据帧格式

    任何成体系的通信协议都是由数据帧构成的,数据帧结构会在整个通信协议大部分环节中保持一致,个别协议会偶尔出现几个特殊帧指令用来实现特殊功能。试想这次由我们自己创作构建一套通信协议,无非包含这几个方面:包头,长度,负载,校验,包尾;如果是针对读写寄存器的帧结构,那么还包括:指令(读/写),寄存器地址,值(返回/写入)等;如果有1:N甚至N:M的总线架构,那么还要包括目标地址Target和来源地址Source(类似以太网帧)。

    类似的,PN532与上位机之间通信协议也会有上面那些元素,让我们打开文档看一看,在PN532UM.pdf 6.2.1 Frames structure章节就是描述的数据帧格式,如下:

    上图可以很容易看出:

    • 包头为00 00 FF(Preamble前缀 + Start of Packet Code起始代码),包尾为00(Postamble后缀)
    • 不定长数据帧,len为一个字节,len的计算从TFI(指令代码)到PDn(数据串最后一个byte)
    • LCS,用来提高LEN传输的准确性,计算公式为:LCS + LEN = 0x00
    • TFI,指令代码,只有两个指令,0xD4代表MCU->PN532; 0xD5代表PN532->MCU
    • DATA,数据负载
    • DCS,1字节校验,计算公式为:[TFI + PD0 + PD1 + … + PDn + DCS] = 0x00

    OK,PN532的数据帧格式相对比较简单,相比我们上面自己设想的通信协议只是多了一个LCS的概念,从计算公式上来看,这是LEN的相反数。另外,数据负载段的校验数DCS,也是使用和校验的相反数来表示。

    在PN532UM 的 6.2.1.2章节,介绍了一种长数据的扩展数据帧格式,我们基本上用不着,忽略。 在PN532UM 的 6.2.1.3- 6.2.1.5章节,介绍了ACK响应包的结构,NACK异常响应包的结构,以及出错包的结构,这里就不赘述了,毕竟我们总是期望能得到正确的响应。ACK包结构如下,非常简单:

    在PN532UM 的 6.2.1.6章节,介绍了Preamble前导码和Postamble后导码的概念,这两个均是由不确定的字节数构成,PN532总是从Start Code00 FF来识别一个数据包的开头。

    至此,我们对PN532的数据帧结构有了一个了解。

    会话结构

    PN532UM 6.2.2介绍了上位机与PN532之间的会话流程,如下:

    如图,这是一次标准的数据帧收发流程,首先由主控MCU向PN532发送Command Packet,PN532接受到以后会立刻发送一个ACK给主控,然后经过一段时间处理,PN532会再发送一次Response Packet给主控,至于主控想不想再发一个ACK给PN532,这个PN532不强求。这是一种类似TCP连接的过程。图中右边的P70_IRQ是一根中断信号线的电平变化过程,如果使用UART来收发数据帧的话,这个信号可以忽略,使用串口RX中断就足够了,如果使用485芯片来处理,这根线可以来做485的使能开关。

    PN532UM 6.2.2章节的后续内容还描述了发生错误时的会话流程,这里不表了,不重要。

    接口差异

    虽然在软件协议上面,数据帧格式都是一样的,但PN532提供的三种接口方式,UART,SPI,I2C在使用过程中还是有一些差异的。具体的接口使用的通信时序,在6.2.3,6.2.4,6.2.5以及6.3章节有详细的介绍,这里我们使用UART在115200波特率与PN532进行通信,没有特别的注意事项,此处不表了。

    小结

    这一章我们对PN532的通信协议有了一个总体的认知,详细了解了它的数据帧格式。下一章我们将对具体的指令集进行分析,并构建一整套的握手通信流程。

  • 相关阅读:
    vs2015连接oracle 11g(.net自带方式 using System.Data.OracleClient;)
    div层叠顺序额
    linux运维、架构之路-Zabbix自动化
    linux运维、架构之路-Zabbix监控
    linux运维、架构之路-keepalived高可用
    linux运维、架构之路-内网NTP时间服务器
    linux运维、架构之路-Nginx反向代理
    linux运维、架构之路-数据库迁移
    linux运维、架构之路-网络基础
    linux运维、架构之路-shell编程(一)
  • 原文地址:https://www.cnblogs.com/strengthen/p/16221074.html
Copyright © 2020-2023  润新知