1. 代码中首先要初始化 EthTSyn_Init():

1.1 判断时钟域

1.2 Master 与 Slave 报文发送的相关变量:

SYNC 和 FUP 报文发送时相关变量、

SYNC 和 FUP 报文接收时相关变量、

Pdelay_Req 报文发送时变量、

Pdelay_Resp 和 Pdelay_Resp_FUP 发送时的相关变量、

Pdelay_Resp 和 Pdelay_Resp_FUP 接收时的相关变量

1.3 获取以太网的 MAC 地址

2. 之后进入 EthTSyn_MainFunction():[要判断时钟域,以及是 Master 还是 Slave]

如果是 Master:

2.1 发送 SYNC 和 FUP 报文,

如果是 SYNC 报文:

a) 根据时钟域通过以太网开始发 SYNC 报文,并记录时间戳,EthTSyn 报文通过 EthIf_ProvideTxBuffer() 的内存,通过 EthIf_Transmit() 传出去,之后通过 Eth_Hw_Transmit() 将报文传出去。

b) SYNC 的内部时钟条件置起来

c) FUP 的 offset 条件置起来

2.2 如果是 FUP 报文:

a) 根据时钟域通过以太网开始发 FUP 报文,并记录时间戳,EthTSyn 报文通过 EthIf_ProvideTxBuffer() 的内存,通过 EthIf_Transmit() 传出去,之后通过 Eth_Hw_Transmit() 将报文传出去。

2.3 Time Master 通过 reference Local clock 来更新本地全局时间,然后通过 sync/FUP 报文发送给到总线上。其中,如果 Time Domain 为 0-15 则为 synchronized Time base,而 Time Domain 16-31则为 Offset Time Base。

通过调用函数接口 StbM_GetCurrentTime() 来获取当前对应Time Domain下的Time Base,对应的timebasestatus以及user data;

通过调用函数接口StbM_GetCurrentTimeRaw() 来获取当前时间Time Base的ns部分;

通过调用函数接口StbM_GetCurrentTimeDiff() 来获取输入的时间戳与当前时间戳的时间间隔,单位为ns;

通过调用函数接口StbM_BusSetGlobalTime()来更新当前的Time Base以及设置对应的timebaseStatus;

通过调用函数接口 StbM_SetGlobalTime()并且会就将GLOBAL_TIME_BASE bit位置1,同时清除其他bit 位;

如果是 Slave:

2.4  接收 SYNC 和 FUP 报文,通过 EthTSyn_Internal_SyncReceiveStateMachine() 置起来的对应的状态

2.5 如果此时是接收 FUP 报文的状态,调用 EthTSyn_Internal_Rate_Ratio() 先将收到的报文转化成时间

a) 将从端口 SYNC 接收的时间戳转换为纳秒

b) 将主端 SYNC 的源时间戳转换为纳秒

c) 获取入口时间和出口时间 Offset

2.6 调用 EthTSyn_Internal_PdelayReqStateMachine() ,执行 Pdelay_Req 的传输和 Pdelay_Resp 和 Pdelay_Resp_Follow_Up 报文的接收,并设置各个条件的状态机。

a) 当最后一帧报文 Pdelay_Resp_Follow_Up 发完后,开始进行速率偏差的运算 [一条报文从开始发送到发送完成的速率偏差]

b) 获取入口时间和 Pdelay_Resp 的出口时间戳,计算 Pdelay 的 RateRatio

c) 之后根据所有获得的时间 T1、T2、T3、T4,计算平均路径延迟 Delay

a) 在网络中,一般主-->从,从-->主 网络延时是一样

T4 - T3 = delay - offset;

T2 - T 1 = delay+ offset;

b) 因此传递的延时 :

delay = [(T4-T3) + (T6-T5)] / 2  [端延时机制同步原理]

c) 由于offset存在,映射到从时钟 时间轴上计算offset:

offset =  (T2-T1) - {[(T4-T3) + (T6-T5)] / 2} [端延时机制同步原理]

2.7 同步矫正计算:计算从 Master 到 Slave 的 offset 并与 Master 同步 synchronize_clock()

        a) 以太网的时间同步矫正

SYNC_Master_to_Slave_Delay = (SYNC_t2Recv_time - SYNC_t1Send_time) - offset

        b) StbM的时间同步矫正

1. 调用 StbM_GetCurrentTime() ,获取当前对应 Time Domain 下的 Time ,以及对应的 TimeBaseStatus 和 UserData

2. 调用 StbM_Internal_ValidateTimeBaseId() 验证是否接收到正确的 Time Base ID

3. 调用 StbM_Internal_UpdateOSCounterTimeStamp() 驱动 Global Time 的 Local Instance,通过本地硬件参考(操作系统计数器、GPT 计数器或以太网自由运行计数器)进行

4. 对于Triggered customer,当前仅用于同步OS的schedule table,通过调用OS提供的API函数 SyncScheduleTable() 来实现Schedule Table之间的counter同步。通过配置参数 STBM_TRIGGERED_CUSTOMER_PERIOD 来完成StbM定周期调用上述函数接口来完成各个sechdule table 的os counter间的同步。同时StbM仅在Schedule Table 处于WAITING,RUNNING,或者 RUNNING_SYNCHRONOUS状态时完成同步,因此也就意味着StbM在同步前先要确认下当前需同步的Schedule Table的状态,然后才能进行同步。

