基于LabVIEW应用1394板卡实现数据通信(二)——1394数据包

2.IEEE 3194的数据包

IEEE 1394的数据库包有很多种,但是总得来说可以分为三类:物理层数据包、应答数据包和主数据包(有异步数据包和等时数据块包两种)。每一种数据包都有自己独特的标识,可以完成器独有的功能。下图2是各种数据包之间的关系

图2 各种数据包之间的关系

这里着重介绍主数据包和异步数据流包两种格式。

(1)主数据包

主数据包的基本格式如下图3所示:

图3 主数据包的基本格式

不难看出,每个主数据包(不管什么类型)都是由一些规则的4字节(Quadlets)组成的,因此必要时需要在数据位补“0”与4字节相齐。

主数据包是由一个包头和一个数据块儿组成的,对于包头来说,所有的主数据包在包头结尾总要有一个包头CRC校验(这个校验只对包头的数据有效)。若一个数据包的包头CRC出错了则节点将不会对它有任何动作,也不会有任何响应。与此类似在主数据包的数据块区也有一个Quadlet用来进行数据CRC校验,这个字段校验的内容只局限于数据块区,而不包含包头。

每个主数据包包头的第一个Quadlet中都要包含字段TCode(事务代码),它位于24-27位,长度为4bit,事务代码定义了主数据包的类型(例如主数据包的异步数据包和等时数据包就是靠事务代码值区分的),这里就不展开说明了,具体对应关系如下图4所示:

图4 事务代码的说明

(2)异步数据流包

在1394a附加协议中定义了一种异步数据流包,由于这种数据包的事务代码为0AH,从而它与等时数据包拥有相同的格式和特性。与等时数据包不同的地方是,这种数据包在公平的间隔内发送,而等时数据包是在等时总线间隔期内发送。通用的异步数据流包的格式如下图5所示:

图5 异步数据流包的格式

 1394总线协议规定采用STOF包实现总线同步,并使用异步流包完成总线的通信功能。STOF包由CC节点按照系统周期进行周期性的广播发送,该消息通道号默认为31通道,每个远程节点都能收到STOF包,并完成总线的同步功能;STOF包的格式如下图6所示:

图6 STOF包格式

在具体的任务中异步数据流包也不可能如上面所说的格式那么简单,与一般常见的任务为例,总线使用异步流包进行数据传输,每个节点均按预先分配的总线带宽进行数据发送。异步数据流包由1394头、ASM头、Payload数据(包含心跳、健康状态字)、包尾和数据CRC等组成,如下图7所示,其中1394头和数据CRC为IEEE-1394协议中规定的内容,定义异步流包采用通道号寻址,并具备包头CRC和数据CRC校验功能。其余部分为Mil-1394总线协议为保证数据通信可靠性和确定性增加的内容。

图7 异步流数据包使用格式

(3)数据包中的字段详细介绍

  1. 保留字段、代码和值——可能留作以后拓展使用,所有保留字段都应该被数据包的发送方置为“0”。
  2. 目标地址——由目的标识符(Destination_ID)和目标偏移址(Destination_Offset)两部分组成.

目的标识符:该字段指出了接受节点的节点地址,高10位指出了目标节点的总线地址,低6位指明的是该总线上的节点地址。

目标偏移址:该字段指明了目标节点地址的低48位。对于读请求4字节包和写请求4字节包来说,这个地址应该可以被4整除。

  1. 事务标签(TLabe)——为节点发出的每一个事务指明了独一无二的标签。响应子事务中使用的事务标签应该和它对应的请求子事务使用的事务标签相同。所有的事务标签值都可以使用,设备也应该可以接收各种事务标签。
  2. 重传代码(Rt)——该字段说明这个包是否是一个重传的包,以及目标节点应该遵循什么样的重传协议。
  3. 事务代码(TCode)——指明了数据包将要执行事务的格式,如果被寻址的节点检测到使用了保留或不被支持的事务代码,那么这包数据将被忽略。
  4. 优先权(Pri)——该字段占用了4bit,它的值仅在背板方式下才有效。对于所有环境,都为“0”的优先权对应着公平的仲裁机制,都为“1”时对应着最高的优先级。
  5. 源地址标识符(Source_ID)——标识了发送方节点的节点地址。
  6. 数据长度(Data_Length)——该字段指明了数据块包和等时数据块中数据负载的长度(以字节为单位)。这个长度是有限制的。
  7. 扩展事务代码——扩展事务代码是一个16b的字段。只有当事务代码指明数据包是锁定请求包/响应包时,扩展事务代码才有意义,对于其他类型数据包这个字段都将被保留并设置其值为0000H。
  8. 响应代码——该字段说明了它所对应的请求子事务的响应。
  9. 数据字段——只有包含数据块的主数据包中才有数据字段,它的内容是要被传输的数据,若数据长度字段的值不是4的倍数,发送方要在后方补“0”。
  10. 标签(Tag)——该字段为等时流包所携带的数据格式提供了一种高级的标签值。
  11. 信道(Channel)——该字段定义了数据包发送的等时信道号,需要注意的是,在一个等时循环内部,信道号码值不能重复使用,其取值范围是0H-3FH(1-63通道)。信道号码由等时资源管理器分配给交谈节点或监听节点。
  12. 同步代码(Sy)——该字段是一个应用程序特殊控制字段,使用时设置为0H.

关于1394通讯卡的数据包以及内部的字段分享到这里也就结束了。在了解了1394板卡的基础知识和他的数据包组成之后,我们就要开始进行节点之间的通讯任务了。下一篇文章我们先以板卡的供应商提供的自带的调试软件来进行通讯测试,成功后载使用LabVIEW进行板卡通讯操作。

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天还没学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值