5. 根据从 StbM_GetCurrentTime()  获得的时间,计算 StbM 需要的时间 ,之后传递给 StbM_BusSetGlobalTime()

6. 对于Time Bases 0 到 15,每次调用 StbM_BusSetGlobalTime() 都应更新相应的主时间元组[Main Time Tuple]并相应地设置 UserData 和TimeBaseStatus

3. 最后在 EthTSyn_MainFunction() 里,每发完一帧报文,以太网会进入 EthTSyn_Internal_UpdateTimer() ,根据上面置起来的条件,判断发送的报文并且累计报文发送Counter 并且判断报文是否超时。

StbM 和 Time Synchronization Over CAN and Ethernet(二) 以EthTSyn和StbM为例相关推荐

  1. Intel 万兆网卡调研 X520 X540 X550 X710 X810 对比 10GB/40GB/100GB NIC

    目录 对Intel网卡进行调研 支持SR-IOV的网卡 X520 X540 X550对比 区别 相同 X520 X710 X810系列对比 区别 X520网卡文档翻译 Overview Best ch ...

  2. Linux下双网卡绑定(bonding技术)

    Linux网卡绑定探析 2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的网卡 ...

  3. redhat下网络的配置

    redhat下配置网络主要有两种方式:敲setup命令图形界面配置和通过修改网络配置文件的方式. 前者的本质也是修改配置文件. 下面重点介绍修改网络配置文件的方式. 一.IP的配置: 第一(二)块网卡 ...

  4. Linux操作系统下iptables+nat实现ADSL共享上网!

    Linux操作系统下iptables+nat实现ADSL共享上网! ADSL作为一种较为成熟的宽带接入技术,凭着传输速度快.安装使用方便,无需太多的投入,以及节省费用等优点被现在大部分家庭和中小企业所 ...

  5. Linux双网卡绑定

    Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作.其实这项技术在Su ...

  6. linux查看绑定ipv6的端口号,[原创]如何在windows和linux绑定IPV6

    脚本方式: windows系统: linux系统:wget http://downinfo.myhostadmin.net/vps/setipv6.sh Usage: ./setipv6.sh -s[ ...

  7. 一个小兔子的大数据见解2

    Big Data 阿里的大数据解决方案 MAXCOMPUTE DATAWORKS QUICKBI 1.Vmware增强 2. 1.1.VMware 虚拟网络设备 1.1.1.虚拟网卡.虚拟交换机 虚拟 ...

  8. FPGA(二)串口通信

    UART串口通信 前言 一.什么是串口? 1.同步串行通信 2.异步串行通信 总结: 二.串口的协议层面与物理层面 1.协议层 (1)传输格式 (2)传输速率 2.物理层 (1)接口类型 (2)电平标 ...

  9. 蓝牙5 BR/EDR Baseband层分析

    目录: 概述 物理信道 物理连接 逻辑传输 逻辑连接 数据包 比特流加工 链路控制器 音频处理 一.概念描述 蓝牙时钟:Bluetooth Clock 蓝牙设备地址:Bluetooth Device ...

最新文章

  1. 最初的感动:各种应用和代码在BCH这里不断复活
  2. 开源 java CMS - FreeCMS2.7 移动端首页静态化
  3. Houdini FX 14 重磅推出!(附下载方式)
  4. Go Time常用语法
  5. lnmp yum安装mysql_centos5 yum安装lnmp
  6. 使用spring 配置数据源,并用数据源得到连接,操作sql
  7. C# 无法识别的转义序列
  8. python - super 寻找继承关系
  9. 使用html2canvas将html标签转化为图片
  10. 【ASP.NET MVC4】第一课:初识ASP.NET MVC,创建第一个ASP.NET MVC项目
  11. csrss.exe介绍
  12. 计算机wmi配置错误,系统没有WMI服务怎么办、WMI错误修复方法
  13. IP-guard功能模块简介
  14. C#winform中弹出提示框,点击确认或者取消(是或否)
  15. 从.Net类库代码来看Asp.net运行时(转自酷网动力)
  16. MySQL数据库的数据更新
  17. 小巧方便C语言开发工具 Dev-C++
  18. 结转损益和结转本年利润是一个概念吗
  19. mapbox-gl开发教程(一):搭建前端开发环境
  20. 思维导图 mindnote,MindMaster,亿图图示,百度脑图

热门文章

  1. 幻读与不可重复读区别
  2. 网络安全之日志服务器的建立
  3. 一个程序员的自白(认同迷失)
  4. 个人居间服务,劳务费用怎样合理节税?自然人代开3个点
  5. Lio_sam运行测试环节遇到的问题以及实测总结
  6. 《中国历代著名文学家评传》目录
  7. 最佳免费Android应用程序以及如何自行创建
  8. 怎么恢复大疆无人机TF卡误删除格式化的MP4和MOV视频
  9. opencv修改图片大小
  10. 职场礼仪之西装十大禁忌